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

 
 
> Ультразвуковой анемометр
brag
сообщение Dec 31 2013, 14:10
Сообщение #1


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



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

Принцип взят из этой темы http://electronix.ru/forum/index.php?showtopic=65996 + немного мозга. Отдельная благодарность ее учасникам за инфу wink.gif
Контроллер - атемга88 на плате от какого-то старого проекта.
Датчики брал вот такие http://voron.ua/catalog/018090 дешевые. По скольку мне прислали не пару, а 2 передатчика - так и поставил. передатчик тоже OK работает в качестве приемника wink.gif
Схема простая. добротности датчиков для расстояния 100мм (взял исходя из нужных критериев) достаточно, так что все прямо к мк. Компаратору опору немного сместил и поднял все это дело над землей.

Принцип основан на измерении разности фаз сигнала туда и обратно и выдача на комп по UART, дальше вся обработка на матлабе.

Тактовая частота 20мгц. резонансная около 42кгц(подстраивал).
У таймера1 2 прерывания в центре цикла и в конце, тоесть прерывания вылетают с частотой ~84кгц всегда из одного места: sleep; rjmp -1;
Код
OCR1B=TMVAL_PI-1; // middle
    OCR1A=TMVAL_PI*2-1;

главное - успеть их обработать, до наступления следующего прерывания.
В обработчике собственно дрыгание ногами и проверка флага ICR, который выставляется по одному фронту(без разницы какому) компаратора.
CODE
static void tih1(){
PORTC^=(PC_US00|PC_US01);
icr1();
}

static void tih2(){
PORTC^=(PC_US12|PC_US13);
icr2();
}

void tihInit(){
setTih1();
}

ISR(iTmr1CmpA){ // full cycle, 40khz
pTih();
}

ISR(iTmr1CmpB){ // middle of cycle
pTih();
}


В стейт-машине
1. делается 4096 холостых тактов
2. берется значение ICR, которое по сути является фазой(если свернуть к +-PI) и интегрируется 2048 раз
3. меняются местами приемник/передатчик
4. повторяется 1-3
5. вычисляется разность фаз(со сварачиванием ессно) выдается результат по uart ( cbkDfrdy(dfi); )

Разность фаз может быть как положительная, так и отрицательная, те можно мерять и направление ветра.

Вот примерно такой код
CODE
// --------------------------------------------------------
static CallbackF pTih;
static long g_integ;
static int g_icrint1,g_icrint2;
static U16 g_ctr;
static U8 g_st;

static void tih1();
static void tih2();

static void tmrReset(){
TCCR1B=(TCCR1B&~0x07);
TCNT1H=0;
TCNT1L=0;
TCCR1B|=(1<<CS10);
TIFR1=0x27;
}

static void setTih1(){
DIDR0=(1<<ADC2D)|(1<<ADC3D);
PORTC=0x30|PC_US00;
DDRC=PC_US00|PC_US12|PC_US01;
ADMUX=3;
pTih=tih1;
tmrReset();
}

static void setTih2(){
DIDR0=(1<<ADC0D)|(1<<ADC1D);
PORTC=0x30|PC_US12;
DDRC=PC_US00|PC_US12|PC_US13;
ADMUX=1;
pTih=tih2;
tmrReset();
}

#define T_PREAMBLE 4096
#define LS_INTC 11

static inline char getIcr(int *picr){
if(TIFR1&(1<<ICF1)){
int icr=ICR1L;
icr|=(U16)ICR1H<<8;
TIFR1=(1<<ICF1);
if(icr>=TMVAL_PI)icr-=TMVAL_PI*2; // if fi>=180 fi=fi-360;
*picr=icr;
return 1;
}
return 0;
}

static void icr1(){
int icr;

switch(g_st){
case 0: // start
g_ctr=0;
g_st=1;
break;
case 1:
if((++g_ctr)>=T_PREAMBLE){
g_ctr=0;
g_integ=0;
g_st=2;
}
break;
case 2:
if(!getIcr(&icr))break;
g_integ+=icr;
if((++g_ctr)>=(1<<LS_INTC)){
g_icrint1=g_integ>>LS_INTC;
g_st=0;
setTih2();
}
break;
default:
g_st=0;
break;
}
}

static void icr2(){
int icr;

switch(g_st){
case 0: // start
g_ctr=0;
g_st=1;
break;
case 1:
if((++g_ctr)>=T_PREAMBLE){
g_ctr=0;
g_integ=0;
g_st=2;
}
break;
case 2:
if(!getIcr(&icr))break;
g_integ+=icr;
if((++g_ctr)>=(1<<LS_INTC)){
g_icrint2=g_integ>>LS_INTC;

int dfi=g_icrint1-g_icrint2;
if(dfi>=TMVAL_PI)dfi-=TMVAL_PI*2; // wrap phase
else if(dfi<-TMVAL_PI)dfi+=TMVAL_PI*2;

cbkDfrdy(dfi);
//outhex(dfi);
//outhex(g_icrint1);uartch(' ');outhex(g_icrint2);
//uartstr_P("\r\n",2);

g_st=0;
setTih1();
}
break;
default:
g_st=0;
break;
}
}

Самое важное здесь выполнить tmrReset в начале каждого измерения иначе фаза будет прыгать рандомически. Ну и успеть полностью обработать прерывание(когда идет замер фазы) примерно за 230 тактов, в моем случаи.

Мне нужно мерять не скорость ветра, а расход воздуха, м3/час. Поэтому эта колбаса помещается в трубе диаметром 125мм.
Формулы простые, все основано на Википедии + Wolfram mathematica sm.gif

l=0.1; % расстояние между датчиками
d=0.125; % диаметр трубы
vs0=20.0457*sqrt(t+273.15); % скорость звука, t - температура в °C, берется с термодатчика тем же прибором.
dt=y/20e6; % y-разность фаз.
v=-l/dt + sqrt(l^2 + dt^2* vs0^2)/dt; % вычисляем скорость ветра, м/с
va=v*pi*(d/2)^2*3600; % расход воздуха, м3/час

Вот так выглядит результат. Пока тест, дул ртом (в одну и в другую сторону) sm.gif
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
Herz
сообщение Jan 5 2014, 19:40
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(brag @ Jan 5 2014, 12:52) *
А поскольку фаза=время*костанта, все это действительно и для временной задержки периодического сигнала.

теперь понятно... biggrin.gif
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 5 2014, 20:18
Сообщение #17


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
так в ваших формулах все известно, подставляете значения получаете результат, что калибровать то?

вот и я о том же.
погрешность в основном от неоднородности потока.
для точности +-10кубов/час вполне девайс сгодится. а то тут уже про поверку начали sm.gif
это измеритель скорости потока, а не расходомер (измеритель количества)
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Jan 5 2014, 21:19
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Точно измерить можно трубкой "Пито".

Можно еще попробовать метеорологическим анемометром измерить, они калиброванные от 0,5 м/с

А оценить точность измерения "плюс-минус километр" можно так - если есть хорошая магистраль со сжатым воздухом, то измеряем там давление и внутренний диаметр магистрали, выводим воздух из магистрали в трубу большего диаметра где будет стоять ваш измеритель.
Зная давление в магистрали и диаметр можно подсчитать скорость воздуха в магистрали, потом этот поток пересчитать в трубу по отношениям диаметров. Подводных камней много, но если аккуратно всё сделать, то можно оценить.

Вообщем-то так и делают в аэродинамических трубах делающих до нескольких махов - стоит целое поле компрессоров с ресиверами размером с небольшую бочку, которые одновременно начинают закачмвать воздух из всех ресиверов в аэродинамическую трубу, вой стоит неимоверный sm.gif но скорость потока в трубе измеряют трубкой "Пито".
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 5 2014, 21:51
Сообщение #19


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Хм, у меня скоростя от 0.25 до 5.5 м/с - врядли их можно нормально измерить трубкой. да еще и зависят от сопротивления.
тут нужен измеритель, который не оказывает сопротивления.

Вариант со сжатым воздухом неплохой. можно попробовать обычным компрессором, только вот датчик давления тоже нормальный прийдется прикупить, стрелочный манометр не прокатит sm.gif
только вот у нас газ сжимаемый, значт нужно уже 2 датчика. + потери на трение. сомневаюсь, что точность этого метода будет выше, чем "моего" ультразвукового sm.gif
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jan 6 2014, 04:44
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(brag @ Jan 6 2014, 01:51) *
Хм, у меня скоростя от 0.25 до 5.5 м/с - врядли их можно нормально измерить трубкой. да еще и зависят от сопротивления.
тут нужен измеритель, который не оказывает сопротивления.

Все оказывает. И свет, и ультразвук. Есть еще проволочный термоанемометр. Им же даже соотношение бензин-воздух в машинах регулируют.
Но он тоже влияет.
Go to the top of the page
 
+Quote Post
brag
сообщение Jan 6 2014, 20:41
Сообщение #21


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



проволоку геморой калибровать..
влияет ессно все, только думаю понятно о чем идет речь sm.gif
5мвт ультразвука все таки не сильно много ))
Go to the top of the page
 
+Quote Post
uk8amk
сообщение Jun 9 2014, 14:40
Сообщение #22





Группа: Участник
Сообщений: 14
Регистрация: 5-03-09
Пользователь №: 45 694



Интересная тема.
Тут как раз за недорого попалась платка ардуинского УЗ дальномера HC-SR04 с вроде подходящими датчиками.
Хотел повторить, но некоторые тонкости реализации программы не до конца ясны.
Не могли бы вы выложить полный код тестовой программы?
Go to the top of the page
 
+Quote Post
uk8amk
сообщение Jun 10 2014, 08:07
Сообщение #23





Группа: Участник
Сообщений: 14
Регистрация: 5-03-09
Пользователь №: 45 694



Попробовал изобрести УЗ анемометр.
Стреляю пачку импульсов излучателем, на приемнике жду ответа. Время полета пачки до приемника = скорости.
Макет: http://s30.postimg.org/x5r4sod4h/0414.jpg
Я применил открытые излучатели с сеточкой. Схема себя вела странно когда дул на приемник. Пришлось приемник заклеить скотчем. Наверное поток воздуха приводил к колебаниям чашечки-резонатора и случайным срабатываниям компаратора. С закрытой сеточкой упала чувствительность и поэтому добавился усилитель на NE5532.
Пищалки скотчем примотаны к рейке, она находится в трубке из литровой пластиковой бутылки с отрезанными краями.
Дул в трубку со всей силы 3 раза в каждое направление. Это видно на графике: http://s29.postimg.org/g8tbs3i07/image.png
Сейчас ноль у меня плавает. С чем связано не знаю. Возможно удастся скомпенсировать если стрелять в оба направления(сейчас только в одну сторону).

У меня вопрос по фазовому методу автора.
Т.к. синусоида - периодическая функция, получается что корректное определение скорости возможно только в пределах одного периода. Если скорость меняется в значительных пределах так, что фаза развернется до 2пи, будет нельзя определить скорость?
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Jun 10 2014, 17:31
Сообщение #24


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Цитата(uk8amk @ Jun 10 2014, 16:17) *
Сейчас ноль у меня плавает. С чем связано не знаю.

С температурой, скорее всего...
Цитата(uk8amk @ Jun 10 2014, 16:17) *
У меня вопрос по фазовому методу автора.
Т.к. синусоида - периодическая функция, получается что корректное определение скорости возможно только в пределах одного периода.

Именно так.
Go to the top of the page
 
+Quote Post
uk8amk
сообщение Jun 15 2014, 12:59
Сообщение #25





Группа: Участник
Сообщений: 14
Регистрация: 5-03-09
Пользователь №: 45 694



Доделал схему с программой так что теперь оба датчика являются трансиверами(пока 2 из 4-х).
В дифференциальном режиме точность улучшилась и плавание нуля уменьшилось.
Однако столкнулся с неприятным моментом, на который ранее не обращал внимание. На графике периодически выскакивают иголки. Причем так, что даже усреднение и скользящее среднее полсотни выборок не слишком помогает.
Я подключил внешний компаратор LM393 и к его выходу осциллограф.
Стало видно, что сигнал с приёмной пищалки нарастает плавно и первый период компаратор не всегда захватывает.
Как на рисунке: http://s30.postimg.org/4lz2enwwh/Ultrasonic_TOF.png
Получается, что время полёта звука TOF может быть определено с погрешностью +/-25мкс(F=40КГц). для дальномера, меряющего метры погрешность в несколько см не страшна. Для анемометра, меряющего микросекунды неприемлема.
Есть ли несложные способы обойти этот недочёт?
Go to the top of the page
 
+Quote Post
LexaryStyle
сообщение Jun 15 2014, 15:37
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 21-04-09
Пользователь №: 48 064



Я делал термоанемометр на базе спец сенсора. Точность хорошая от 0 до 10м\с но нужно бороться с темп. зависимостью и компенсировать ее.
Go to the top of the page
 
+Quote Post
uk8amk
сообщение Jun 15 2014, 17:58
Сообщение #27





Группа: Участник
Сообщений: 14
Регистрация: 5-03-09
Пользователь №: 45 694



Фазовым методом ТС насколько помню можно адекватно померять до 14м/с.
Но хотелось бы захватить и область шторма(> 20м/с) с ураганным ветром.
А ультразвуковой анемометр чем интересен - можно без движущихся деталей определять точное направление ветра.
Для меня это актуально поскольку занимаемся установкой ветряков. Перед установкой делается мониторинг параметров местности и выбор оптимальной точки установки. Сейчас применяем комплекты анемометров АП-1 крыльчатый и чашечный со всеми присущими им недостатками.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Jun 16 2014, 18:49
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(uk8amk @ Jun 16 2014, 00:58) *
Для меня это актуально поскольку занимаемся установкой ветряков. Перед установкой делается мониторинг параметров местности и выбор оптимальной точки установки. Сейчас применяем комплекты анемометров АП-1 крыльчатый и чашечный со всеми присущими им недостатками.

Просто так, сходу, сделать не получится. купите готовый до 30 м/с с точностью до 0,2 м/с во всем диапазоне- http://meteosap.ru
А любой метеоприбор, та же вертушка, измеряет до 60 м/с по паспорту с ухудшением точности на крайних значениях.
Go to the top of the page
 
+Quote Post
uk8amk
сообщение Jun 17 2014, 10:56
Сообщение #29





Группа: Участник
Сообщений: 14
Регистрация: 5-03-09
Пользователь №: 45 694



На низких скоростях погрешность в 2-3 м/с вполне приемлема.
Такую штуку делаю в основном по своей инициативе, поэтому 5-10 кбаксов врядли кто-то в ближайшее время отстегнёт на покупку.
Про то что сразу хорошо сделать не выйдет вы правы. Попался отчет немецкого инженера по разработке анемометра:
https://www.technik.dhbw-ravensburg.de/~lau...anemometer.html
Объём работ впечатляет.
Пока попробую допаять вторую пару датчиков и повесить на окно. А там видно будет куда дальше двигаться.
Go to the top of the page
 
+Quote Post
uk8amk
сообщение Jun 18 2014, 08:11
Сообщение #30





Группа: Участник
Сообщений: 14
Регистрация: 5-03-09
Пользователь №: 45 694



Решил заснять параметры отклика аналоговой части системы.
Возбуждение передатчика 10 периодов прямоугольником 5 вольт в мостовом режиме.
Расстояние до приемника 20см.
Сигнал снимаю с ОУ NJM4580, КУ примерно 10 единиц.
1. Время между маркерами 1030мкс, дискретизация 625кГц:
http://s30.postimg.org/qk3aqamip/Shot_0_1030us.png
2. Время 244мкс, дискретизация 1,25мГц:
http://s28.postimg.org/3p6ackgdp/Shot_1_244u_S.png
Пришлось смотреть самодельным цифровым осцом т.к. на лучевом всё прыгает и ничего не понятно.
Видно небольшой шум в отстутсвии сигнала - это неэкранированная лапша.
За сигналом идет приличный звон. Пищалки видимо высокодобротные.
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 Текстовая версия Сейчас: 13th August 2025 - 17:47
Рейтинг@Mail.ru


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