|
|
  |
Какие алгоритмы измерения расстояния используются в лазерных рулетках |
|
|
|
Jun 20 2015, 02:29
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(sergey sva @ Jun 19 2015, 21:22)  Снял с шагом 100мм но точность скорее всего миллиметров 10-15 двигал рукой по рулетке. [attachment=93354:10__.jpg] Получается, что на 360 градусов идёт 128684 импульсов. Интересно,откуда это число берётся? Отношение коэффициентов 30 и 45 МГц 1,47 , что совсем неплохо для такого макета(должно быть 1,5).
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 20 2015, 11:25
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(sergey sva @ Jun 20 2015, 13:46)  На графиках вы подсчитали методом наименьших квадратов? Для такого метода нужно по всей дистанции измерения измерить точки к примеру с шагом 100мм что бы потом рассчитать коэффициенты для каждой точки? В общем да. В Excel есть такая функция
|
|
|
|
|
Jun 20 2015, 12:03
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(sergey sva @ Jun 20 2015, 15:37)  Искать потом правильное значение расстоянии как правильно мыслю ? цифры возможно будут повторяться. Например поступили данные в микроконтроллер f1 и f2 последовательно умножаю на все коэффициенты которые есть d0 = n1*p1 + f1 === n2*p2 + f2 Когда условие совпадает значит расстояние подсчитано правильно, если два или больше совпадений будет? d0 = n1*p1 + f1 = n2*p2 + f2 n1 и n2 целые. То есть ищете n1 и n2 целые , так чтобы n1*p1 + f1 = n2*p2 + f2 . Всё. Есть погрешность измерения, и n1 и n2 почти целые Разберитесь с f1 и f2 ,как они измеряются?
|
|
|
|
|
Jun 20 2015, 13:54
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(sergey sva @ Jun 20 2015, 16:20)  А что вы думаете неправильно работает? Я думаю,XOR в 0 и 180 градусах неправильно работает(шум,фазу болтает). Загоняйте его в 90 градусов. PLL нужен или что-то типа того
|
|
|
|
|
Jun 23 2015, 08:01
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Проверял все работает отлично, задержки не влияют, схема сделана так что все задержки друг друга компенсируют. И даже температура на схему измерения мало влияет 20-40гр. температура влияет на скорость распространения волн через атмосферу, но это на небольшом расстоянии мало повлияет на измерение. Если потребуется можно сделать корректировку в stm32f407 есть термосопротивление, конечно встроенное термосопротивление измеряет температуру кристалла, попробовать можно, потом... Проблем с схемами измерителями нет, немножко что то понимаю  Результаты измерений неплохие, зависимость от расстояния почти линейная, при этом нет фильтрации сигнала как поступил в функцию так и ушел в пк. Основная задача сейчас сделать расчет расстояния в микроконтроллере stm32f407 на си. В нем по таймеру 10 раз в секунду выполняется функция в аргументах которой f1 f2 f3 в которых разница фаз , нужно рассчитать Y мм. Точки с шагом 100мм снятые экспериментально первая точка 500мм дальше 600мм 700мм... poi_f1_ poi_f2_ poi_f3_... Код uint32_t poi_f1_0deg[] = {6044,8287,10407,12369,15222,17353,19678,21529,23426,25241,27077,28810,31252,338 28,36392,38931,40906,42706,44302,46121,49712,51453,53525,55919,58317,60404,62388 , 64106,17576,2160,3856,5911,8024}; uint32_t poi_f1_45deg[]={21147,22974,25000,26779,28845,30870,33224,35423,37496,39647,41668,43455,45 763,48321,50319,52822,55240,57070,58671,60329,64223,12666,2209,5553,7530,9252,11 5 89,13653,15131,16773,18766,20900,23018}; uint32_t poi_f2_0deg[]={4690,6428,8024,9290,10704,11728,12948,14317,15784,16993,18491,19417,20858, 22331,24095,25768,27515,28386,29403,30672,34042,35199,36077,37031,38774,40257,42 0 84,43506,44638,45837,47074,49039,50345}; uint32_t poi_f2_45deg[]={18801,19787,20892,22206,23884,25155,26715,27582,28452,29748,31293,32728,34 426,35532,36787,38428,40459,42353,43553,44331,46903,48571,50461,51594,52506,5348 8 ,54941,56702,58335,59625,60399,61340,62830 }; uint32_t poi_f3[]={4896,5454,5830,6089,6379,6635,6942,7228,7336,7481,7691,7904,7758,7577,7247 ,7081,6903,6896,7164,6603,7303,7482,7757,8157,8479,8678,8998,9344,9626,9912,1016 2 ,10623,11090 }; uint32_t ClculateDistance(uint32_t F45Mhz_ph0deg,uint32_t F45Mhz_ph45deg,uint32_t F30Mhz_ph0deg,uint32_t F30Mhz_ph45deg, F3Mhz) { uint32_t Y_mm = 0;
send_pc_excel(F45Mhz_ph0deg,F45Mhz_ph45deg, F30Mhz_ph0deg, F30Mhz_ph45deg, F3Mhz);// передача на компьютер для построения графика
return Y_mm; } Помогите сделать функцию которая будет рассчитывать расстояние, проверю результат напишу? Спасибо.
|
|
|
|
|
Jun 24 2015, 01:39
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(sergey sva @ Jun 23 2015, 11:01)  Результаты измерений неплохие, зависимость от расстояния почти линейная. Если я правильно понял, то фаза 3МГц должна показывать грубое расстояние 0-50 метров. Линейности нет как нет и однозначности. Проверьте работу фазового детектора. Для этого нужно 2 ШИМа , один со сдвигом.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 24 2015, 03:47
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(sergey sva @ Jun 24 2015, 07:35)  Да все верно по 3Мгц определять порядок, а по 45 и 30 определять расстояние в мм. 45 и 30 практически линейные, а на 3Мгц большой линейности не получиться получить. По ним можно определять только номер перехода 45 и 30 и давать смещение. Как то так думается. Фазе 7000 соответствуют 3 расстояния. Какое брать? Что-то не то в схеме или алгоритме вычисления фазы. 3МГц - грубая шкала, она должна быть линейной с точностью лучше чем четверть минимального периода(45 МГц)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|