АмперВольтМетр для домашнего блока питания
Предыдущая версия
Цели
- Цель минимум: сделать отображалку тока и напряжения с хоть какой-то, приемлимой для практики точностью - done.
- Цель максимум:
- ток - done;
- напряжение - done;
- максимальный ток - done;
- добиться нормального времени реакции железки на кнопки/поворот регулятора напряжения (почитать moving average filter);
- выходная мощность - done;
- обработка кнопки Mode - некий алгоритм переключения отображаемого - done (может с возвратом в основной режим по таймеру);
- температура радиатора - done;
- второй канал измерения температуры;
- напряжение на выпрямителе;
- прогресс бар процесса старта / зарядки банки;
- рассеиваемая мощность;
- управление кулером по заданной температуре;
- отключение по заданной температуре;
- отсутствие дрожания цифирки - done (хм... вроде оно таки действительно работает!);
- управление силовой частью (цифра в дежурном режиме, по кнопке включает всё остальное); (сколько току жрет реле?)
- управление запуском силовой части (следим, до какого напряжения зарядилась емкость фильтра, потом замыкаем токоограничительное сопротивление);
- управление яркостью подсветки (ШИМом);
- UART, для мониторинга напряжения с компа;
- причесать программу под термистор для выкладки в общий доступ - done;
ToDo
- Откалибровать канал предельного тока.
- Поискать терморезистор в базе электроники.
- Для начала реализовать кольцевой буффер для хранения каналов.
- Проверить ещё раз частоту кристалла. Кажется я экспериментировал с RC генератором, не смотря на наличие кварца в монтажке ;)
- Почитать про политкорректную разводку платы.
- Сделать нормальную печатную плату (под smd?).
- Посмотреть схему и убедиться, что больше ничего меняться не будет.
- Найти кусок стеклотекстолита - done.
- Отмыть его до нормального чистого состояния - done.
- Полить фоторезистом - done. (Или использовать имеющийся позитивный, пока не протух).
- Решить, будет ли это smd. По-видимому нет. Ибо тяжко паять.
- Нарисовать печатную плату - done. Вспомнить об ISP - done.
- Нарисовать пару центрирующих отверстий для совмещения двух сторон платы!!!
- Срисовать ISP с домашней монтажки - done.
- Отпечатать фотошаблон.
- Засветить. Проявить :)
- Найти сверла. Заточить.
- Засверлить.
- Залудить все дорожки.
- Набить :)
- Подключить индикатор.
- Проверить.
- Придумать как проверить точность измерения.
- Проверить точность!
- Посмотреть как влияет напряжение питания на измеренное значение.
- Сравнить пульсации на выходе БП с прыжками на индикаторе. Можно ещё пульсации питания посмотреть.
- Найти терморезистр для вкручивания в корпус - done. Купил Epcos B57703-M 103-G, 2%, 10кОм, NTC.
- Поправить программу под этот конкретный терморезистор.
- Термистор - надо пересчитать табличку для вычисления температуры.
- Зачем при нормировании значений я делаю сдвиг на 2 бита вправо сразу после умножения???
- Найти 10 отличий между моей железкой и обычным мультиметром. Пока видятся такие:
- Мультиметр оцифровывает сигнал с частотой, кратной частоте сети, что снижает помехи.
- Мультиметр питается от батарейки. У него нет помех по питанию (правда, предыдущий пункт гасит именно помехи питания, а не измеряемого сигнала).
- У него 10 (11?) разрядов АЦП. У меня только 8. Но, мне это только в плюс.
- У мультиметра на входе стоит RC цепочка, которая является ФНЧ. Частота среза (по -3дБ) = 8Гц. Хм... Оказывается иногда надо посчитать, чтобы сильно удивиться.
- У него сигма-дельта АЦП. Правда не понятно, может ли это хоть на что-нибудь влиять.
- Питание железки тоже сделать от источника, который будет в конечном варианте.
- Измерить потребляемый ток. Добавить пару релюшек.
- Прикинуть конденсатор фильтра. Ток - 20мА, 1В пульсаций, C = T*I / U = 0.01сек*0.02А / 1В = 2*10^-4 = 0.2мФ = 200мкФ - done.
- Поискать даташит на 7805, посмотреть значения конденсаторов (0.33мкф вход, 0.1мкф выход + 10мкф электролит) - done.
- Предусмотреть на монтажке место под уголок и вертикальное крепление.
- Спаять источник для индикатора.
- Сравнить LM317 и 7805. Использовать лучший.
| * | 7805 | LM317 |
| Load regulation | 25mV (5mA - 1A) | 5mV (10mA - Imax) |
| SVR | 68dB | 80dB |
- Найти схему включения LM317 - done.
- Нарисовать полную схему блока питания на базе LM317.
- Нагрузить лампочками от автомагнитолы и протестировать.
- Промерить напряжения осциллографом.
- Проверить скорость работы I2C. Довести до максимальных 100КГц, ибо сейчас вывод не влезает в один период измерений, и с учетом усреднения не получается ускорить реакцию (таки 1с - много, реакции на ручку установки напряжения не видно).
- Попробовать добавить фичу измерения ограничения по току. Видимо надо измерять напряжение на компараторе и пересчитывать его в предельный ток. - done
- Добавить фичу измерения мощности. Дешево и сердито! - done
- Узнать, с какой частотой работает кристалл - done, ключик в батнике CKSEL=4 как раз и задает использование Internal Calibrated RC Oscillator, 8MHz.
- Сравнить со значением в программе - done, там тоже из такой же частоты всё считалось.
- Сделать вывод на вторую позицию индикатора значения разброса напряжения (max - min). При поиске min/max не использовать усреднение - done, psu1.3.asm. По результатам эксперимента - значение колбасит в пределах 2-3. И то если пальцем в резистор делителя тыкать.
- Сделать на плате кнопку Reset... Надо же чем-то накопленные значение сбрасывать :) - done.
- Нарисовать эту кнопку на схеме - done.
- Попробовать подключить железку к реальному блоку питания. Посмотреть, как будет колбасить измеряемый сигнал там - done. Действительно колбасит. Под нагрузкой - сильней. А осциллограф показывает только небольшой шум. Будем искать!
- Померить уровень шума на выходе блока питания - done, там пульсации сети в 10мВ (1мВ после делителя).
- Поставить на вход ФНЧ из пары 100кОм на 0.2мкф. Посмотреть и померить уровень шума на входе. Посмотреть на колбасню на индикаторе - done. Кажется, колбасить его стало поменьше. Оценить точно пока не получается.
- Таки поставить 0.2мкф вместо нынешнего 0.1мкф - done, изменений практически не заметно.
- Попробовать снизить частоту МК до 1МГц, дабы можно было без переписывания программы рассмотреть, что же там такое скачет.
- Запитать от батарейки и посмотреть, что получится :) - done, различие на уровне вкусовых ощущений и эффекта присутствия. При наличии батарейки дерготня в 1 единицу, при сетевом - 2 единицы. Причем, если перенести железку в другую комнату, то может и 6 единиц получится. Интересней то, что при одном и том же входном напряжении от сети кажет 8.0В, от батарейки - 8.1В. Хм...
- Сделать синхронизацию от сети. Аппаратную и программную части.
- Выкинуть нахфиг из схемы ОУ. Внутри есть компаратор, который ещё и прерывание может запустить :)
- Или сделать синхронизацию по внутреннему таймеру - done.
- Повесить кварц на монтажку.
- Поменять фьюзы.
- Поправить программу.
- Вывести синхросигнал на ножку.
- Написать про калибровку в предыдущем варианте - done (если конечно кто-то что-то сможет из этого понять).
- Почитать datasheet про режим сна в AVR'ках - done.
- Приделать режим сна, дабы при измерении не шумел так сильно АЦП. Чтение АЦП вынести в прерывание - done, psu1.4.asm. Только вот шумов стало даже больше!
- Переключить АЦП в обычный режим. (Сейчас он в дифференциальном режиме). Отключить усилитель при измерении тока. Поставить шунт на 0.25 Ома. - done
- Поменять во входном фильтре сопротивление на 1Мом и кондер на 0.02мкФ - done.
- Попробовать перейти на измерение только в одном канале и убедиться, что переключения каналов не влияют на точность. - done, действительно не влияет.
- Поправить схему. Дорисовать кварц, фильтр, другое подключение АЦП - done.
- Прикрутить индикатор с последовательным выводом I2C (МТ10Т11). Цель - сделать подсветку, освободить ноги. - done
- Выяснить его напряжение питания - done и схему включения подсветки - done. Для этого отписать авторам ;)
- Поискать описание на зеркале сайта - нема.
- Нарисовать схему подключения - done.
- Почитать документацию на индикатор - done.
- Почитать документацию на I2C
- Поискать на сайте филипса апноту к этой микрухе. сцылко на дополнительное описание I2C.
- Попробовать стянуть с сайта МЭЛТ примеры программ - done. Как оказалось, там есть правильные константы с режимами работы :)
- Поправить программу - 50%, psu1.5.asm, написал но не проверил.
- Нарисовать на бумажке временные диаграммы. Свести несколько штук в одну (старт + передача). Подрисовать сверху времена. - done
- Поправить в программе скорость I2C. - done
- Запаять проводочки, подключить к монтажке.
- Залить и проверить.
Может быть / когда-нибудь
- Сделать массив указателей на функции, требующие выполнения. во время сна перебирать их и выполнять.
- Поставить эксперимент над звуковухой. Посмотреть, сколько с неё идет шумов.
- И про улучшение характеристик АЦП.
- Приделать внешний конденсатор на AREF у встроенного АЦП, опробовать.
- Попробовать напихать тантала в цепи питания.
- Написать какой-нибудь монитор для компа, который бы смог отобразить/проанализировать прочитанный сигнал.
- Написать UART на базе USI дабы глазками на компе посмотреть на оцифровываемый сигнал. Ибо не понятно, а чего оно так скачет.
- Приделать разъем и MAX-232. Оформить в виде отдельного модуля, пригодного для повторного использования.
- Опробовать ОУ на предмет линейности усиления - для этого придется сначала прочитать всего ХиХ :(
- Довестить внешние ОУ в части измерения тока, избавиться от внутреннего ОУ. Основная причина - внутренний ОУ имеет фиксированный коэффициент усиления - 20.
- Попробовать запитать от импульсного источника. Посмотреть на точность.
- Предельное входное напряжение 34063?
- Поставить эксперименты над АЦП (с целью попытаться избавиться от прерываний вовсе):
- С разрешенным прерыванием АЦП и запрещенными глобальными.
- С разрешенными прерываниями, но с чтением данных в главном цикле.
- То же, но перед обработкой уходим в режим сна.
- Сон + запрещенные прерывания.
Хозяйке на заметку
Время одного цикла работы АЦП на данный момент составляет 19мкс.
Идея
Собственно, идея этого девайса была почерпнута здесь: EK-1007Kit. Изначальная реализация порадовала минимумом деталей, что было весьма актуально, потому как:
- лениво паять сложный макет;
- лениво разводить сложную плату;
- внутри блока питания мало места, всего-то 60 на 50 на передней панели, и около 20мм в глубину.
Микроконтроллер был выбран тот же, ATtiny26, потому как внутри него есть АЦП и ОУ с управляемым коэффициентом усиления (x20). Кроме того, данный МК имеет встроенный генератор, корпус DIP и всего-то 20 ножек. В качестве индикатора используется МТ-10Т7-7, по причине описанной здесь.
Так как задачей было успеть опробовать девайс за выходные - для экспериментов использовалась монтажка типа breadboard (вообще не требующая пайки), печатная плата не разводилась. Конечный вид получился такой:
Плата
Индикатор
Разъем внутрисистемного программирования
Не стоит пугаться... На монтажке торчит сдвиговый регистр и кнопки. Это осталось от предыдущих экспериментов. Просто не было сил вынимать это всё, да и времени не было.
Детали
В отличии от прототипа (EK-1007Kit) я использовал во входном делителе резисторы C2-23 1%, что должно:
- несколько упростить процесс калибровки;
- улучшить температурную стабильность (резисторы С1-4 гораздо сильнее подвержены влиянию температуры);
В качестве шунта используются резисторы KNP-200 2Вт, 5%, 0.1 Ом (с запасом, ибо: P = U*I = R*I*I = 0.1 * 2.56 * 2.56 = 0.66Вт) (что используется в исходной конструкции по фото разглядеть не удалось), которые хотя и имеют точность 5%, но, судя по информации ЧипаДипа являются проволочными, и, следовательно, также обеспечивают высокую температурную стабильность.
Схема
Схема несколько отличается от той, что на монтажке и в программе :) Будет поправлено на следующей итерации. Схема в векторе формата sPlan 5.0. Программа под эту схему.
Программа
Программа была написана на ассемблере. При написании использовались готовые куски как от моих предыдущих проектов, так и из Application Notes от Atmel. В итоге, за субботу я написал программу, а в воскресенье отладил её и залил в МК.
Собственно, исходный код. Предыдущие версии: версия 0, версия 1.
Батник для прошивки. Батник содержит параметр -n, предполагающий хранение в МК счетчика стираний. При первом запуске наверное имеет смысл поменять параметр на -n1.
Характеристики
| Напряжение питания | 5В |
| Потребляемый ток | 18мА |
| Измеряемое напряжение | 0 - 25.5В |
| Измеряемый ток | 0 - 2.55А |
Краткий итог
В данный момент устройство находится на стадии тестирования :)
Недоделки
Неплохо бы перед зашивкой убедиться в том, что частота кристала - 8МГц. Второй батник для прошивки имеет специальный ключик, его тоже надо проверить.
(с) JustMoose, 2008.