2022-03-10 11:04:14 +03:00

165 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Контроллер питания и охлаждения.
===============================
-- Четыре канала измерения температуры с точностью +-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 ===
Реинициализация АЦП (ХЗ, зачем я это добавил).
=== ! ===
Переключение между автоматическим и ручным режимами управления.