Довольно быстро обнаружил, что при отсутствии контроля за процессом — спираль перегревается, сжигая фитиль, страшно воняя перегоревшим глицерином, перегорая, а иногда и устраивая мини-пожар. У потребителей никотина аналогичная проблема была решена с помощью контроля температуры спирали по изменению сопротивления титановой или железной спирали, так что я пошел тем же путем, благо наличие АЦП позволило легко измерять сопротивление спирали. Схема получилась такой:
Vmain — батарея
Therm — выход на спираль (другой конец — на землю)
Check — сигнал для схемы контроля разряда батереи (пропадает при разряде ниже выбранного значения) — можно подсоединить к свободному входу контроллера или вывести на светодиод.
Q1 — любой достаточно мощный P-FET транзистор
GPIO4 — управление ключом (в режиме открытого коллектора!), при нуле — ключ открывается
GPIO15 — контроль температуры (нужно закрыть ключ, перевести GPIO15 в режим выхода, подать логическую единицу и замерить напряжение на ADC, чем выше температура — тем выше напряжение; по окончании измерения — вернуть этот пин в режим входа)
Простейший алгоритм, даже без PID-регулятора — спасает спираль от перегрева и перегорания. Следует заметить, что точность контроля — очень низкая (высокая и не требовалась), при повышении температуры на пару сотен градусов с титановой спиралью в один ом — значение ADC менялось всего на три-четыре пункта (по 50-60 градусов на деление). Это ограничение возникло из-за малого выходного тока микроконтроллера (10 миллиампер). Если нужна более высокая точность (например, для использования в сигаретах), то понадобится еще один ключ (не такой мощный, скажем, на FDV304P), включенный аналогично основному, но с делящим резистором (выбранным в зависимости от сопротивления спирали и напряжения батареи так, чтобы с холодной спиралью — напряжение на входе АЦП было чуть меньше одного вольта). Тогда можно достичь точности измерения в пределах нескольких градусов.
Update: Спасибо за замечания, добавил защиту входа ADC от перенапряжения (работает и так, но лучше перестраховаться). Также добавил схему для точного определения температуры (R12 должен быть достаточно мощным, чтобы выдерживать пики во время измерения!). Если точность не нужна, то убираем Q2, R12 и R13, а GPIO15 соединяем через R4 c Therm напрямую.