Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: два сигнала разного разрешения объединить в один
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
sergey sva
Есть два модуля измерения расстояния, из каждого выходит по два сигнала меандр, частотой 10кгц. Разница фаз показывает расстояние от датчика до объекта. Один датчик измеряет до 100м. То есть разница 100м это = 360 градусов. Второй датчик работает по такому же принципу только 5м это = 360 градусов. Они циклические к примеру если я его сдвигаю на 7,5м то на выходе будет разница 180гр. Фазу буду подсчитывать счетчиком по фронтам, плис циклоне 3. А вот как эти сигналы объединить что бы получить в одном регистре 32 разрядном значение в мм пока не придумал, если складывать то будет не правильно частоты одинаковые, подскажите мысль.
krux
простейший наивный подход примерно такой:
определить по 100-метровому показателю 1/20 часть (кратную 5-метровой точности) =N
записать в регистр N * 1/20, в мм, отбросив младшую часть (либо как-то использовать её, может с усреднением, весовым множителем (как менее точную) и пр.)
определить по 5-метровому показателю младшую часть
добавить её в регистр (в мм)

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

при таком подходе вблизи точек, близких к кратным 5 метрам - погрешность измерений будет хуже
sergey sva
Идея )) а если подсчитывать импульсы счетчиками так :один тактировать частотой в 20 раз меньше, а потом сложить два результата?
krux
вы в соседней ветке FPGA по SPI цепляете к какому-нибудь мк?
если да, то тогда проще в FPGA формировать 2 регистра для 100-метровых счетчиков, и два для 5-метровых, после чего спокойно их обрабатывать в мк как вам надо

подсчитывать импульсы с меньшей частотой (ака децимацию) не советую - в движении у вас количество периодов от двух входящих сигналов для сравнения может получится разное, и тогда промах гарантирован.
sergey sva
Да к микроконтроллеру stm32f407. Сигналы содержат фазовый шум. Думал результат после подсчета отфильтровать. Нужен фильтр с быстрым откликом 1мс. Быстрый фильтр в плис реализовать проще, не хотелось нагружать мк фильтрами.
Хороший результат получился когда сигнал пропустить через фильтр на переключаемых конденсаторах идеальный синус без шума. Меня результат приятно удивил. Только цена у них не эконом.
Если подсчитывать двумя счетчиками после пропускать через фильтры и объединить значение с 100м счетчика и 5м или вначале объединить а потом через фильтр пропустить?
sergey sva
Немного подумал еще одна мысль пришла, 100м сигнал 20 раз подсчитывать и суммировать, потом к нему прибавить один подсчет 5м, так правильно?
Golikov A.
по 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 такт сдвигом....
sergey sva
С коэффициентами хорошая мысль благодарю. Можно сделать что то вроде калибровки если будет какое то расхождение зависящие от расстояния. В плис с цифрами 0.5 0.6 проблематично работать или вы имеете ввиду все вычисления делать в мк? Хотелось бы узнать по какому варианту вы бы сделали?, у меня опыта мало не хочется изобретать велосипед (
Golikov A.
никто не мешает домножить все на 16, а потом разделить.
и тогда надо вычислять уже не 0.4 и 0.6, а 7 и 9, хотите больше знаков после запятой домножайте на 32, после получения результата его надо просто сдвинуть чтобы вернуть правильный порядок. Стандартные вычисления с фиксированной точкой.

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

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

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

И я не знаю какая у вас там нагрузка на процессор и ПЛИС, но считать иногда реально удобнее в процессоре. То есть можно в ПЛИС сделать сбор показаний датчика 100 и датчика 5, можно с какой-то примитивной фильтрацией, дальше эти 2 числа передавать в процессор, а ему останется сделать минимум операций, все можно свести к целочисленным без деления.
sergey sva
Процессор сильно не нагружен интерфейсы и настройки. Процессор с запасом поставил для этих процессоров (stm32f407)много библиотек пока нет на фтп но наверно скоро появятся )) profibus dpv0-1-2 profinet ....
sergey sva
Есть хорошие результаты, добавил усреднение на 128, показания совсем стабилизировались, датчик измеряет в реальном времени (примерно 20мс. положение), на этой картинке уже значения переданные на пк полученные микроконтроллером из плис. Тренд медленный поэтому все закруглено немного. Провал это переход через 0 5м измерителя. Вершина это расстояние 300мм от отражателя до датчика.
Может есть специальные алгоритмы для объединения таких сигналов, как они называются? Спрашиваю не потому что не могу придумать, напридумывать могу огоо чего sm.gif. Но смысл если уже есть такие вычисления и не использовать только потому что не знаю не хорошо. Это где-то должно быть в навигации...
Нажмите для просмотра прикрепленного файла
sergey sva
Исправил фазы от которых происходит захват. код захвата фронтов такой: Может что потправить?
Еще мысль пришла если производить захват не в каждом периоде а через два например. По фронту первого сигнала запускать счетчик а вторым фронтом второго сигнала останавливать разрешение будет больше?
Еще по поводу объединения если не вычислять а сделать таблицу с значениями в озу на 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
//----------------------------------------------------------------------//

Нажмите для просмотра прикрепленного файла
sergey sva
Если еще совсем не надоел вам, нужна еще ваша помощь )).
После измерений стало понятно что привязываться к показаниям по расстоянию не получится. Значение расстояния зависит от частоты 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 до хх который будет меняться в зависимости от расстояния.
Благодарю за любые мысли идеи.
Golikov A.
это звуковые датчики?
То есть там передатчик и приемник?
Откуда вы взяли методику измерения? Что-то мне кажется у вас оно вообще не правильно сделано... Кто набег фазы измеряет разницей времени регистрации фронта?

надо перемножить сигналы
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
sergey sva
Методику подбирал экспериментально. Лазерный диод модулируется сигналом который получаю в плис после он обратно приходит на модуль приемника а из него получается 2 пары сигналов. низкочастотных 10кгц. фаза зависит от расстояния. сигналы в плис приходят на модуль подсчета как посоветовал des00 интегрируются на интервале 6 периодов, получается значение в каждом счетчике 0-60000. Привязывать к расстоянию как вначале хотел не получится все зависит от частоты проще откалибровать.
Теперь нужно их объединить, что бы сигнал увеличивался или уменьшался пропорционально расстоянию.
Да изобретать люблю )) из всего выходит велосипед sm.gif
Нажмите для просмотра прикрепленного файла
Golikov A.
надо лазером моделировать ПСП, и потом интегратором получать сдвиг фазы, будет точнее и правильнее...
sergey sva
Вот это псп Можно и такой способ использовать, только вычисление будет занимать наверно секунду..
попробую потом. Сейчас хотелось бы запустить то что уже работает и испытать что получится. На картинке те сигналы которые приходят они уже измерены и находятся в трех регистрах )) в один регистр их нужно поместить.
Пробовал к 100м прибавлять измеренную разницу между 100м и 5м и поделить 20. что то не то считаю.
Golikov A.
надо взять расстояние по 100 метровому X
и по 5 метровому Y

и посчитать X - X%5 + Y, а лучше X - X%5 + (Y + X%5)/2, так поглаже будет...


Цитата
Вот это псп Можно и такой способ использовать, только вычисление будет занимать наверно секунду..

Почему? оно будет непрерывно давать значение, прям каждый такт... Да время выхода на режим будет какое-то, но секунда - это много...
sergey sva
Сейчас попробую, есть еще третий он с смещением получается и это смещение растет с увеличением расстояния . Если 5м проходит каждый раз от 0 до максимума всегда одинаково то третий(100-5) сдвигает этот переход с увеличением расстояния. его тоже как то можно добавить для повышения точности.
С псп в будущем попробую разобраться.
Здесь тоже стабильно получилось, если использовать внешний фапч , результат будет лучше.
sergey sva
Изменил схему для 10м и 100м дистанции, так точнее. по вашей формуле работает, но есть в момент перехода 360-0гр небольшой скачок (зеленная линия).
10м и 100м это условно. Сильно зависит от частоты pll. например 10м или 5м туда обратно, реально получается 7,4 или по 3,7м. туда обратно. Основная цель сейчас сделать переменную которая будет иметь пропорциональную зависимость от расстояния. А расстояние потом можно будет привязать калибровкой.
Наверно буду вычислять зависимость двух переменных. Мысль такая: устанавливаю объект нажимаю кнопку, передвигаю на 2м и снова нажимаю кнопку. Когда нажимаю вторую кнопку рассчитается множитель.
Цитата
uint32t tempA10,tempA100;
float mulA;
if(button1)
{
tempA10 = A10;
tempA100=A100;

}else if(button2){

mulA = (A10 - tempA10)/(A100 - tempA100);
}

а потом вот так, как вы порекомендовали.
DBRAM.StructurData.reservuint32[3]% только вместо 10 использовать mulA.
Если еще есть мысли у кого, как еще можно сделать скажите плз.

По вашей формуле, только рассчитываю в мк.
Код
//DBRAM.StructurData.reservuint32[3] 100м // DBRAM.StructurData.reservuint32[1] 10м
DBRAM.StructurData.reservfloat[1] = (float) ((DBRAM.StructurData.reservuint32[3]*10) - (DBRAM.StructurData.reservuint32[3]*10) %10)+(DBRAM.StructurData.reservuint32[3]%10 + DBRAM.StructurData.reservuint32[1])/2;

Нажмите для просмотра прикрепленного файла
sergey sva
Вопрос слабо связан с плис. Изначально хотел сделать измерение в плис. Но порекомендовали все вычисления делать в мк. Теперь тоже так считаю. спасибо за то то что указали правильный путь )). Вопрос еще полностью не решен, а создавать похожие темы не хочется.Осталась математическая часть, как реализовать это объединение сигналов с разным разрешением. С усреднением как порекомендовали выше работает только как видно на тренде есть перепад в момент перехода (зеленая линия) выше не указал ссори. Синий сигнал младший, красный старший они на тренде от 0 до 10 000 а зеленый рассчитан усреднением и он от 0 до 100 000 меняется.
Сейчас еще одна мысль возникла если использовать калибровку. Например в процессе калибровки передвинуть мишень от самого близкого до максимального расстояния и запомнить все значения старшего в моменты перехода младшего через 0/360градусов. Потом в процессе движения мишени младшее значение умножать на коэффициент который зависит от номера запомненной точки старшего около которого находится фактическое измеренное значение. Но будет один момент когда фактическое значение почти одинаково с запомненной точкой может быть перескок коэффициента.
PS Ошибок в железе нет работает правильно, весь вопрос как правильнее соединить два сигнала с разным разрешением без снижения точности.
Благодарю за любую информацию.
Golikov A.
да ничего вы не сделаете, у вас 2 линейных датчика со сдвигом, один периодический со скачком, их суперпозицию не сровнять, только если коэффициент плавающий который нулит 10 метровый вблизи границы. Но это все так....


то есть считать Z = K1(x) * x + k2 * y; z - расстояние, x - 10 метровый, y - 100 метровый. 100 - метров без скачка, его берем линейно
то есть получаем базис функций X, Y, X^2, тогда имеем

z = k1*x^2 + k2 *x + k3 * y + k4;

теперь проводить измерения, чем больше тем лучше, получаете тройки (Zi , Xi, Yi)

дальше метод наименьших квадратов

sum(zi - (k1*xi^2 + k2 *xi + k3 * yi + k4))^2 - сумма по всем i, чем больше точек тем лучше

минимизируем, то есть приравниваем производную 0, берете частные производные по коэффициентам и ровняете 0, сумма выродиться в систему уравнений, решив которую вы получите
K1, K2, K3, K4 - дальше измеряя X и Y и подставляя их в k1*x^2 + k2 *x + k3 * y + k4 вы будите получать значение расстояния.

Прелесть метода в том что вы получаете гладкую функцию. Она не пройдет точно через измеренный точки, но пройдет максимально близко. Это позволяет функции не пойти горбами как при интерполяции, а также позволяет оценить ошибку, сравнив рассчитанное значение с реально измеренным в точках калибровки. Добавление точек будет улучшать функцию....

как то так...
sergey sva
Благодарю сейчас обдумаю. По поводу расстояния они линейные, но схема позволяет генерировать разные сигналы от 5м до 500м дальше фотодиод не чувствует и полоса пропускания падает. Можно сделать например 5м и 75м или еще как то, но калибровать придется метры это условно.. если это как то может помочь в расчете.
sergey sva
Можно я еще поспрашиваю ))
Здесь измеряем. Коэффициенты пока ==1
Цитата
z = k1*x^2 + k2 *x + k3 * y + k4;
к примеру подвинули мишень 5 раз по 2м, взяли 5 точек.
поместили их в эти массивы Z[0-4] X[0-4] Y[0-4].
Цитата
дальше метод наименьших квадратов
sum(zi - (k1*xi^2 + k2 *xi + k3 * yi + k4))^2

Код
uint32 summ = 0;
for(int i = 0; i< 5; i++)
{
summ = pow (z[i] - (k1*pow(x[i],2) + k2 *x[i] + k3 * y[i] + k4),2); // всегда будет равен нулю?
}



Цитата
K1, K2, K3, K4 - дальше измеряя X и Y и подставляя их в k1*x^2 + k2 *x + k3 * y + k4 вы будите получать значение расстояния.

K1 K2 K3 K4 вычисляются один раз при калибровке ?
Golikov A.
Да вы решаете задачу, найти такие к1, к2, и т.д
При которых вычисленное значение х*х*к1 + х*к2 и т.д (пишу с телефона одним пальцем, дико не удобно) так вот это значение должно максимально близко ложиться к измеренному

Во время калибровки вы не знаете чемумравны к1, к2... Потому сумма не может быть равной нулю. Более того всегда есть погрешность съема данных, потому опять сумма не будет ноль, мы стримим значение суммы к минимому. Для нахождения экстремума производную ровняем нулю. У нас 4 коэффициента, потому берем 4 частные производные и получаем 4 уравнения системы

Коэффициенты нельзя ничемуиравнять для начала.
Вы снимаете только показания ставите z измеряете x, y
Много раз в разных местах, чем плотнее помериете тем лучше пойдет.
А потом получаете большую сумму квадратов отклонения с неизвестными коэффициентами. Возьмите частные производные в общем виде, там сразу видна закономерность, я не готов с телефона ее описать)

Это обобщенный ряд, кажеться лагранжа, уже стал забывать. Метод дико удобный когда есть многомерные измерения. Температура и вольтаж, показания по 2 датчикам и так далее. Сложность одна, система что получиться плохообусловленная, и решать ее в лоб не выйдет. Метод ньютона, только с выбором главеого элемента, а лучше псевдоинверсией. Я в свое время взял решение из матлаба, pinv очень удобно даете матрицу, получаете такую, умножив на которую матрица уйдет в 1 с минимальеой нормой. Фактически это итеррационное обращение матрицы, в 1 шаг получаете решение
sergey sva
Благодарю вас. попробую в матлабе изобразить для начала, напишу что получиться.
sergey sva
Пробовал, для вычисления нужно много точек >10. После всех усреднений в плиз максимум что получается передавать в контроллер 10-15 гц. Сделал совсем просто но результат правильный, проверил рулеткой +-5мм.
Подсчитываю так :
Код
//------------------------------------------------------------------------------------//
void getdistancefrommeter(void){
    uint32_t low1temp,low2temp,hight1temp,hight2temp;
    float calculatehight;

    spi_upd_data(datafromfpga,datatofpga,FPGABUFSIZE);

    low1temp = (((256*datafromfpga[1])+datafromfpga[2])&0xffff);  //mixer 1
    low2temp = (((256*datafromfpga[4])+datafromfpga[5])&0xffff);  //mixer 2
    DistenceCounterStruct.DistanceLow = (low1temp+low2temp)/2;

    hight1temp = (((256*datafromfpga[7])+datafromfpga[8])&0xffff);
    hight2temp = (((256*datafromfpga[10])+datafromfpga[11])&0xffff);
    DistenceCounterStruct.DistanceHight = (hight1temp+hight2temp)/2;

    DistenceCounterStruct.TimeGetVal = SYS_GetTick();//for calculate velos.

    if(DistenceCounterStruct.DistanceHight < POINT_5M){
        calculatehight = 0.5 * DistenceCounterStruct.DistanceLow;

    }else if((DistenceCounterStruct.DistanceHight > POINT_5M)&&(DistenceCounterStruct.DistanceHight < (POINT_5M+POINT_DELTA) )){
        calculatehight = 3.28 * DistenceCounterStruct.DistanceHight * 0.5;


    }else if((DistenceCounterStruct.DistanceHight >= (POINT_5M+POINT_DELTA)&&(DistenceCounterStruct.DistanceHight<POINT_10M))){
        calculatehight = 0.5 * DistenceCounterStruct.DistanceLow + 5000.0;

    }

    DistenceCounterStruct.Distance_mm = calculatehight;

}
//------------------------------------------------------------------------------------//

Не очень удобно нужно точки вносить, и вместе перехода 360-0 градусов точность меньше. Что можно еще сделать?
Результат
Нажмите для просмотра прикрепленного файла
Golikov A.
Цитата
Пробовал, для вычисления нужно много точек >10

если сделать все правильно, можно получить результат по 1 точке. Правда он будет мало соответствовать сигналу, ну в этой точке все получиться...
по 2 точкам будет прямая, по 3 ее начнет гнуть и так далее...
еще зависит от базовых функций.... но только они определяют порядок кривой аппроксимации, число точек влияет только на точность.




можно сделать мертвые зоны в районе перехода 5 метрового через 0. По 100 метровому оценивать где находитесь, если далеко от перехода брать данные от 5 метрового, если близко то оставлять 100 метровые... то есть что-то типа того можно попробовать...
sergey sva
Так сделал выше код. Точки вносить для каждого перехода придется это десять точек измерить и внести как то неудобно. И точность в мертвых зонах будет меньше. Метод работает, но не нравится ((
Сделать бы как уравнение которое само вычисляла коэффициенты.
krux
мне одному кажется, что у вас слишком жирная мертвая зона, чтобы получать достоверные результаты по формулам, не обращая внимания на корректность исходных сигналов?


предложу: ввести понятие, аналогичное "октаве" - номер 5-метрового поддиапазона. определять его по 100-метровому. (ещё в плис)
и при захвате значений для 5-метрового использовать соответствующий номер. т.е. увеличить разрядность 5-метровых отсчетов и таким образом попытаться избавится от разрывов в данных, до проведения какой-либо их фильтрации.
sergey sva
Мертвая зона примерно 450мм. POINT_5M = 2900 POINT_DELTA = 300. В этой зоне сигнал колбасит он прыгает то в максимум то в минимум. Дрожание исходных сигналов примерно 3мкс из периода 83мкс. От этого избавиться не получиться(( . Дрожание pll + еще много источников шума.. Правда можно получить не 12кгц а 1,2кгц дрожание будет также 3мкс но период будет 830мкс.
Если можно немного поподробнее,не совсем сообразил как сделать?
Golikov A.
Вам нужен правильный фильтр показаний 5 метровго датчика!

Предлагаю такой фильтр:

берете показания 5 метрового датчика (обозначим х), пусть он дает показания [0; M],

получая очередное показание Xi, вы считаете 2 числа Xi и (Xi + М), сравниваете с X(i-1), и реальным считаете то, которое ближе к X(i-1). Это позволит избежать скачков фазы на границе 5 метров. Также поступить с границей 0, (Xi - M). Не могу сейчас в уме прикинуть достаточно ли выбирать минимум их 3 интервалов, или надо еще следить за тем вблизи 0 мы или вблизи максимума. Но это не сложно, это от прошлого значения зависит. Если прошлое меньше 2.5, то пара Xi и (Xi - М), если больше то Xi и (Xi + M). На первый взгляд можно просто определять минимальный интервал из 3, это и будет верное значение.

Ну и дальше по 100 метровом примерно определять в каком 5 метровом интервале мы находимся, а все результаты считать по 5 метровому.

кстати если вы в каждой точке получаете несколько значений, то вам вполне подойдет медианный фильтр, который прекрасно отбрасывает скачки сигнала. Но думаю предложенный выше получше, потому что я сам его придумалsm.gif)))
sergey sva
Благодарю столько полезных мыслей.)) Сейчас попробую.
Может переделать модуляцию и использовать другой способ, наверно не тот метод выбрал. Схема железа такая: плис к нему прицеплена два 8бит цапа один цап работает на модулятор, другой на смеситель(вх гетеродина). Модулятор модулирует лазерный луч после он отражается и попадает на смеситель там умножается на сигнал цапа номер два, результат фильтруется усиливается и опять попадает в плис. Вывести в луч можно сигнал 30мгц.
Golikov A.
да схема вроде стандартна, единственное можно не просто частоту на модулятор подавать, а какую-то длинную ПСП, но это уже нюансы... я бы работал с тем что сигнал мгновенно измениться на большое значение не может...
sergey sva
Не совсем понимаю как можно с помощью псп измерить расстояние. Через сдвиговый регистр + feedback через xor и выдаю последовательность в модулятор. отраженный сигнал опять на сдвиговый регистр иногда будет код совпадать а как определить расстояние по этим совпадениям?
krux
Цитата
Не совсем понимаю как можно с помощью псп измерить расстояние.

по тому же принципу что в GPS/ГЛОНАСС. радиодальномерный код.
Golikov A.
Цитата
отраженный сигнал опять на сдвиговый регистр иногда будет код совпадать а как определить расстояние по этим совпадениям?

не не не... все тоже самое что у вас.

вы шлете ПСП, она идет до источника, отражается, и идет обратно со сдвигом фазы. Вы ее цифруете, далее ХORите исходное ПСП и отраженное, и суммируете. Смещение выражается в расхождении 0 и 1, вылезает на XOR. Это цифровой способ, вам не нужно АЦП-ЦАП со вносом его помех, вам нужны только 0 и 1 (ключ и компаратор), вам ненужен аналоговый умножитель и так далее...

То есть все тоже самое что у вас только в цифре... А длинна ПСП как бы определяет максимальный регистрируемый сдвиг. На мысли о ПСП наводят цикличность вашего датчика 5 метрового.

то есть это как вы подаете
1 0 1 0 1 0, если в ответ получите сдвинуто на период, то есть на 2 биты вы не можете понять растояние.

а если вы подадите что-то типа
1 0 0 1 0 1 1 0 1, то сдвиг на 2 бита будет 0101101 XOR 1001011 = 110110 и смещение есть...

Вопрос в минимальном разрешении и как его нарастить,

UPD. Пока инет тупил, уже написалиsm.gif
sergey sva
Сейчас загуглю по этой теме. Может лучше попробовать псп от разрядности регистра будет зависеть измеряемое расстояние? Минимальное разрешение будет зависеть от частоты выдачи 1010...? Что бы измерить миллиметр частота должна быть ghz..
Golikov A.
Да... я что-то тоже задумался.
В вашем случае это наверное вообще глупость. В GPS это используется потому что нельзя подать сигнал и посчитать время его отражения.

У вас такая возможность есть, и весь способ сводиться к подаче сигнала, а потом к засеканию времени которое этот сигнал шел туда и обратно. Что конечно никаких приличных результатов не даст.

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

Ну в общем надо фильтровать очередное показание исходя из того что оно не может отличаться от прошлого больше полупериода, и все будет хорошо. Все что отличается дальше надо проворачивать на фазу...
sergey sva
За любые мысли благодарен у меня опыта мало в этой теме. Еще есть метод с линейной модуляцией тоже используется в радарах. У этого способа который сейчас работает один недостаток в выравнивании сигналов.(
sergey sva
Немного переделал схемку теперь из плис приходит четыре значения фазы. Два от пятиметровых и два от 100м. Между двумя сигналами фаза примерно 90 градусов. На картинке два сигнала от 5 метрового. От 100м идентичные сигналы.
Головоломка какая. Думаю как по этим величинам рассчитать расстояние в мм от 500 до 100000мм.
По четырем величинам должно получиться более равномерно. Еще один момент когда значения находится в диапазоне от 1000 до 9000 зависимость от расстояния линейная,а когда вначале от 0 до 1000 или в конце от 9000 до 10000 немного искажена.
Сейчас думаю сделать по такому алгоритму. Когда переменная Больше 1000 и меньше 9000 вычисляю по ней, если она выходит за эти границы вычисляю по другой которая сдвинута на 90гр.
Что еще можно придумать?
Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.