|
|
  |
Ультразвуковой термометр, Он же анемометр и указатель направления ветра |
|
|
|
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

|
Да уж, вменяемых цен на эти датчики в Украине не нашел, наверное дешевле будет сделать чашечный (хотя надежность конструкции пострадает)
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|