- PVSM.RU - https://www.pvsm.ru -
Приветствую читатель! Сегодня я расскажу вам курьезную историю, которая заставила меня задуматься о проблемах, возникающих при неправильном (неоптимальном) выборе комплектующих для реализации какого-либо электронного изделия. А также о кажущейся простоте на примере устройства «одного дня».
Условимся, что история вымышлена, любые совпадения случайны… или не случайны.
Однажды обратился ко мне Сережа-программист с просьбой сделать ему в машину устройство, которое эмулирует последовательное нажатие 2х виртуальных кнопок при нажатии одной физической в цепи управления круиз-контролем авто (Ford Focus 2). Схема стандартного блока управления выглядит следующим образом:
Со стороны блока управления это классический кнопочный ввод с помощью АЦП. так вот задача устройства при нажатии аппаратной кнопки последовательно нажать кнопку ON и SET+ на время ~0,2с. Для простоты интеграции устройства было решено питать его от верхнего резистора делителя. Напряжение на выводах подключения 4,6 В без подключенной схемы кнопок. Поскольку устройство планировалось сделать за вечер, мною была сделана схема без предварительных расчетов из того, что было на монтажном столе. Решение «в лоб»:
Сережа написал прошивку, и устройство прекрасно заработало на авто. В момент, когда плату уже хотели паковать в корпус подрулевого переключателя кто-то из глубины офиса крикнул: «А че так сложно? Половину деталей можно выкинуть, да и вообще STM8 для такой задачи самое то». И началось… Автор идеи вызвался сам спаять макет «из 3х деталей» (видимо предвкушая легкую победу). Я же (руководствуясь своей же статьей о профессиональной ревности [1]) решил не мешать полету молодого специалиста, а подключился лишь на этапе, когда все поняли, что чуда не произошло.
Схема, предложенная моим коллегой, была действительно проще, но работала только на столе:
Ошибки были видны даже на первый взгляд, тем не менее я решил заставить работать схему именно на МК STM8S001J3.
Для того чтобы понять как нужно переделать схему проведем несколько измерений. Сопротивление верхнего резистора в делителе АЦП ~130 Ом, а напряжение без нагрузки 4,6 В.
Тогда схема узла кнопок имеет вид:
При этом диапазон рабочих напряжений МК STM8S001J3 составляет 2,95-5,5 В. Получается, что попытка нажатия кнопки SET+ приводит к падению напряжения ниже минимального и МК сбрасывается.
На этом моменте предлагаю отвлечься и обсудить каков идеальный МК для этой задачи и почему не выбрали его. Обычно для таких поделок используют то, с чем разработчик умеет работать и то, что есть под рукой. Например, у microchip есть контроллеры PIC10F200 или ATtiny10 в корпусе SOT23-6 с диапазоном напряжений питания 2(1,8) — 5,5 В. Эти микросхемы не требуют стабилизатора напряжения (как STM32L031), но и не будут перезагружаться при нажатии кнопки SET+ (как STM8S001J3). В обвязке будет всего лишь 2 резистора и конденсатор. Красота, но в номенклатуре STMicro контроллеров с таким диапазоном питания нет. Внимательный читатель справедливо заметит, что в рамках такой задачи можно освоить практически любой контроллер, но отсутствие привычной среды программирования и отладочных средств определяют выбор.
Вернемся к схеме. Чтобы решить проблему со сбросом контроллера нам нужна энергия для питания контроллера во время нажатой кнопки SET+. Для оценки количества этой энергии необходимо измерить ток потребления (или посмотреть в документации):
Почти 500 мкА в самом лучшем случае. Это много, но чтобы было понятно я приведу расчет. Для накопления энергии нам нужен диод (VD1) и конденсатор (C1):
Падение на VD1 0,2 В, соответственно при отпущенных кнопках С1 будет заряжен до 4,33 — 0,2 = 4,13 В. При «нажатии» кнопки SET+ напряжение в точке Vin падает до 2,2 В, VD1 закрывается и МК питается от разряжающегося С1.
В этом выражении слева энергия запасенная в конденсаторе (при его разряде с 4,13 до 3,1 В), справа энергия затраченная контроллером за время t = 0,2 с. Тогда емкость конденсатора:
660 мкФ для этой задачи очень много. Попробуем усыплять контроллер во время нажатой кнопки.
Для этого у STM8 есть режим Active Halt Mode:
Отключив MVR и Flash, удалось получить ток потребления ~40 мкА (это существенно выше заявленного тока, но для данной задачи такой ток подходит), а благодаря AWU (auto wake up unit) можно легко выставить пробуждение через 256 мс после перехода в сон. В таком случае для обеспечения работы контроллера нужен конденсатор емкостью всего 47 мкФ.
Вроде бы все проблемы решены, но есть еще одно НО. Ток при нажатой кнопке SET+ 18,4 мА — это меньше предельного тока для вывода, но напряжение логического нуля при этом будет в районе 0,7 В. Это приведет к падению тока через резистор и потребует либо пересчета сопротивления, либо использования внешнего транзистора по схеме с открытым стоком. Я выбрал второй вариант как более прогнозируемый в поведении. Итоговая схема приняла вид:
В таком виде она успешно заработала и эксплуатируется по сей день.
Вместо заключения
В этом материале я хочу обратить внимание на проблему того, как разработчик наказывается за излишне поверхностный или легкомысленный подход к разработке простого (на первый взгляд) устройства. С другой стороны, хотелось показать, как неоптимальный выбор основной элементной базы (в данном случае МК) усложняет процесс разработки и само изделие в виду двух основных причин:
Автор: vladimir_open-dev
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/stm32/302223
Ссылки в тексте:
[1] профессиональной ревности: https://habr.com/post/397039/
[2] Источник: https://habr.com/post/432574/?utm_campaign=432574
Нажмите здесь для печати.