Перейти к содержанию
    

Измерение частоты через АЦП

Сделал прибор на 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: .... Освободить могу, переведя дисплей в 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: .

post-7980-1319699719_thumb.png

Изменено пользователем hd44780

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так у Вас зазор 1mS, вот показания и плюшут. Попробуйте чаще запускать преобразования. А вообще лучше всего для этих целей использовать внешнее прерывание+таймер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

INT0 реально освободить, попробую. Спасибо.

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

Изменено пользователем hd44780

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

INT0 реально освободить, попробую. Спасибо.

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда его выход на INT0 и запускать таймер в прерывании.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цикл измерений длится 0.5 сек (10 периодов).

Цикл измерений лучше заканчивать не по времени, а по числу зафиксированных периодов измеряемой величины (например, 25), подсчитывая при этом интервал времени. Начало отсчета времени необходимо привязать к началу первого периода.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так как частота примерно известна, то

Можно Герцелем посчитать амплитуды спектра на трех чатотах в районе 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 поди справится. Тем более что последние вычисления частоты так можно вообще раз в секунду делать.

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно Герцелем посчитать амплитуды спектра на трех чатотах в районе 50Гц.

Т.е три фильтра?

да тут 6 умножений, деление и сдвиг. AVR поди справится. Тем более что последние вычисления частоты так можно вообще раз в секунду делать

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Там и компаратор есть и всё остальное...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Там и компаратор есть и всё остальное...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е три фильтра?

не совсем.

я предлагаю посчитать спектр, но не полностью через Фурье потому что долго, а только в трех точках.

и по этих трем точкам найти максимум на спектре.

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

Капитан Очевидность подсказывает: чтобы измерить частоту.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Капитан Очевидность подсказывает: чтобы измерить частоту.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...