Спаял небольшую платку, которую можно воткнуть вместо PIC, тестирую.
Скажите свое мнение - как вам кажется, этих настроек хватит? Или добавить еще что-то?
Массивы в начале - это режимы, которые можно выбрать джамперами. К примеру, если не поставлен ни один из джамперов, то используются 0-е элементы всех трех массивов, а если стоят все 4 джампера, то 15-е элементы.
Идея такая: если комп используется в ждущем режиме, то выставляется:
TurnOffByButtonTimeout - в секунды-минуты, это пауза до нажатия кнопки power.
Затем HardOffToSleepTimeout выставляется в TurnOffByButtonTimeout+2-5 минут. В этот момент блок питания проконтроллирует, что комп действительно не работает. Если работает, комп будет жестко выключен.
В конце сработает FullHardOffTimeout, позволяющий рубануть Vsb через пару-тройку дней, во избежание просадки аккумулятора.
Напряжение питания мониторится абсолютно все время. "доброго" завершения работы компа по неправильным входящим напряжениям не предусмотрено.
Код:int16_t TurnOffByButtonTimeouts[16] PROGMEM ={0,5,5,5,5,5,30,30,30,30,30,30,30,30,30,30}; // время до авт. нажатия Pwr для выключения в зависимости от режима int32_t FullHardOffTimeouts[16] PROGMEM ={20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,300}; // время до полного выключения питания в зависимости от режима int16_t HardOffToSleepTimeouts[16] PROGMEM ={10,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0}; // время до выключения всего кроме Vsb в зависимости от режима // Если HardOffToSleepTimeout=0, то считается, что комп НЕ РАБОТАЕТ в ждущем режиме // То есть когда комп выключится при отсутствии зажигания, с него будет убран Vsb. // из этого следует, что в состоянии, когда выключено зажигание, комп нельзя будет включить. #define FullHardOffOnIncorrectGoSleep true // если true, то в случае, если срабатывает HardOffToSleep, но комп при этом включен, будет произведен FullHardOff (жесткое полное отключение питания), если false, то останется Vsb. #define AmplifierOnlyOnIgnition true // если true, то при выключении зажигания усилок сразу выключится. #define MinVoltageToStartR 11.5 // при напряжении ниже этого комп не включится. #define MinVoltageToWorkR 11.7 // при напряжении ниже этого тикает таймер низкого напряжения #define MinVoltageToStartAfterLowVoltageStopR 12.5 // если комп отключился по низкому напряжению, то включится он не раньше, чем будет зафиксировано это напряжение. #define MinIgnVoltageR 8 // минимальное напряжение на выводе "зажигание", считающееся наличием зажигания #define ExtremeLowVoltageR 7 // напряжение, при понижении до которого идет мгновенное отключение блока питания #define ExtremeHighVoltageR 18 // напряжение, при превышении которого начинает тикать таймер отключения. Больше 19 не ставить. #define IgnitionTimeBeforeStartF 0.2 // время в секундах до автоматического включения компа (нажатия power) после включения зажигания. Может быть дробным, 0 - комп не включается автоматически. Но вместе с зажиганием всегда подается Vsb #define MaxWorkTimeWithLowVoltage 60 // максимальное время работы в секундах при напряжении ниже MinVoltageToWorkR #define TimeBeforeAmpOn 20 // в секундах, время перед включением усилка максимальное значение 65000/SmallCyclesPerSecond #define MaxWorkTimeWithExtremeHighVoltage 60 // максимальное время работы при напряжении выше чем ExtremeHighVoltageR. в секундах, максимальное значение 65000/SmallCyclesPerSecond
Последний раз редактировалось Chip; 25.09.2015 в 19:28.
Еще можно наладить связь между компом и блоком питания (точнее контроллером). В результате можно будет, к примеру, смотреть лог произошедших событий и менять настройки.
Последний раз редактировалось SBorovkov; 08.01.2011 в 16:37.
На столе натестировался, теперь будет натурный эксперимент в машине.
Если все будет нормально - выложу прошивку.
За габаритные размеры блока питания сама плата контроллера не выходит. Выходят за габариты основной платы по высоте разъемы uart (для потенциального обмена с компом) и разъем прошивки.
Ну так как оно, научилось мониторить напругу? и отрубать комп?
Да, вроде все делает согласно настройкам, которые написаны несколькими сообщениями выше. Но надо потестировать в реальных условиях.
Единственное, что из серьезного пока не сделал из аналогов m2-atx - следующая штука: Если комп только что включили, а затем выключили зажигание, то m2-atx судя по инструкции, добавляет некоторое время на то, чтобы комп загрузился. И только потом начинает процедуру завершения работы.
Ну и пока не тестировал работу с джамперами настройки, но там слишком простой код, чтобы в нем были серьезные ошибки.
да, кстати, у меня один конденсатор на m2-atx легонько начал надуваться. 1500мкф, 10в. Блок питания используется около двух лет. Так что при случае проверьте, может не только у меня так...
Конденсаторы на M2-ATX это известная проблема, обычно через 2-3 года раздуваются.
На новых партиях идут уже другие конденсаторы, мой отпахал уже 4 года, кондюки вздулись, но продолжал работать, поменял БП на новый) перепаивать лень)
С радостью сообщаю, что первая версия прошла все мои тесты. Сразу скажу, что запаздывающее отключение сразу после включения (о нем писал чуть выше), я еще не сделал. Также не оттестирована (и закомментирована) работа джамперов, отвечающих за выбор текущего режима, всегда используется нулевой, но я не уверен, что в случае возможности перепрограммирования, джамперы нужны.
Плата не только включает и выключает комп, усилок, но еще и ведет лог произошедших внешних и внутренних событий, может слать данные о текущем состоянии.
Поскольку в atmega48 всего 256 байт eeprom, я вынужен был исключить запись какого-либо аналоги времени и пишу только сами события в кольцевом буфере.
Пример лога, хранящегося в EEPROM (байт, его текстовое описание)
Строка - 1 байт eeprom :-).Код:128 Подали питание 129 Включили зажигание 148 подали Vsb 131 Мать запросила включение - включаем 144 начало полного включения питания 148 подали Vsb 145 окончание включения питания - успешно 133 Мать запросила выключение 151 Команда на выключение усилка 156 Выключение основного питания 154 Подан импульс включения 131 Мать запросила включение - включаем 144 начало полного включения питания 148 подали Vsb 145 окончание включения питания - успешно 150 Команда на включение усилка 152 Включен усилок 130 Выключили зажигание 151 Команда на выключение усилка 155 Подан импульс выключения 133 Мать запросила выключение 151 Команда на выключение усилка 156 Выключение основного питания 129 Включили зажигание 154 Подан импульс включения 131 Мать запросила включение - включаем 144 начало полного включения питания 148 подали Vsb 145 окончание включения питания - успешно 150 Команда на включение усилка 152 Включен усилок 133 Мать запросила выключение 151 Команда на выключение усилка 153 Выключен усилок 156 Выключение основного питания 137 Очень низкое напряжение 151 Команда на выключение усилка 156 Выключение основного питания 149 убрали Vsb
Моя плата выполнена двухсторонней, но она допускает и одностороннюю технологию - с тремя перемычками. В общем-то это абсолютно все равно.
Шестипиновый разъем для программирования, он аналогичен разъему программирования Arduino. Трехпиновый - uart (Rx,Tx,Gnd), если его подключить к компьютеру посредством ft232 или max232, можно пользоваться логом.
В качестве контроллера можно взять ATMega 48/88/168/328. 48-я на Митинском рынке стоит порядка 80 рублей, могу сказать где именно.
Во вложениях:
Полные исходники прошивки для Avr Studio
Прога, которая позволяет читать лог из платы
Схема в gif (1200 dpi) и Eagle
Для работы контроллера надо в нем изменить fuses для работы на частоте 8 МГц от встроенного резонатора (по умолчанию стоит делитеть 8 и частота 1 мегагерц).
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)