Контроллер питания и охлаждения. =============================== -- Четыре канала измерения температуры с точностью +-1degrC (три канала управляют активностью кулеров, четвертый - для общего отключения питания в случае достижения критической температуры). -- Два канала управления четырехпроводными кулерами с контролем их активности. -- Две кнопки управления (включить/экстренно выключить нагрузку). -- Внешний сигнал (пищалка 12В): короткий сигнал раз в 10 секунд - один из кулеров не вращается (а должен), непрерывные сигналы - критическая ситуация, питание скоро будет отключено, (сигналы в течение 4с с паузой в 6с - резерв). -- Режим ручного управления (без контроля температур с соответствующими действиями) или мониторинга (в этом режиме нельзя вручную задавать параметры кулера или внешнего сигнала). == help == ``` '0x' - turn cooler0 on/off (x=1/0) or get status (x - any other) '1x' - turn cooler1 on/off (x=1/0) or get status (x - any other) 'Ax' - get ADC raw value (x=0..7) 'B' - buttons' state 'bx' - buzzer: x==0 - off, x==1 - on, x==l - long beeps, x==s - short beeps 'Cx' - get cooler x (0/1) RPS 'D' - activate DFU mode 'E' - show current state 'Gx' - get cooler x (0..3) PWM settings 'M' - get MCU temperature 'm' - toggle monitoring 'R' - software reset 'rx' - relay on/off (x=1/0) or get status 'Sx y' - set coolerx PWM to y 's' - show settings 'T' - get time from start (ms) 'tx' - get temperature x (0..3) 'V' - get voltage 'Z' - reinit ADC '!' - switch between manual and automatic modes ``` === 0x,1x === x=='0' - выключить питание кулера; x=='1' - включить питание; любое другое значение - проверить состояние. === Ax === x=={0..7} - получить "сырое значение" x-го канала АЦП (в ADU). Каналы: 0..3 - термометры, 4 - измерение 12В, 5 - измерение 5В, 6 - температура МК, 7 - уровень 3.3В. === B === Состояние обеих кнопок, например: ``` BUTTON0=0 BUTTON1=0 ``` Нажатие кнопок проверяется один раз в секунду. Кнопка BUTTON0 переводит систему в автоматический режим и включает реле. Кнопка BUTTON1 отключает реле, отключает все кулеры и сигнал и переводит систему в ручной режим. === bx === Изменить состояние внешнего сигнала. 0 - выключить, 1 - включить серию непрерывных сигналов, l - включить серию коротких сигналов в течение 4 секунд с паузой в 6 секунд, s - включить короткий сигнал (0.5с) с паузой 9.5с. === Cx === Получить значения скорости вращения четырехпроводного кулера (обороты в секунду). Например: ``` C0 RPM0=78 C1 RPM1=0 ``` === D === Активировать режим DFU для перепрошивки. После прошивки нужно перезапустить МК, закоротив контакты "reset" или кратковременно отключив от питания. === E === Отобразить текущее состояние системы, например: ``` TIME=1229247 T0=293 T1=264 T2=262 T3=254 BUZZER=OFF BUTTON0=0 BUTTON1=0 RPS0=82 RPS1=107 PWM0=30 PWM1=40 PWM2=33 COOLER0=1 COOLER1=1 RELAY=1 ``` Где TIME - время с момента включения (мс, приблизительно); Tx - температуры (x10) соответствующих каналов в градусах Цельсия; BUZZER - состояние сигнала; BUTTONx - состояние кнопок (1 - нажата, 0 - отпущена); RPSx - скорость вращения кулера x (оборотов в секунду); PWMx - установленное значение ШИМ (в процентах, 0..100) канала x; COOLERx - включено ли питание кулера x (0..1), из-за неправильной схемотехники не рекомендуется отключать питание четырехпроводных кулеров (+12В поступает в этом случае на измерительный вход); RELAY - состояние реле (1 - включено, 0 - выключено). === Gx === Отобразить значения настройки ШИМ кулера x. === M === Отобразить температуру МК (приближенная температура, x10 градусов Цельсия). === m === Переключить (вкл/выкл) режим мониторинга, когда каждые 5 секунд отображается состояние системы. === R === Программный перезапуск системы. === rx === x==0 - выключить реле, x==1 - включить реле, любое другое значение - получить состояние реле. === Sx y === Установить значение заполнения ШИМ кулера x (0..2) в y (0..100). Согласно опыту, четырехпроводные кулеры не стартуют при значении PWM<15, а двухпроводные не стартуют при PWM<35, поэтому для получения малых оборотов необходимо стартовать на большей скорости, а затем уже установить нужное значение заполнения ШИМ. === s === Отобразить "вшитые" в код настройки, например: ``` Thysteresis=30 Tmin={400, 350, 350} Tmax={900, 800, 600} T3max=850 ``` В данном случае гистерезис температуры установлен в 3 градуса, область допустимых значений температур - 40..90 градусов для канала 0, 35..80 градусов для канала 1 и 35..60 градусов для канала 2. Критическая температура канала 3 установлена в 85 градусов. Если в течение 20 секунд превышено значение одной из критических температур (для T0..2 они равны Tmax+Thysteresis), то реле отключается, система остается в автоматическом режиме. === T === Отобразить время (условное) в миллисекундах со старта. === tx === Получить значение температуры x-го канала (0..3). Температура умножена на 10. Например: ``` t0 T0=294 t1 T1=265 t2 T2=264 t3 T3=256 ``` Соответственно, температуры равны: t0=29.4, t1=26.5, t2=26.4 и t3=25.6. Учитывая то, что величина вычисляется кусочно-линейной аппроксимацией с погрешностью до 0.1 градуса, а сами NTC дают разброс не лучше +-0.5 градуса, не стоит надеяться на то, что температуры будут достаточно точными. === V === Получить значения напряжения (x100) в каналах, например: ``` V3_3=330 V5=428 V12=1055 ``` Означает, что питание МК =3.3В, на входе 5В присутствует 4.28В, а на входе 12В присутствует 10.55В. === Z === Реинициализация АЦП (ХЗ, зачем я это добавил). === ! === Переключение между автоматическим и ручным режимами управления.