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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Измерение частоты через АЦП, Как сделать?
hd44780
сообщение Oct 27 2011, 07:57
Сообщение #1


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Сделал прибор на ATMega16 - показывает напряжение, ток нагрузки, мощности разновсякие.... Сеть бытовая, 50 Гц.
Тут всё нормально работает. Спасибо участникам форума, которые ранее отвечали на мои вопросы.

Схема входного каскада - рис.

Вопрос - как можно померить частоту имея на входе АЦП поднятое на 2.5в напряжение сети 50 Гц.
Вообще-то оно совершенно не капает, ну так, интересно просто. Для полноты функционала так сказать ...

Сейчас я сделал так:
АЦП цифрует 20 раз за период (таймер 1khz = 1ms).
В обработчике прерывания написал:

// Миллисекунды
ms++;

// Проверка перехода через 0 (- -> +)
if (adcU>3)
{ // Положительная полуволна
if (isUNegative==1)
{ // Была отрицательная - переход
pulses++;

isUNegative = 0;
} // if
} // if
else // отрицательная полуволна
isUNegative = 1;

adcU - код со входа ADC1 за вычетом смещения ср. точки ADC0.
isUNegative - просто флаг, отслеживает переход синусоиды через 0.
pulses - кол-во переходов синусоиды вверх через 0.

Цикл измерений длится 0.5 сек (10 периодов).
Потом идёт обсчёт, в т.ч. и частоты:

// Частота
frequency = pulses*1000.0;
frequency/=ms;

frequency - частота в Гц, float.

pulses и ms считают постоянно, никогда не обнуляясь.

Проблема в том, что частота в итоге "плавает" где-то в интервале 49-51 Гц, хотя частотомер из осциллографа-мультиметра UT-81B показывает ровно 50 Гц. Да и сам я понимаю, что реально частота не может так гулять, она жёстко контролируется.

Читал соседнюю тему про частоту, например, эту - http://electronix.ru/forum/index.php?showt...=29796&st=0 , но у меня порт В, где все входы таймеров T0, T1 занят, там ШД дисплея HD44780 crying.gif .... Освободить могу, переведя дисплей в 4 бит режим работы с перебросом его целиком на PORTC, но я терпеть не могу 4 бит режим работы, глючный он какой-то. У меня так метеостанция работает (деваться было некуда), так там вечно на дисплее какая-то байда лезет. Библиотека для LCD там не самодельная, а стандартная, из CvAVR. Думал дисплей коцнутый, но на 8 бит работает идеально...
Отвлёкся я ...

PC6, PC7 свободны, но я не знаю, может ли TC2 считать внешние импульсы или он только под кварц часовой заточен ...

Можно, конечно, налепить внешний компаратор, счётчик, но это усложние схемы, доп. корпуса и пр....
Да и делает тот компаратор то же самое, что и мой программный счётчик...

Спасибо.

PS
Админам:
Кнопка CODEBOX не фурычит, валится ошибка -

Сообщение: Недопустимый аргумент.
Строка: 1225
Символ: 3
Код: 0
URI-код: http://electronix.ru/forum/jscripts/ips_text_editor.js

Смайлики вставляются нормально.
Браузер - IE8 со всеми обновлениями.
Винда - 2003 SP2 сервер лицензионный. Обновляется регулярно.
Оперу и пр. альтернативы не предлагать, у нас на работе запрещено biggrin.gif .

Сообщение отредактировал hd44780 - Oct 27 2011, 08:09
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
woroba
сообщение Oct 27 2011, 08:38
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 18-07-05
Пользователь №: 6 871



Так у Вас зазор 1mS, вот показания и плюшут. Попробуйте чаще запускать преобразования. А вообще лучше всего для этих целей использовать внешнее прерывание+таймер.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Oct 27 2011, 08:59
Сообщение #3


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Чаще запускать пытался, там другие проблемы были. Попробую ещё, на свежую голову.

INT0 реально освободить, попробую. Спасибо.
А туда выход какого-то компаратора сунуть? В наличии есль К554СА3. Пойдёт?

Сообщение отредактировал hd44780 - Oct 27 2011, 09:00


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 27 2011, 09:03
Сообщение #4


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (hd44780 @ Oct 27 2011, 12:59) *
Чаще запускать пытался, там другие проблемы были. Попробую ещё, на свежую голову.

INT0 реально освободить, попробую. Спасибо.
А туда выход какого-то компаратора сунуть? В наличии есль К554СА3. Пойдёт?



A родной занят?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
hd44780
сообщение Oct 27 2011, 09:16
Сообщение #5


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(ILYAUL @ Oct 27 2011, 12:03) *
A родной занят?


Он не занят, но у него входы на PB, а этот порт занят - ШД LCD.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 27 2011, 09:26
Сообщение #6


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE
В наличии есль К554СА3
Ну тогда его выход на INT0 и запускать таймер в прерывании. Из полученных данных надо будет вычесть , переходы в прерывание выход из него. Пишите его на asm - быстрее получится. Лучше усреднять полученные значения, скажем 16 значений - один раз показания. Выбирайте усреднение кратное 2 - сдвигом поделить проще , чем формулы писать.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
hd44780
сообщение Oct 27 2011, 10:09
Сообщение #7


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(ILYAUL @ Oct 27 2011, 12:26) *
Ну тогда его выход на INT0 и запускать таймер в прерывании.


Спасибо, попробуем. Только, наверное, в выходные. Прошиву я и на работе наклепаю, но по вечерам паять темновато.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 27 2011, 10:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(hd44780 @ Oct 27 2011, 11:57) *
Цикл измерений длится 0.5 сек (10 периодов).

Цикл измерений лучше заканчивать не по времени, а по числу зафиксированных периодов измеряемой величины (например, 25), подсчитывая при этом интервал времени. Начало отсчета времени необходимо привязать к началу первого периода.
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 27 2011, 15:39
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Так как частота примерно известна, то
Можно Герцелем посчитать амплитуды спектра на трех чатотах в районе 50Гц.
получим три точки (x1,y1), (x2,y2), (x3,y3), где х1,х2,х3 частоты, напрмер 49, 50, 51 Гц, а y1,y2,y3-амплитуды спектра на этой частоте
через них можно провести параболу y=a*x^2 + b*x + c.
и соответственно найти коэффициенты a,b,c
Mathematica подсказывает что это будет:
LinearSolve[{{x1^2, x1, 1}, {x2^2, x2, 1}, {x3^2, x3, 1}}, {y1, y2,y3}]

a = (x2 y1 - x3 y1 - x1 y2 + x3 y2 + x1 y3 - x2 y3)/((x1 - x2) (x1 - x3) (x2 - x3)),
b = (-x2^2 y1 + x3^2 y1 + x1^2 y2 - x3^2 y2 - x1^2 y3 + x2^2 y3)/((x1 - x2) (x1 - x3) (x2 - x3)),
c = (x2^2 x3 y1 - x2 x3^2 y1 - x1^2 x3 y2 + x1 x3^2 y2 + x1^2 x2 y3 - x1 x2^2 y3)/((x2 - x3) (x1^2 - x1 x2 - x1 x3 + x2 x3))

а если параболу y=a*x^2+b*x+c продиффернцировать, и приравнять нулю, то можно выяснить, что максимум у параболы находится в точке x0=-b/2a.
то есть
x0 = -(-x2^2*y1 + x3^2*y1 + x1^2*y2 - x3^2*y2 - x1^2*y3 + x2^2*y3)/(x2*y1 - x3*y1 - x1*y2 + x3*y2 + x1*y3 - x2*y3)/2
или, если немного упростить, то искомая частота будет:
x0= -((y1*(x3^2-x2^2) + y2*(x1^2-x3^2) + y3*(x2^2-x1^2))/(y1*(x2-x3)+y2*(x3-x1)+y3*(x1-x2))/2
вычислений не сильно много: Герцель - 3 умножения на отсчет для каждой частоты, т.е. 9,
да тут 6 умножений, деление и сдвиг. AVR поди справится. Тем более что последние вычисления частоты так можно вообще раз в секунду делать.




Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 27 2011, 16:32
Сообщение #10


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (_pv @ Oct 27 2011, 19:39) *
Можно Герцелем посчитать амплитуды спектра на трех чатотах в районе 50Гц.

Т.е три фильтра?
QUOTE (_pv @ Oct 27 2011, 19:39) *
да тут 6 умножений, деление и сдвиг. AVR поди справится. Тем более что последние вычисления частоты так можно вообще раз в секунду делать


Справится , только вот зачем.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
hd44780
сообщение Oct 27 2011, 16:33
Сообщение #11


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Во, чего я придумал - поставить туда ещё один МК - ATMega8 blink.gif w00t.gif и нагрузить её чем угодно.
Там и компаратор есть и всё остальное...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 27 2011, 16:35
Сообщение #12


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (hd44780 @ Oct 27 2011, 20:33) *
Во, чего я придумал - поставить туда ещё один МК - ATMega8 blink.gif w00t.gif и нагрузить её чем угодно.
Там и компаратор есть и всё остальное...

Поставь лучше тиньку biggrin.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 27 2011, 16:48
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(ILYAUL @ Oct 27 2011, 23:32) *
Т.е три фильтра?

не совсем.
я предлагаю посчитать спектр, но не полностью через Фурье потому что долго, а только в трех точках.
и по этих трем точкам найти максимум на спектре.
Цитата(ILYAUL @ Oct 27 2011, 23:32) *
Справится , только вот зачем.

Капитан Очевидность подсказывает: чтобы измерить частоту.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Oct 27 2011, 16:56
Сообщение #14


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Во, точно, у меня AtTiny2313 валяется ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 27 2011, 17:21
Сообщение #15


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (_pv @ Oct 27 2011, 20:48) *
Капитан Очевидность подсказывает: чтобы измерить частоту.

Для этого есть аппаратные средства в AVR


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
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 Текстовая версия Сейчас: 20th June 2025 - 09:00
Рейтинг@Mail.ru


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