|
Ультразвуковой термометр, Он же анемометр и указатель направления ветра |
|
|
|
Aug 7 2009, 11:32
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Увидел на выставке вооружений и военной техники вот такой прибор: http://www.sibai.ru/content/view/151/271/Ну, понятное дело, "под хвостом" сразу засвербило - тоже такое хочу. Собрал вот такую схемку для измерения времени прохождения звукового импульса через воздух:   Работает так - возбуждаю датчик положительным импульсом длительностью 60 мкс. На приеме усиливаю, детектирую, фильтрую. На выходе дает вот такое:  Голубой канал - перед детектором, желтый - на входе контроллера. Однако на выходе выяснилось, что фронты "плавают". Че делать? Есть подозрение что примененные датчики плохи - мягкие мембраны дают "мягкое". И коричневое. Заказал парктроник "на запчасти", но он приедет толтько через три недели. Есть ли какой то способ определять то же самое но с моими датчиками? (такие датчики применил потому что они были "под рукой")
--------------------
Время не придет. Время уходит.
|
|
|
|
|
 |
Ответов
(1 - 72)
|
Aug 7 2009, 12:56
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Да, чуть не забыл. На приеме компаратором ловлю оба фронта приемного импульса , и положительный и отрицательный. Складываю эти времена, делю пополам и получаю середину - вот ее и использую как искомое время.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 7 2009, 13:52
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Ага, видел. Но это не пойдет. Задача стоит так - определить температуру без термометра. Во. Точнее без именно датчика который должен выдавать значение температуры своего корпуса, которая более или менее соответствует окружающей температре.
Доплер - замечательно, и ежели я не смогу победить ту задачу которую я поставил, я применю какой нить DS1820, а собственно флюгер будет на Доплере.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 7 2009, 14:20
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Но это не пойдет. Задача стоит так - определить температуру без термометра. А смысл? Вычислять температуру воздуха по скорости звука - это слишком, как мне кажется. Потому как она только в идеальных условиях зависит только от температуры. А давление, а влажность? Цитата а собственно флюгер будет на Доплере. Это не совсем Доплер в классическом понимании. Тут сдвиг фазы (задержка сигнала) без изменения частоты.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 7 2009, 15:33
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
2 Rst7
А как определялся сдвиг фаз в вашей конструкции?
2 Евгений Германович
Датчик - пьезоизлучатель, на фотке его видно. Мембрана пластиковая. Но он типа ультразвуковой. Какая картинка странная?
Возбуждающий импульс - подаю 5В с контроллера. Импульс один, длительность 60 мкс. Такая длительность была выбрана по максимально "отдаче" излучателя. Видимо это частота собственного резонанса излучателя. Кстати на приемной стороне как раз и видно что заполнение "дыньки" как раз около 6 кГц.
Чем плохо висение в воздухе входа? Это может гадить на фронты? Как поправить схему? Подать пол питания с делителя через RCR-фильтр? Кстати, может и выход надо нагрузить? Что то мне кажется что голый вход компаратора это плохая нагрузка.
Сильнее всего на скорость распространения влияет температура. Влажность и давление - очень незначительно. Формулы описывающие зависимости в литературе есть.
Сообщение отредактировал Altair - Aug 7 2009, 15:37
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 7 2009, 18:40
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата А как определялся сдвиг фаз в вашей конструкции? Напишу сразу, как должно быть (сейчас немного через (_*_), но принцип тот же). Да, и имейте в виду, там весьма сильно используются особенности периферии AVR. 0. Все датчики подключены на порт C. Первый на PC0/PC1, второй на PC2/PC3, третий на PC4/PC5. 1. Тактовая частота проца 10.24МГц. 2. Таймер 1 считает от 0 до 255 (используется режим CTC), итого частота переполнений 40кГц, равная резонансной частоте датчиков. 3. Программно синхронно с таймером дрыгаем ножками текущего передающего датчика, например, PC0/PC1. Т.е. делаем PC0=0,PC1=1 и через 128 тактов PC0=1,PC1=0 и через 128 тактов повторяем (опять же точно 40кГц, причем, синхронно с насчетом таймера). 4. Мультиплексор АЦП подключен к аналоговому компаратору, вторая ножка компаратора на земле. 5. Соответственно, одна из ножек текущего приемного датчика включена на ввод и через мультиплексор АЦП попадает на компаратор, вторая - включена на вывод и на земле. 6. Выход компаратора включен на Input Capture таймера (установкой бита ACSR_ACIC) 7. В коде, который дергает ножками, проверяется флаг наличия ICP, и если он установлен, то значение регистра ICR прибавляется к интегратору (с учетом возможной смены знака). 8. Все это дело крутится в цикле измерения для накопления. Я делал 1024 раза. При этом, предварительно выполняется 4000 холостых циклов (для того, чтобы полностью закончился переходный процесс в приемном и передающем датчике). Тонкости заключаются в работе со знаком при накоплении. Т.к. изменение значения ICR из 0 в 255 - это на самом деле вычитание 1, а не прибавление 255. Именно для удобства выбрана тактовая 10.24 (но начиналось все с тактовой 10МГц и досчетом таймера до 250, вот там бубен некислый).
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 8 2009, 07:29
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
А ведь можно немного немного сдвигать фазу исходного сигнала и смотреть через какое время прошло изменение фазы на приемной стороне. И таким образом определять время прохождения сигнала от передатчика до приемника. А гененрировать передаваемый сигнал таймером 0.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 8 2009, 11:25
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата А ведь можно немного немного сдвигать фазу исходного сигнала и смотреть через какое время прошло изменение фазы на приемной стороне. Сомнительно. Время будет сильно зависеть от добротности датчиков и изменения резонансных частот, намного сильнее, чем от скорости звука. Ну и вообще, это не мой метод - много лишней электроники появляется  Вообще в потоке воздуха температура самого DS'а уравнивается за пять-десять минут. Неужели не устраивает?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 8 2009, 13:06
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(Rst7 @ Aug 8 2009, 14:25)  Вообще в потоке воздуха температура самого DS'а уравнивается за пять-десять минут. Неужели не устраивает? На той выставке где я прибор увидел, я чуть чуть с передставителями фирмы пообщался. Мне флюгер давно интересен, потому что я не люблю одеваться жарко и не люблю мерзнуть, а ветер на улице очень влияет на то как одеться. И если температуру я посмотреть могу, то с актуальным ветром - полная глушь. До сих пор флюгер не сделал потому что в близкой доступности нет мех. обработки. Без нее нормальный флюгер не сделать. Можно конечно где то заказать, но это хлопотно, дорого и лениво. ВОт когда я увидел ультразвуковоую конструкцию - сразу же захотел, бо она "на коленке" вполне качественно может быть изготовлена. Так вот. Эти самые представители очень акцентировали внимание на то, что их изделие измеряет именно температуру воздуха. Т.е. ему не страшны внешние и внутренние наводки, типа солнца и саморазогрева датчика. Поэтому захотелось все сразу в комплексе :-). Почему бы и нет, если в принципе достижимо?
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 8 2009, 13:37
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Altair @ Aug 8 2009, 17:06)  На той выставке где я прибор увидел, я чуть чуть с передставителями фирмы пообщался. Мне флюгер давно интересен, потому что я не люблю одеваться жарко и не люблю мерзнуть, а ветер на улице очень влияет на то как одеться. И если температуру я посмотреть могу, то с актуальным ветром - полная глушь. До сих пор флюгер не сделал потому что в близкой доступности нет мех. обработки. Без нее нормальный флюгер не сделать. Можно конечно где то заказать, но это хлопотно, дорого и лениво. ВОт когда я увидел ультразвуковоую конструкцию - сразу же захотел, бо она "на коленке" вполне качественно может быть изготовлена. Тогда сделайте термоанемометр... Две проволочки. Одна на ветру. Два полумоста. Один 2-канальный внешний АЦП. Или двойной мост, 2 ОУ + АЦП контроллера. Но, в любом случае, некоторая механическая работа для защиты от птичек потребуется.
|
|
|
|
|
Aug 8 2009, 13:54
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
А термоанемометром направление ветра измерить? :-))
Прелесть исследуемого метода в том что получаем все и сразу. Правда для этого придется придется попотеть мозгом. ;-)
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 9 2009, 07:22
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(Tanya @ Aug 8 2009, 18:03)  Чтобы правильно измерять направление, надобно жить в деревне и иметь мачту.... или мечту. Если имеется только последняя, то только мечтать. Имею хоть и в городе, но десятиэтажный дом. Преобладающей ближайшей округе высоты. Ну мачту еще метра 3 можно сгородить. Думаю вполне нормально будет. 2 Rst7А вот еще несколько вопросов. Вот включил ты устройство. Сдвиг фазы всегда постоянный? Т.е. каждое включение в неподвижном воздухе одной и той же температуры всегда дает один и тот же сдвиг фазы? Один раз записали для этой температуры где "ноль" и все? Дальше считаем что если от этого нуля сдвинулось, есть ветер? Ведь можно туды-сюды померить фазовый сдвиг, сложить, поделить пополам и получим скорость звука. А значит и температуру. А скорость звука определим как расстояние между излучателями поделить на время, которое равно n*(2п+f) (или все же n*2п + f??). n-это сколько полных периодов укладывается в расстояние между датчиками. Очень грубо количество 2п можно померить изменяя резко фазу излучаемого сигнгала и смотреть когда измениться на приеме. А значение фазы в последнем периоде как раз и даст ту маленькую точную прибавочку. Если возбуждать излучатель от Таймера 0, то фазу очень легко менять. OCR0A=phase, OCR0B=phase+0x80. Ну в прерывании понятно дергаем излучатель.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 9 2009, 08:19
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Т.е. каждое включение в неподвижном воздухе одной и той же температуры всегда дает один и тот же сдвиг фазы? Это состояние называется "сферический конь в вакууме"  В таком состоянии сдвиг фазы один и тот же. Цитата Ведь можно туды-сюды померить фазовый сдвиг, сложить, поделить пополам и получим скорость звука. А значит и температуру. Только гуляет он сильно. Например, от механической нестабильности несущей конструкции, от изменения резонансной частоты излучателя от температуры (походу, резонансная частота меняется даже от скорости набегающего потока, а раз меняется резонансная частота, меняется и фазовый сдвиг). Когда берется разность (для вычисления скорости ветра), эти вещи взаимно компенсируются, а если сложить - то они все вылезут наружу. Цитата Если возбуждать излучатель от Таймера 0, то фазу очень легко менять. OCR0A=phase, OCR0B=phase+0x80. Ну в прерывании понятно дергаем излучатель. Дело в том, что надо еще обеспечить точность дергания ногами в один и тот же момент, т.е. джиттера быть не должно. С прерываниями Вы замучаетесь, проще уж прямым кодом, как у меня.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 10 2009, 03:44
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(Rst7 @ Aug 9 2009, 11:19)  Это состояние называется "сферический конь в вакууме" Ааааа!!! Старые знакомые!!! :-) Цитата(Rst7 @ Aug 9 2009, 11:19)  Дело в том, что надо еще обеспечить точность дергания ногами в один и тот же момент, т.е. джиттера быть не должно. С прерываниями Вы замучаетесь, проще уж прямым кодом, как у меня. Отнюдь. Используя прерывания я как раз точно все и сформирую. Если в системе будет использоваться только два прерывания по OCR0A и OCR0B. Вход в прерывание вполне по тактам нормирован, а мне нужно только проследить что бы в самих обработчиках прерывания код был одинаковый. Так что думаю тут проблем с джиттером не будет, бо прерыванию может помешать только другое прерывание, а их нет. Зато! Я легко могу вертеть фазой исходногот сигнала. Ну и еще момент есть. "Прямокод" это для АСМа. А я от него уже отвык. :-) А вот на приеме можно прерывание и не делать. Даже нужно не делать. В ICR1 информация сама запишется по событию, без моего участия. Мне остается только флаг контролировать. Так что пока не вижу причин для возникновения джиттера.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 10 2009, 04:36
|
Местный
  
Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044

|
Цитата(Altair @ Aug 10 2009, 06:44)  Отнюдь. Используя прерывания я как раз точно все и сформирую. Если в системе будет использоваться только два прерывания по OCR0A и OCR0B. Вход в прерывание вполне по тактам нормирован, ........................ Да-да. Именно отнюдь. Имеются команды одно, двух и трех тактные. Переход на вектор прерывания происходит по окончании выполнения текущей команды. Отсюда разбег (в зависимости от используемых команд) будет составлять 1-2 такта, что видно даже в эмуляторе. Но это не безнадежно, если принять специальные меры.
--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
|
|
|
|
|
Aug 10 2009, 05:31
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(CDT @ Aug 10 2009, 08:36)  Переход на вектор прерывания происходит по окончании выполнения текущей команды. Отсюда разбег (в зависимости от используемых команд) будет составлять 1-2 такта, что видно даже в эмуляторе. Но это не безнадежно, если принять специальные меры. Например? Цитата(MaslovVG @ Aug 10 2009, 08:50)  Сюда нужно добавить еще скорость и направление ветра итго 4 (если учитывать направление 5) переменных. Для того чтобы решить уравнение 4 переменных нужно иметь минимум 4 уравнения точнее 4 (идеинтичных) датчика на каждом из которых известно значение одного из определяемых параметров. Померять с помощью одного датчика два или больше параметра среды невозможно. Кстати сдвиг по фазе и задержка по времени это всего одна сущность. Да да. Я в курсе. Потому датчиков будет физически три (виртуально-шесть, они будут назначением (RX-TX) меняться). А потому задача все же сводится к определнию времени прохождения сигнала от одного датчика до другого. Это есть краеугольный камень всей конструкции. Решив эту проблему, все остальные решаются. Влажность и давление планирую измерять дополнительными датчиками.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 10 2009, 06:24
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(MaslovVG @ Aug 10 2009, 10:00)  Иначе можно добавить в систему фазовый детектор и повысит разрешение до точности измерения сдвига фаз. Этот метод сейчас и обдумываю. Потому и терроризирую уважаемого Rst7 и всех присутствующих всякими вопросами. :-) Не хочу лишнее железо, нужно все по максимуму программно реализовывать. Кстати можно перед прерыванием контроллер загонять в Sleep. Тогда прерывание всегда будет стартовать из одного и того же места.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 10 2009, 06:56
|
Местный
  
Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044

|
Цитата(Altair @ Aug 10 2009, 08:31)  Например? - Генерировать непосредственно таймером на ноге - не использовать в программе многотактные команды - зайдя в прерывание считать TCNT и компенсировать ошибку - построить программу так, чтобы прерывание происходило из конкретного куска или места. Но это должна быть тупая и глухая петля типа rjmp pc
--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
|
|
|
|
|
Aug 10 2009, 07:15
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Из этих методов самые прямые - первый и третий. На самом деле метод со sleep тоже имеет право на жизнь CODE UREG16 Measure(void) { UREG16 frq=/*FREQ>>16*/1000; SMCR=(1<<SE); //Idle sleep //Запретили прерывания от USART'а TIMSK0_TOIE0=0; UCSR0B_RXCIE0=0; //Запретили прерывания от измерителя частоты //TIMSK1_ICIE1=0; Start_ADC(frq*2,public_data.zero_real); do { __sleep(); UREG rp=rx_pointer; if (UCSR0A_RXC0) { ((UINT8*)(&modbus_buf))[rp]=UDR0; rp++; TCNT0=256-146; TCCR0B=4; //1:256, 1 у.е. = 25мкс rx_pointer=rp; } __sleep(); if (TIFR0_TOV0) { //Быстрая проверка на пригодность принятого пакета TCCR0B=0; if ((rp<8)||(modbus_buf.pdu.addr!=2)) { rx_pointer=0; } else { UCSR0B_RXEN0=0; //Наш пакет } TIFR0=1<<TOV0; } } while(Test_ADC()); ... } И вполне без джиттера
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 18 2009, 11:26
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 18-08-09
Из: Запорожье
Пользователь №: 51 942

|
Вопрос к Rst7: А какие приемо-передатчики использованы (от чего, где достать)? Датчики как-то должны быть изолированы от крепления, ведь звук по металлу быстее распространяется или это исключено програмно?
|
|
|
|
|
Aug 18 2009, 11:41
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата А какие приемо-передатчики использованы (от чего, где достать)? Мы покупали готовые. Не совсем эти, но эти тоже пойдут - http://cbsie.dyndns.info/passive31-ultrasonic-sensors.pdfЦитата Датчики как-то должны быть изолированы от крепления, ведь звук по металлу быстее распространяется или это исключено програмно? Там конструкция самих датчиков такая, что через корпус нифига не идет.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 18 2009, 17:00
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 18-08-09
Из: Запорожье
Пользователь №: 51 942

|
Да уж, вменяемых цен на эти датчики в Украине не нашел, наверное дешевле будет сделать чашечный (хотя надежность конструкции пострадает)
|
|
|
|
|
Aug 19 2009, 14:53
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Сегодня пришел парктроник. На выходных попробую. В мануале написано что у датчиков диаграмма 60 и 60.
2 Rst7
Были ли помехи на приемной стороне от работы передатчика?
Сообщение отредактировал Altair - Aug 19 2009, 14:58
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 20 2009, 02:55
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Сразу говорю - конструкция антинаучная. УЗ датчики длинными проводами подключены к STK500 напрямую. Желтый канал - передатчик, голубой - просто датчик висящий в воздухе подключен к осцилу.  Датчик лежит мордой на столе. Ловим только помехи.  Вот помеха покрупнее:  Это я одел на приемный провод большое ферритовое кольцо и в нем три витка приемного провода.  Видимо придется сразу на конечной плате отлаживаться. Что бы исключить всякий ливер по питанию и длинным проводам. "Поиграться на халяву" не выйдет. Ну и соответственно вопрос. Принимались ли какие то меры по борьбе с помехами? Типа резистор параллельно для уменьшения добротности датчика, резистор последовательно для уменьшения скорости нарастания напряжения на датчике, фильтров и т.д.?
Сообщение отредактировал Altair - Aug 20 2009, 03:32
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 20 2009, 04:45
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Видимо придется сразу на конечной плате отлаживаться. Что бы исключить всякий ливер по питанию и длинным проводам. "Поиграться на халяву" не выйдет. Я делал на макетке. Датчики подключал обрезками витой пары к лапкам проца. Так что игрался "на халяву". Цитата Ну и соответственно вопрос. Принимались ли какие то меры по борьбе с помехами? Типа резистор параллельно для уменьшения добротности датчика, резистор последовательно для уменьшения скорости нарастания напряжения на датчике, фильтров и т.д.? Ставил резисторы параллельно датчикам (придавить мусор). Топологически они были между ножками проца. Если мне не изменяет память (сам девайс далеко) - то ли 10к, то ли 2.2к.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 20 2009, 05:15
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
А как было организовано питание порта С? На AVDD питание напрямую подавалось или через RC? Пытался навесить 1 кОм на ножки проца - особого эффекта не заметил. Думаю что наводка все же по длинным проводам. Буду укорачивать.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 20 2009, 05:21
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата А как было организовано питание порта С? На AVDD питание напрямую подавалось или через RC? Напрямик. Цитата Пытался навесить 1 кОм на ножки проца - особого эффекта не заметил. Так а Вы тот датчик, к которому осциллограф подключен, нагрузили резистором? Для передачи, понятное дело, эти резисторы побоку.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 20 2009, 05:42
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(Rst7 @ Aug 20 2009, 08:21)  Так а Вы тот датчик, к которому осциллограф подключен, нагрузили резистором? Для передачи, понятное дело, эти резисторы побоку. Нет. Вобще наверное затупил. На большом сопротивлении большие наводки. А нагружен датчик был только входом осцила.
Сообщение отредактировал Altair - Aug 20 2009, 05:51
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 21 2009, 13:32
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Значица так. Прикрутил к ногам проца резюки по 4,7 кОм. Которые шунтируют датчики. Конструкция такая: два датчика от парктроника. Подключены к PC0-РС1, РС2-РС3. Датчики зашунтированы резисторами по 4,7 кОм. Контроллер в прерывании генерит 40 кГц. Остальная программа состоит из одной строчки: PORTB.0=ACSR&(1<<ACO); Т.е. тупо выводит в порт состояние компаратора, которое я и смотрю осцилом. В результате получилось следующее: Желтый канал - выход компаратора, голубой - возбуждение датчика. Здесь немного меняю расстояние между приемником и передатчиком, что эквивалентно движению ветра. В этих пределах все нормально.    Но вот ежели я начинаю выходить за пределы этого диапазона, то начинается полная фигня. Смотрим первые картинки, представляем расположение и характер помех и понимаем что происходит:     А происходит следующее. В промежутке между "палками" стоящими в моментах переключения передатчика на приемнике все детектируется замечательно. А там где "палки", там понятно нормально не детектируется. "Полочки" на осциллограммах - это попытки осциллографа усреднить картинку по 8 отсчетам. Ну а фактически там просто дикие скачки фазы. Визуально адекватно можно определять фазу принимаемого сигнала на участке ограниченном маркерами:  Причины явления думаю в следующем. Используемые мной датчики - "дубовые". Почему я так решил? Сравнительный анализ датчиков от Murata показывает, что гереметичные датчики имеют заметно меньшую чувствительность, по сравнению с открытыми, какие и использовал уважаемый Rst7 в своей конструкции. У парктроника датчики мало того что герметичные, так еще и китайские. :-) "Дубовость", имеет два конца. С одной стороны слабо излучается, с другой - плохо слышится. Что в данной конструкции требует во первых близко располагать датчики, во вторых более внимательно относиться к диаграмме направленности. В частности при расположении моих датчиков под углом 60* друг к другу они просто перестали взаимодействовать. Таким образом нужно использовать 4 датчика и в Мегу 48 (в "минималистическом" исполнении) я не укладываюсь. Просто по скудости порта С. Из-за дубовости датчиков имеем малое отношение сигнал/помеха. Это приводит к нечеткому срабатыванию компаратора из-за слабого сигнала на его входе и наличия сильных помех. Думаю что в такой конфигурации устройство не работоспособно. Планирую для каждого датчика использовать свой компаратор. Причем вынести его прямо к датчику. Сверху заэкранировать, а провода зафильтровать. Это минимизирует провода на которые может что то наводиться. К тому же отвяжет от порта С. Что думаете?
Сообщение отредактировал Altair - Aug 21 2009, 13:37
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 22 2009, 04:58
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Поигрался. Несмотря на то что сам парктроник формирует пачки импульсов примерно в 38,5 кГц, датчики резонируют четко на 40 кГц (определил по дальности на которой датчики взаимодействовали при изменении частоты возбуждения) Выход парктроника без датчика:  Выход парктроника с датчиком:  Сигнал на базе выходного транзистора:  Меж тем на датчике то 200 вольт... Понятно что мне столько не нужно, но все же... З.Ы. 2 Rst7, а ведь у нас даты регистрации на этом форуме всего на 1 день отличаются :-)
Сообщение отредактировал Altair - Aug 22 2009, 05:08
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 22 2009, 12:28
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Конструкция такая: два датчика от парктроника. Подключены к PC0-РС1, РС2-РС3. Датчики зашунтированы резисторами по 4,7 кОм. Контроллер в прерывании генерит 40 кГц. Остальная программа состоит из одной строчки: PORTB.0=ACSR&(1<<ACO); Огласите конктретно, в каком состоянии ножки. Должно быть так: например, на PC0/PC1 - противофазный меандр, PC2 - на вывод (уровень лог. 0), PC3 - на ввод, аналоговый мультиплексор подключен к компаратору, выбран канал ADC3, а другой вывод компаратора (AIN0, он же PD6) должен быть на земле. Еще очень желательно при помощи регистра DIDR0 запретить цифровые входы, но это по желанию.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 22 2009, 14:04
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Да да. Все именно так: Код // Analog Comparator initialization ACSR=1<<ACIC; ADCSRA=0; ADCSRB=1<<ACME; //Положительный вход компаратора на земле. DDRD.6=0; PORTD.6=0;
// Global enable interrupts #asm("sei")
//Конфигурим выход DDRC.0=1; DDRC.1=1; OUT0P=1; OUT0N=0;
//Конфигурим вход - один вход-вход, второй - земля ADMUX=ADC3; DDRC.2=1; PORTC.2=0; DDRC.3=0; PORTC.3=0;
//Индикаторный выход DDRB.0=1;
while (1) { PORTB.0=ACSR&(1<<ACO); }; } А в прерываниях так: Код // Timer 0 output compare A interrupt service routine interrupt [TIM0_COMPA] void timer0_compa_isr(void) { PORTC^=0b00000011; }
// Timer 0 output compare B interrupt service routine interrupt [TIM0_COMPB] void timer0_compb_isr(void) { PORTC^=0b00000011; }
--------------------
Время не придет. Время уходит.
|
|
|
|
Guest_orthodox_*
|
Aug 22 2009, 16:28
|
Guests

|
Цитата(Altair @ Aug 8 2009, 15:06)  До сих пор флюгер не сделал потому что в близкой доступности нет мех. обработки. Без нее нормальный флюгер не сделать. используйте покупные подшипники, фольгированный стеклотекстолит и пайку , легкие листовые пластики и полимерный клей. Подшипники тоже возможно крепить пайкой на самом деле для этой цели. Можно целиком взять компьютерный вентилятор, крыльчатку от него на оси... Короче, были бы руки...
|
|
|
|
|
Aug 23 2009, 00:32
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(orthodox @ Aug 22 2009, 19:28)  ... покупные подшипники, фольгированный стеклотекстолит и пайку , легкие листовые пластики и полимерный клей...компьютерный вентилятор... Это банально. А потому - неинтересно. Для меня это очень важный момент, потому как проект делается для собственного удовольствия. :-)
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 24 2009, 03:29
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Вот так выглядит сигнал при небольшом изменении расстояния между датчиками. Сначала было около 20 см, потом 5 см и меньше. Если датчики неподвижны, а просто направить струю воздуха, то эффект примерно такой же. Видео с осциллографа
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 25 2009, 10:45
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Вот так выглядит сигнал при небольшом изменении расстояния между датчиками. Вы бы не горячились про "гуанодатчики". Налицо большой оверхед в процедуре обработки прерывания по таймеру. С двух сторон от фронта/спада имеется мертвая зона, в которой значение пина, соответствующего компаратору не обновляется. Думаете, у меня зря там компаратор на ICP заведен? А так - все фурыкает. Хотя, сигнал малость слабоват (видно по тому, что меандр с компаратора не 50 на 50). Для компенсации нецентральности срабатывания компаратора надо щупать оба изменения - и фронт, и спад. Как-то этот момент я у себя упустил, надо будет внести, если руки дойдут довести свой до ума. Конечно, этот момент потребует манипуляций на ходу с битом ICES1 в регистрах таймера.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 25 2009, 16:07
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Мдя... Точняк. Заменил в прерывании возбуждения PORTC^=0b00000011; на: #asm("sbi 0x08,0") #asm("cbi 0x08,1")
Судя по асм листингу прерывание существенно сократилось.
Видео завтра выложу. Дрожание снизилось с 4 мкс до 2 мкс.... Явно это тормозит проц.
Так что надо мудрить все по настоящему - думаю в "тестовом" варианте более не увидеть, т.к. наблюдать сигнал достоверно не смогу из-за программного метода его получения. А вот капчится он должен хардварно, независимо от кода.
З.Ы. Датчики все же гуано. при 60* развороте друг друга чуют только на 2 см, а напрямую начинают примерно на 35 см. Так что, либо 4 датчика, либо усилять.
Сообщение отредактировал Altair - Aug 25 2009, 16:41
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 25 2009, 17:36
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Судя по асм листингу прерывание существенно сократилось. Вам бы еще компилятор сменить на вменяемый, например, IAR. Цитата Так что, либо 4 датчика, либо усилять. Предлагаю 4 датчика и воспользоваться тем, что еще один датчик можно зацепить на порт D - на непосредственный вход компаратора - именно тот, который сидит на мультиплексоре. Второй - оставить на земле. А по чем датчики брали?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 26 2009, 04:37
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Вот так выглядит при оптимизированном обработчике прерывания (масштаб такой же как на предидущем видео): Видео с осциллографаНевооруженным глазом видно, что фронт стал меньше колебаться. Думаю что не бывает плохих компиляторов, быват плохие программисты. :-)) В крайнем случае напишу #asm... и, эх раззудись плечо, размахнись рука... :-)) Хотя и отвык от АСМа капитально. Цитата Предлагаю 4 датчика и воспользоваться тем, что еще один датчик можно зацепить на порт D - на непосредственный вход компаратора - именно тот, который сидит на мультиплексоре. Второй - оставить на земле. Тогда можно вобще все датчики одним концом на мультиплексор, вторым на другой порт. Никакой разницы. С датчиками оказалось сложно. Сначала хотел купить в Платане, но дешевых нет в наличии, а те которые есть предложили привезти по 500 р за шт. Я че то пожадничал. Негуманный ценник. И тогда заказал у китаезов вот такой парктроник. За 1000 р. я получил 4 датчика с комплектом электроники "для опытов". Правда пришлось месяц ждать доставки. Отдельно датчики от парктроников по вменяемой цене тож не нашел.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 26 2009, 04:52
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Тогда можно вобще все датчики одним концом на мультиплексор, вторым на другой порт. Никакой разницы. Неа. Разница есть. Надо драйвить сразу оба пина в противофазе. Значит, оба вывода датчика должны быть подключены к одному порту. Цитата Думаю что не бывает плохих компиляторов Бывают компиляторы, генерящие плохой код в не зависимости от мастерства программиста. ICC в их числе.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 27 2009, 01:21
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(Rst7 @ Aug 26 2009, 07:52)  Неа. Разница есть. Надо драйвить сразу оба пина в противофазе. Значит, оба вывода датчика должны быть подключены к одному порту. Пробовал и одновременно, и по очереди. Разницы не заметил. Цитата(Rst7 @ Aug 26 2009, 07:52)  Бывают компиляторы, генерящие плохой код в не зависимости от мастерства программиста. ICC в их числе. У меня CodeVision. Хотя думаю особой разницы нет. Но меня ПОКА устраивает. Вопрос еще такой. Интегратор это как? Мне представляется - сложить все измерения, например те же 1024 цкла, и по окончании поделить. Арифметическое среднее короче. Или принять первое значение, а потом в зависимости от значений следующих измерений либо прибавлять либо отнимать единичку к первому принятому?
Сообщение отредактировал Altair - Aug 27 2009, 01:29
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 28 2009, 04:01
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Можно измерять в диапазоне -128 0 +128. Значение капчи присваивать переменной типа signed char и отнимать 128. А для усреднения использовать модуль. Тогда получиться как в коде Грея - на краях диапазона различие в один младший разряд. Только одновременно нужно считать количество положительных и отрицательных компонент при усреднении, что бы понимать в положительной или отрицательной половине остаемся.
Сообщение отредактировал Altair - Aug 28 2009, 04:07
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 28 2009, 04:22
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Ну например постоянно принимается 0-255-0-255. Мы это число переводим в знаковое и от каждого измерения отнимаем 128. ТОгда получается что на выходе то -1 то 0. Вот их и усредняем. О, даже и отнимать ничего не надо. В знаковом виде будет то -127 то +127. Таймер то считает от 0 до 255, а в знаковом виде - от -127 до +127. Т.е. когда он досчитал до +127, переполнился и начинается - 127. Или я что то неправильно понимаю?
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 28 2009, 07:03
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Нет. Я точно напутал. Но идея такая - перевести значение каждого измерения в код Грея, а уже в нем усреднять. Т.е. использовать свойство кода Грея в отличии любого соседнего значения только на один младший разряд.
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Aug 28 2009, 07:16
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Но идея такая - перевести значение каждого измерения в код Грея, а уже в нем усреднять. Т.е. использовать свойство кода Грея в отличии любого соседнего значения только на один младший разряд. Причем тут код Грея? Достаточно того, что разность между двумя измерениями стремится к 0. Ху из разность? Правильно, производная. Значит, чтобы получить среднее по всем измерениям, надо дважды проинтегрировать разности соседних измерений (сначала получить интеграл производной, т.е. собственно значение измерения, но уже без переполнения, т.к. производная мала (помещатеся в signed char), а интегратор - достаточно широк, например, 16 бит для простоты), а затем - проинтегрировать (усреднить) уже полученные "непереполняющиеся" значения измерения.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Sep 7 2009, 08:50
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
2 Rst7
Т.е. так?
Интегратор(16бит) += (Текущее_измерение - Предидущее_значение);
... повторям много раз
Фактическое_значение = Интегратор/количество_отсчетов
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Sep 7 2009, 12:36
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
ЭЭЭэээ... А разве это не одно и то же? Разве нельзя сократить Цитата Интегратор1(16бит) += (Текущее_измерение - Предидущее_значение); Интегратор2(32бита) += Интегратор1;
... повторям много раз
Фактическое_значение = Интегратор2/количество_отсчетов до Интегратор2(32бита) += (Текущее_измерение - Предидущее_значение); ... повторям много раз Фактическое_значение = Интегратор2/количество_отсчетов ?? Или Интегратор1 тоже static?
Сообщение отредактировал Altair - Sep 7 2009, 12:54
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Sep 7 2009, 14:26
|
Участник

Группа: Свой
Сообщений: 71
Регистрация: 8-07-05
Из: Омск
Пользователь №: 6 644

|
Цитата(Rst7 @ Sep 7 2009, 16:08)  Конечно. Где Вы видели интегратор не static?  - Семен Семеныч!!! - Ах да, да... :-))
--------------------
Время не придет. Время уходит.
|
|
|
|
|
Oct 2 2016, 12:59
|
Группа: Новичок
Сообщений: 2
Регистрация: 2-10-16
Из: Ukraine.First capital.
Пользователь №: 93 569

|
Уважаемый RST7, а можно взглянуть на ваш вариант программной реализации? Собственно интересует сам механизм измерения сдвига фазы
--------------------
Опыт, прямопропорционален количеству аппаратуры, выведенной из строя...(С)
|
|
|
|
|
Oct 7 2016, 08:12
|
Группа: Новичок
Сообщений: 2
Регистрация: 2-10-16
Из: Ukraine.First capital.
Пользователь №: 93 569

|
Цитата(Rst7 @ Oct 4 2016, 15:55)  Так вроде все описано выше. Конкретно код там довольно специфический и нечитабельный, по большому счету. из описанного выше вполне понятно как обработать полученный результат, а я будучи латышОм, не совсем понимаю сам механизм работы ацп в данном решении, потому даже не читаемый код был бы хорошим подспорьем, на чем еще учиться как ни на работе профи!?
--------------------
Опыт, прямопропорционален количеству аппаратуры, выведенной из строя...(С)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|