Доработка прошивки:
При более плотной эксплуатации своего прибора я столкнулся с проблемой зависимости показаний прибора от времени суток. Это обусловлено неудачным выбором алгоритма измерения синусоидального напряжения. Дело в том, что форма напряжения 220 В в разное время суток разная. Причина - обилие включенных активных и импульсных нагрузок днем и малое их количество ночью. Эту проблему я смог побороть, только изменив полностью алгоритм измерения напряжения. Теперь мой прибор измеряет действующее значение напряжения, прошивки прилагаю. Правда, несколько снизилось удобство управления прибором: теперь кнопка РЕЖИМ активна только в момент, когда прибор измеряет напряжение, т.е. для повторного нажатия кнопки РЕЖИМ приходится ждать перехода прибора в состояние измерения сетевого напряжения.
Возможно, придется также разменять местами провода идущие на 26 и 25 ноги микроконтроллера (прошивка переделывалась под другую плату).
Алгоритм измерения в двух словах выглядит теперь так: Во время прихода положительной полуволны запускается АЦП, Который успевает за время прохождения этой полуволны сделать порядка 100 выборок, которые обрабатываются по формуле:
Urms= sqrt(1/T* S[u(t)*u(t)]dt,
где: sqrt - корень квадратный, S - интеграл за период времени от 0 до Т.
Для дискретного способа взятия интеграла формула упроститься до вида
Urms=K*sqrt(1/N*sum(Uadc*Uadc)),
Где: К - поправочный коэффициент, Uadc - значение на выходе АЦП, N - число выборок за время прохождения полуволны синусоиды. Более точно подсказать я вам не смогу, т.к. исходники на Си были уничтожены вместе с винчестером, прошивки в hex я вам скачал с оставшегося прототипа, надеюсь, они Вам помогут.
Фьюзы прогаммируются так: для меги 8
В программаторе кодвижн сверху вниз
1. первые два – галки CKSEL0=0, CKSEL1=0
2. третий – нет галки CKSEL2=1
3. следующие пять – есть галки CKSEL3=0, SUT0=0, SUT1=0, BODEN=0, BODLEVEL=0.
4.остальные нет галок
Частота внутреннего генератора микроконтроллера 8 МГц.
Фото от OlK:
АРХИВ: Скачать
|