реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> два сигнала разного разрешения объединить в один
sergey sva
сообщение May 10 2015, 17:04
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Есть два модуля измерения расстояния, из каждого выходит по два сигнала меандр, частотой 10кгц. Разница фаз показывает расстояние от датчика до объекта. Один датчик измеряет до 100м. То есть разница 100м это = 360 градусов. Второй датчик работает по такому же принципу только 5м это = 360 градусов. Они циклические к примеру если я его сдвигаю на 7,5м то на выходе будет разница 180гр. Фазу буду подсчитывать счетчиком по фронтам, плис циклоне 3. А вот как эти сигналы объединить что бы получить в одном регистре 32 разрядном значение в мм пока не придумал, если складывать то будет не правильно частоты одинаковые, подскажите мысль.
Go to the top of the page
 
+Quote Post
krux
сообщение May 10 2015, 17:29
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



простейший наивный подход примерно такой:
определить по 100-метровому показателю 1/20 часть (кратную 5-метровой точности) =N
записать в регистр N * 1/20, в мм, отбросив младшую часть (либо как-то использовать её, может с усреднением, весовым множителем (как менее точную) и пр.)
определить по 5-метровому показателю младшую часть
добавить её в регистр (в мм)

как преобразовывать значения счетчиков в конечные значения, складываемые в регистр - зависит от необходимости фильтрации (усреднения) значений, и требуемого количества измерений, выдаваемых в секунду.

при таком подходе вблизи точек, близких к кратным 5 метрам - погрешность измерений будет хуже


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 10 2015, 17:48
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Идея )) а если подсчитывать импульсы счетчиками так :один тактировать частотой в 20 раз меньше, а потом сложить два результата?
Go to the top of the page
 
+Quote Post
krux
сообщение May 10 2015, 18:05
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



вы в соседней ветке FPGA по SPI цепляете к какому-нибудь мк?
если да, то тогда проще в FPGA формировать 2 регистра для 100-метровых счетчиков, и два для 5-метровых, после чего спокойно их обрабатывать в мк как вам надо

подсчитывать импульсы с меньшей частотой (ака децимацию) не советую - в движении у вас количество периодов от двух входящих сигналов для сравнения может получится разное, и тогда промах гарантирован.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 10 2015, 18:20
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Да к микроконтроллеру stm32f407. Сигналы содержат фазовый шум. Думал результат после подсчета отфильтровать. Нужен фильтр с быстрым откликом 1мс. Быстрый фильтр в плис реализовать проще, не хотелось нагружать мк фильтрами.
Хороший результат получился когда сигнал пропустить через фильтр на переключаемых конденсаторах идеальный синус без шума. Меня результат приятно удивил. Только цена у них не эконом.
Если подсчитывать двумя счетчиками после пропускать через фильтры и объединить значение с 100м счетчика и 5м или вначале объединить а потом через фильтр пропустить?
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 12 2015, 04:19
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Немного подумал еще одна мысль пришла, 100м сигнал 20 раз подсчитывать и суммировать, потом к нему прибавить один подсчет 5м, так правильно?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 12 2015, 05:11
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



по 100 метровому определяем расстояние
допустим 57.7 м получили.
определяем остаток от деления на 5 - 2.7
представляем в виде 55+ 2.7
получаем показания 5 метрового
там типа 2.68
результат = 55 + 2.7*a + 2.68*b
где a,b от 0 до 1, так что их сумма 1.


Все вычисления можно сделать достаточно быстро в целочисленной арифметике с фиксированной точкой. можно подобрать удобные коэффициенты

остаток от деления на 5 - итерационно за 20 тактов вы получите результат, можно по таблице, можно еще как-то.

можно оба результата сразу домножить, чтобы 5 стало степенью 2, тогда остаток от деления буде получать за 1 такт сдвигом....
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 12 2015, 19:02
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



С коэффициентами хорошая мысль благодарю. Можно сделать что то вроде калибровки если будет какое то расхождение зависящие от расстояния. В плис с цифрами 0.5 0.6 проблематично работать или вы имеете ввиду все вычисления делать в мк? Хотелось бы узнать по какому варианту вы бы сделали?, у меня опыта мало не хочется изобретать велосипед (
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 12 2015, 19:29
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



никто не мешает домножить все на 16, а потом разделить.
и тогда надо вычислять уже не 0.4 и 0.6, а 7 и 9, хотите больше знаков после запятой домножайте на 32, после получения результата его надо просто сдвинуть чтобы вернуть правильный порядок. Стандартные вычисления с фиксированной точкой.

Если бы я делал, я бы составил бюджет точности. То есть скорее всего я бы диапазон 5-100 мерил бы по одному датчику, а 0-5 по другому. Потому что обычно датчик с меньшим диапазоном точнее, но в своем диапазоне.

Если же точность 5 метрового не страдает, и вопрос только зацикленности, то я бы по датчику 100 определял бы только номер пятерки, а измерения опять же базировал на 5 метровом.

Вариант с суммой показаний с весом - я бы считал самым экзотическим, и пошел бы по нему если варианты выше не дали бы удовлетворительных результатов.

И я не знаю какая у вас там нагрузка на процессор и ПЛИС, но считать иногда реально удобнее в процессоре. То есть можно в ПЛИС сделать сбор показаний датчика 100 и датчика 5, можно с какой-то примитивной фильтрацией, дальше эти 2 числа передавать в процессор, а ему останется сделать минимум операций, все можно свести к целочисленным без деления.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 12 2015, 20:13
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Процессор сильно не нагружен интерфейсы и настройки. Процессор с запасом поставил для этих процессоров (stm32f407)много библиотек пока нет на фтп но наверно скоро появятся )) profibus dpv0-1-2 profinet ....
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 26 2015, 13:28
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Есть хорошие результаты, добавил усреднение на 128, показания совсем стабилизировались, датчик измеряет в реальном времени (примерно 20мс. положение), на этой картинке уже значения переданные на пк полученные микроконтроллером из плис. Тренд медленный поэтому все закруглено немного. Провал это переход через 0 5м измерителя. Вершина это расстояние 300мм от отражателя до датчика.
Может есть специальные алгоритмы для объединения таких сигналов, как они называются? Спрашиваю не потому что не могу придумать, напридумывать могу огоо чего sm.gif. Но смысл если уже есть такие вычисления и не использовать только потому что не знаю не хорошо. Это где-то должно быть в навигации...
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 26 2015, 16:59
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Исправил фазы от которых происходит захват. код захвата фронтов такой: Может что потправить?
Еще мысль пришла если производить захват не в каждом периоде а через два например. По фронту первого сигнала запускать счетчик а вторым фронтом второго сигнала останавливать разрешение будет больше?
Еще по поводу объединения если не вычислять а сделать таблицу с значениями в озу на 100к а адрес брать из этих двух значений, так правильнее будет?
Код
//----------------------------------------------------------------------//
always @(posedge CLCK ) begin
    if (RESET) begin
        phasedetect <= 1'b0;
          casetrig    <= 3'd0;  
    end else  begin
         //phasedetect <= in1^in2;
         case(casetrig)
          3'd0: begin
              if(in1)begin
                  phasedetect <= 1'b1;
                if(in2)begin
                    casetrig    <= 3'd1;
                end else begin                    
                         casetrig    <= 3'd2;
                     end                    
              end           
          end
          3'd1: begin
              if(in2==0)begin                  
                     casetrig    <= 3'd2;
              end           
          end          
          3'd2: begin
              if(in2)begin
                  phasedetect <= 1'b0;
                     casetrig    <= 3'd3;
              end           
          end
          3'd3: begin
              if(in1==0)begin                  
                     casetrig    <= 3'd0;
              end           
          end          
          default: begin
              phasedetect <= 1'b0;
              casetrig    <= 3'd0;
          end
          endcase    

           
    end//reset    
end//always
//----------------------------------------------------------------------//

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 28 2015, 04:34
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Если еще совсем не надоел вам, нужна еще ваша помощь )).
После измерений стало понятно что привязываться к показаниям по расстоянию не получится. Значение расстояния зависит от частоты pll после конфигурации pll megawizartom на частоту 360 мгц реальная частота получается 360,1 а это уже не 5м а 4,9... может в разных микросхемах будут разные характеристики дискрет /расстояние. Придется в микроконтроллере сделать калибровку. А в плис хотелось бы сделать один регистр который бы менял свое значение от 0 до 32бит. в зависимости от расстояния. Сейчас подумал у меня получается 4 клока два опорных из этих двух один опорный для 5м другой опорный для 100м. Другие два меняют фазу в зависимости от расстояния относительно своих опорных сигналов. Все четыре меадра одинаковой частоты. Могу измерять так:
1) опорный 5м относительно пятиметрового сигнала. 0-360 = 0-60000 от 0 до 5м(примерно 5м 4,99)
2)опорный 100м относительно стометрового. 0-360 = 0-60000 от0 до 100м(примерно)
3) пяти метровый относительно стометрового. 0-360 = 0-60000 от0 до5м с смещением зависящем от 100м.
Нужно получить один сигнал от 0 до хх который будет меняться в зависимости от расстояния.
Благодарю за любые мысли идеи.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 28 2015, 07:36
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



это звуковые датчики?
То есть там передатчик и приемник?
Откуда вы взяли методику измерения? Что-то мне кажется у вас оно вообще не правильно сделано... Кто набег фазы измеряет разницей времени регистрации фронта?

надо перемножить сигналы
cos(a)*cos(a+fi) = 1/2(cos(2a + fi) + cos(fi))
дальше вы отфильтровываете 2 частоту, и получаете 1/2*cos(fi), ну а дальше получаете значение fi.

можно сделать фазовую подстройку через PID, то есть берете ваш cos(a) и возвратный cos(a+fi) и формируете еще один сигнал cos(a + fi1), а fi1 подбираете в PID регуляторе чтобы фазы не расходились.

Эти методы значительно более точные, чем ваши +- лапоть. И многие ваши метания отпадут сами собой, когда сделаете правильно....


А в случае звуковых датчиков, сдвиг фазы никто вообще не меряют. Измеряют время между запросом и ответом
алгоритм
1. включаем передатчик
2. фиксируем ответ на приемнике (если ответа нет, то расстояние больше рабочего)
3. выключаем передачик, и сразу запускаем счетчик времени
4. ждем когда пропадает ответ на приемнике, фиксируем время.

дальше из времени и скорости звука, с коррекцией на влажность и температуру (если очень хочется) получается расстояние....

Изобретать велосипеды хорошо, но и на чужие смотреть тоже иногда надоsm.gif
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 28 2015, 07:56
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Методику подбирал экспериментально. Лазерный диод модулируется сигналом который получаю в плис после он обратно приходит на модуль приемника а из него получается 2 пары сигналов. низкочастотных 10кгц. фаза зависит от расстояния. сигналы в плис приходят на модуль подсчета как посоветовал des00 интегрируются на интервале 6 периодов, получается значение в каждом счетчике 0-60000. Привязывать к расстоянию как вначале хотел не получится все зависит от частоты проще откалибровать.
Теперь нужно их объединить, что бы сигнал увеличивался или уменьшался пропорционально расстоянию.
Да изобретать люблю )) из всего выходит велосипед sm.gif
Прикрепленное изображение
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 04:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016