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

 
 
> Ультразвуковой анемометр
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
 
Start new topic
Ответов
brag
сообщение Jan 5 2014, 21:51
Сообщение #2


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

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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   Ультразвуковой анемометр   Dec 31 2013, 14:10
- - brag   С трубой картина хуже - отражения в трубе формирую...   Jan 3 2014, 02:07
- - Lagman   Ультразвуковой расходомер, много где применяется. ...   Jan 3 2014, 17:41
- - brag   В трубе какраз максимум отражений именно когда рас...   Jan 3 2014, 23:24
|- - Самоделкин   Цитата(brag @ Jan 4 2014, 01:24) В трубе ...   Jan 4 2014, 05:28
- - Herz   Цитата(brag @ Dec 31 2013, 16:10) 5. вычи...   Jan 4 2014, 09:58
- - brag   ЦитатаВозможно я чего то не правльно понял а чем В...   Jan 4 2014, 17:36
|- - Herz   Цитата(brag @ Jan 4 2014, 19:36) dfi=fi1-...   Jan 4 2014, 21:46
||- - brag   Цитата(Herz @ Jan 4 2014, 23:46) Читал-чи...   Jan 4 2014, 23:16
||- - Herz   Цитата(brag @ Jan 5 2014, 01:16) хм, что ...   Jan 5 2014, 08:08
|- - kolobok0   Цитата(brag @ Jan 4 2014, 21:36) Тем же п...   Jan 5 2014, 00:46
|- - brag   Цитата(kolobok0 @ Jan 5 2014, 02:46) я та...   Jan 5 2014, 10:52
|- - kolobok0   Цитата(brag @ Jan 5 2014, 14:52) ...это д...   Jan 5 2014, 14:57
|- - Herz   Цитата(brag @ Jan 5 2014, 12:52) А поскол...   Jan 5 2014, 19:40
- - brag   для контроля. клиент хочет, чобы его вентиляция да...   Jan 5 2014, 16:48
- - Lagman   так в ваших формулах все известно, подставляете зн...   Jan 5 2014, 18:15
- - brag   Цитататак в ваших формулах все известно, подставля...   Jan 5 2014, 20:18
|- - HardEgor   Точно измерить можно трубкой "Пито". М...   Jan 5 2014, 21:19
- - brag   проволоку геморой калибровать.. влияет ессно все, ...   Jan 6 2014, 20:41
- - uk8amk   Интересная тема. Тут как раз за недорого попалась ...   Jun 9 2014, 14:40
- - uk8amk   Попробовал изобрести УЗ анемометр. Стреляю пачку и...   Jun 10 2014, 08:07
|- - AndyBig   Цитата(uk8amk @ Jun 10 2014, 16:17) Сейча...   Jun 10 2014, 17:31
- - uk8amk   Доделал схему с программой так что теперь оба датч...   Jun 15 2014, 12:59
- - LexaryStyle   Я делал термоанемометр на базе спец сенсора. Точно...   Jun 15 2014, 15:37
- - uk8amk   Фазовым методом ТС насколько помню можно адекватно...   Jun 15 2014, 17:58
|- - HardEgor   Цитата(uk8amk @ Jun 16 2014, 00:58) Для м...   Jun 16 2014, 18:49
- - uk8amk   На низких скоростях погрешность в 2-3 м/с вполне п...   Jun 17 2014, 10:56
- - uk8amk   Решил заснять параметры отклика аналоговой части с...   Jun 18 2014, 08:11
- - Voblin   На самом деле ограничение в пи/2 можно обойти испо...   Jun 18 2014, 11:36
- - Anton75   На всякий случай, вдруг пригодится: этой темой дав...   Jun 23 2014, 06:59
- - uk8amk   Спасибо за совет. Но я пожалуй пока с несерьёзной ...   Jun 23 2014, 19:35
- - Anton75   Цитатапока с несерьёзной математикой повожусь Ког...   Jun 24 2014, 06:23
- - uk8amk   Появилось немного свободного времени, я оформил сх...   Aug 26 2014, 19:22
- - kolobok0   Цитата(uk8amk @ Aug 26 2014, 23:22) ... Е...   Aug 27 2014, 19:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 04:28
Рейтинг@Mail.ru


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