hd44780 0 27 октября, 2011 Опубликовано 27 октября, 2011 (изменено) · Жалоба Сделал прибор на 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 сервер лицензионный. Обновляется регулярно. Оперу и пр. альтернативы не предлагать, у нас на работе запрещено . Изменено 27 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
woroba 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Так у Вас зазор 1mS, вот показания и плюшут. Попробуйте чаще запускать преобразования. А вообще лучше всего для этих целей использовать внешнее прерывание+таймер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 октября, 2011 Опубликовано 27 октября, 2011 (изменено) · Жалоба Чаще запускать пытался, там другие проблемы были. Попробую ещё, на свежую голову. INT0 реально освободить, попробую. Спасибо. А туда выход какого-то компаратора сунуть? В наличии есль К554СА3. Пойдёт? Изменено 27 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Чаще запускать пытался, там другие проблемы были. Попробую ещё, на свежую голову. INT0 реально освободить, попробую. Спасибо. А туда выход какого-то компаратора сунуть? В наличии есль К554СА3. Пойдёт? A родной занят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба A родной занят? Он не занят, но у него входы на PB, а этот порт занят - ШД LCD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба В наличии есль К554СА3 Ну тогда его выход на INT0 и запускать таймер в прерывании. Из полученных данных надо будет вычесть , переходы в прерывание выход из него. Пишите его на asm - быстрее получится. Лучше усреднять полученные значения, скажем 16 значений - один раз показания. Выбирайте усреднение кратное 2 - сдвигом поделить проще , чем формулы писать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Ну тогда его выход на INT0 и запускать таймер в прерывании. Спасибо, попробуем. Только, наверное, в выходные. Прошиву я и на работе наклепаю, но по вечерам паять темновато. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 8 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Цикл измерений длится 0.5 сек (10 периодов). Цикл измерений лучше заканчивать не по времени, а по числу зафиксированных периодов измеряемой величины (например, 25), подсчитывая при этом интервал времени. Начало отсчета времени необходимо привязать к началу первого периода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 53 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Так как частота примерно известна, то Можно Герцелем посчитать амплитуды спектра на трех чатотах в районе 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 поди справится. Тем более что последние вычисления частоты так можно вообще раз в секунду делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Можно Герцелем посчитать амплитуды спектра на трех чатотах в районе 50Гц. Т.е три фильтра? да тут 6 умножений, деление и сдвиг. AVR поди справится. Тем более что последние вычисления частоты так можно вообще раз в секунду делать Справится , только вот зачем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Во, чего я придумал - поставить туда ещё один МК - ATMega8 :blink: :w00t: и нагрузить её чем угодно. Там и компаратор есть и всё остальное... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Во, чего я придумал - поставить туда ещё один МК - ATMega8 :blink: :w00t: и нагрузить её чем угодно. Там и компаратор есть и всё остальное... Поставь лучше тиньку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 53 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Т.е три фильтра? не совсем. я предлагаю посчитать спектр, но не полностью через Фурье потому что долго, а только в трех точках. и по этих трем точкам найти максимум на спектре. Справится , только вот зачем. Капитан Очевидность подсказывает: чтобы измерить частоту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Во, точно, у меня AtTiny2313 валяется ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Капитан Очевидность подсказывает: чтобы измерить частоту. Для этого есть аппаратные средства в AVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться