Для справки  - предпусковой подогреватель (далее ПП) двигателя, это устройство, позволяющее прогреть двигатель внутреннего сгорания транспортного средства для облегчения его запуска, не запуская сам двигатель. И в некоторых случаях, дополнительно для прогрева воздуха в салоне транспортного средства и еще кое чего (особенно если у вас "Тесла" или иной электромобиль в Сибири - далеко не самые редкие посетители дизельной колонки на заправке :) ). Для работы ПП, как правило, его подключение  производится  к топливной, электрической и охлаждающей системе автомобиля.   Подробности конструкции ПП и принципа функционирования прилагать не буду, так как все это доступно в интернете.  Требовалось решить следующую проблему: при регулярном использовании предпускового подогревателя на автомобиле, может возникнуть ситуация, когда аккумулятор автомобиля (далее АКБ) находится в постоянно не дозаряженном состоянии, и поэтому может неожиданно подвести - к примеру при только что прогретом двигателе с помощью ПП, сил на прокрутку двигателя стартером у АКБ не осталось. Да и АКБ в таком режиме работы может досрочно выйти из строя. Усугубляет это зачастую еще и отношение владельцев автомобиля к своему автомобилю, как в нежелании следовать рекомендациям, изложенными в руководстве по эксплуатации автомобиля, так и мнением соответствующих технических специалистов. Для этого надо было разработать контроллер, который мог при совместной работе с некоторыми моделями ПП от производителя Webasto: Дистанционно управлять ПП от автомобильной сигнализации (не все сигнализации могут это делать, и требовалось исключить ковыряние в пультах управления ПП). Включать вентилятор "печки" автомобиля для прогрева салона. Сбрасывать ошибки ПП, если он заблокировался по какой либо причине. быть контроллером USB – K-Line, для диагностики и управления ПП с компьютера. Периодически или по команде проверять состояния АКБ и выводить следующую информацию водителю: Напряжение,  SOH (уровень жизни/Проценты ёмкости),  SOC (  уровень заряда в процентах) - как на модных тестерах АКБ. Иметь возможность выполнять дополнительные какие либо дополнительные функции при соответствующем дополнении программного обеспечения. Для более полной информации, предварительно был сделан реверс-инжиниринг ПП, и переносного тестера АКБ. Так как производители все равно не предоставляет принципиальных электрических схем (я не нашел) своих устройств к сожалению. Заодно это поможет в дальнейшем для ремонта ПП специалистами. Этап 1 -  Берем неисправный ПП (можно и новый), но в хорошем состоянии и разбираем.  На плате нет маркировки, и поэтому изобретаем свою маркировку основных компонентов для платы.  Фото платы с промаркированными компонентами со стороны процессора: Фото платы с обратной стороны: Беру в руки тестер, редактор схем, пару дней и в итоге нарисовал такую схему: Эта схема ПП, который попался мне в руки, могут быть мои ошибки, да и производители любят часто менять схемы по причине выявленных схемотехнических, компонентных или прочих производственных ошибок. Схема полезна в познавательных целях, да и другим специалистам в ремонте лишней не будет. Также приложу пару схем ПП легковых автомобилей, которые чаще попадались, и это мои рисунки (прошу - если будете критиковать, то по существу, по ГОСТу и орфографии не надо): и Приведенные схемы, были интересны мне своими схемотехническими решениями, инженеры тоже любят красивые решения и пошутить тоже. И добавлю еще схему многострадальных насосов охлаждающей жидкости, которые часто забиваются от разложившегося некачественного антифриза, продуктами дичайшей коррозии блоков двигателей некоторых китайских и отечественных двигателей, ну и прочим мусором, который даже иногда представить трудно: После этого настала очередь разобраться с протоколом работы ПП: Анализирую обмен, и получая информацию как из доступных источников, так и анализируя обмен самостоятельно, получилось понять и систематизировать протокол обмена данными с данными ПП. Сразу отмечу, что по шине CAN не разбирался, в виду неактуальности. Описывать протокол  и подробности работы тут буду, чтобы не занимать зря место, все будет в коде (но если надо разобрать тут - пишите). В вкратце, обмен выглядит так, на скорости 2400 8 bit по шине K-Line: Командой будим ПП. Посылаем команду запуска ПП в работу на определенное время Периодически посылаем команду "не спать" ПП, и по необходимости читаем его состояние. По истечении заданного времени работы, когда ПП остановил работу, перестаем его опрашивать. Для примера только приведу осциллограмму на штифте накала/датчике температуры пламени ПП в работе: Короткими импульсами измеряется его сопротивление и соответственно определяется температура пламени, большим широким импульсом — накаливается штифт для поджига топлива. Заканчивая про ПП, добавлю, прошивки не читал, процессор не взламывал. Этап 2: Берем доступный и качественный тестер АКБ (какой уже был в работе): Который при тестировании АКБ выдает на экран такую информацию: И приступаем к его анализу. Вскрываем, внимательно изучаем: и вид чуть поближе: Каждый контакт "крокодил" тестера АКБ к аккумулятору, имеет по два провода - силовой и сигнальный, контакты медные: и рисуем черновую схему компонентов, определяющих работу тестера АКБ. Затем подключаем прибор к осциллографу для изучения сигналов на ключевых компонентах при его работе. Если упрощенно, то прибор меряет напряжение АКБ и его внутреннее сопротивление. Подавая в течении 5 секунд импульсы с частотой 200 Герц с равной скважностью на силовой ключ, нагружаем АКБ на эталонный резистор. Измеряя в эти моменты напряжение на АКБ под нагрузкой и без. Эта разница напряжений на исправном аккумуляторе невелико, и перед подачей его в микроконтроллер прибора надо усилить сигнал, что и делает операционный усилитель на схеме. Четырех проводная схема подключения прибора к АКБ, позволяет компенсировать "паразитные сопротивления" на проводах и контактах, так как они могут существенно повлиять на результаты измерения. Затем, интерпретируя эти измеренные данные, и заранее предварительно внесенные данные о заявленной емкости АКБ и выбранного стандарта измерения - выдает свое мнение о состоянии АКБ. Схему усиления сигнала для измерения внутреннего сопротивления можно промоделировать примерно так: Заодно собираем статистику показаний тестера АКБ, по мере разряда аккумулятора. В итоге была нарисована следующая схема контроллера, с более простой схемотехникой, так как не требовалось составлять конкуренцию фирменными изделиям: - Для платы был разработан пластиковый корпус Результат печати на 3-Д принтере, сверху прозрачная кнопка-световод: Проверка размещения платы: Также была предусмотрена и установка дисплея. Корпус без дисплея с разъемом USB. Была проверена работа платы как при нагреве до 100 градусов Цельсия, так и при заморозке до - 40 градусов. Это пример осциллограммы при измерении внутреннего сопротивления АКБ, сверху тестовые стробы момента фиксации сигнала на АЦП микроконтроллера с выхода операционного усилителя. Снизу сигнал на входе АЦП микроконтроллера. Самая интересная задача, описание которой я никак не смог найти - это как из полученных данных о напряжении АКБ и внутреннем сопротивлении, получить информацию о его оставшихся жизненных силах, так называемом параметре SOH. Пришлось составить таблицу при разных условиях теста. Ожидал что придется искать какую либо хитрую зависимость с экспонентами, полиномами или другими хитрыми формулами: Но реальность оказалась куда прозаичнее, и даже разочаровала, пришлось смирится что мой прибор будет больше "показометром" (как и многие другие аналогичные приборы), но людям это нравится. В  итоге, покажу мой метод измерения параметров АКБ, который совпадает со значениями недорогих тестеров АКБ, которые есть в продаже: bcoef1 = 2750 - константа, милливольт, варьируется от 2,71 до 2,84. r_int_bat = вычисленное внутренне сопротивление АКБ, Ом. По методике EN, пусковой ток (CCA) считается как  2.74 / Rint i_pusk = ((float)bcoef1 /1000.0)  /	r_int_bat i_pusk_max - ток холодного пуска, Ампер по стандарту EN (обычно указано на маркировке АКБ) А теперь хитрый алгоритм расчета "степени здоровья" АКБ: если i_pusk < EN, тоsoh	=  i_pusk /(float)bat_en;	        //получим отношение Ipusk/ENif(soh > 1.0) soh	= 1.0;		//ограничим пределы от 0 до 1				if(soh < 0.0) soh	= 0.0;		//ограничим пределы от 0 до 1soh	*=	soh;					//возведем в квадрат, вот она - тайна!soh	*=	100.0;				//переведем в проценты далее идет расчет степени заряженности АКБSOC					=	(((u_bat_out)/1000.0 - 11.8 ) / ( 12.6 - 11.8 )) * 100.0; u_bat_out - напряжение в милливольтах на аккумуляторе без нагрузки. 11,8 - напряжение принятое за 0%.12,7 - напряжение принятое за 100%. поэтому там где напряжение больше 12,6В везде показывается 100%. Далее cкорректируем степень заряда аккумулятора от температуры:в рабочем диапазоне температур зависимость почти линейная +/-будем корректировать так: SOC	-= (20.0 - temper)	-   сделаем суровым методом, тут особая точность не нужна, temper - температура процессора в градусах, хотя надо задавать температуру самой АКБ. Результаты работы программы микроконтроллера выводятся в тестовое окно терминала: А водителю результат будет выводится на отдельно установленный двухцветный светодиод в указанное место, для принятия решения - "Хорошо", "Зарядить", "Заменить". Проверка на реальном автомобиле. Для корректной работы контроллера на автомобиле, необходимо было проверить условия для получения корректных измерений и выяснить что может этому помешать. А мешает почти все, нельзя производить тестирование АКБ при работе двигателя автомобиля, аудиосистемы, вентилятора отопителя салона. Так выглядит осциллограмма напряжения на АКБ и сигнала на входе АЦП при запуске автомобиля, с момента включения зажигания до начала работы двигателя. Аналогичная осциллограмма при работе вентилятора отопителя салона при выключенном зажигании.  Осциллограмма работы аудиосистемы при выключенном зажигании. Алгоритм работы контроллера сделан следующий: Если подключены к USB шине компьютера - работаем как K-Line адаптер. Если есть шум от работы каких либо компонентов автомобиля на входе АЦП - просто мигаем светодиодом, выводя состояние АКБ, хорошее или плохое. Если есть команда включить ПП - выполняем процесс работы с ПП. Если есть команда сбросить ошибки ПП - выполняем. Если двигатель автомобиля не работает больше часа, и есть возможность провести тест АКБ (нет шумов) - делаем тест, и задаем новое время проведения теста через сутки. И каждые пять секунд мигаем светодиодом коротким импульсом о состоянии АКБ. В остальное время контроллер засыпает для минимизации тока потребления. Импульсный блок питания очень экономичен, но сгорает при повышении питающего напряжения больше 24 Вольт, то есть питание от бортовой сети больше 12 Вольт не предусматривалось. Контроллер монтировался в непосредственной близости от АКБ, и подключался к нему по четырехпроводной схеме непосредственно на клеммы АКБ (силовые и сигнальные провода на клемме зажимались не касаясь друг друга), и спокойно переживал тяготы и лишения, находясь под капотом рядом с двигателем.  Проверка сброса ошибок ПП с имитацией отказов внешних компонентов ПП, работа контроллера совместно с программой диагностики от производителя: Проект к сожалению не был доведен до конца, сначала Ковид, взлет цен на компоненты и их дефицит, а потом и вообще пошло-поехало. Остался только задел готовых плат на будущее. Решил все это написать, может кому-то будет познавательно. Сейчас занимаюсь более серьезными проектами. Получилось, что то много как-то написано-накидано, добавлю ссылку на код, функционал там по минимуму, но то что надо есть.  https://disk.yandex.ru/d/ZBcOHbGbRTz6eQ  Инженер