«Патчим» зеркало в автомобиле

Коллега на работе купил себе новый автомобиль Chery Tiggo FL, куда китайцы напихали много различных функций за не большую сумму стоимость автомобиля. Одной из самых необычных штуковин в авто оказалось «волшебное» зеркало, которая наделено функциями барометра, альтиметра и компаса.Главным недостатком всей начинки данного автомобиля является отсутствие датчиков температуры за боротом автомобиля и вне его. Данный недостаток решили с коллегой изменить, путем модификации штатного зеркала заднего вида нештатными методами.

d756337015234d6eb546ea0d71933535.jpg

Итак, приступим к созданию «патча» на зеркало.Постановка задачи. Необходимо в автомобиле получать информацию о внешней температуре окружающей среды и температуре внутри салона. В качестве ограничения принимаем, что дополнительные «колхозные» устройства ставить не будем. В качестве допущения принимаем возможность отказаться от показаний альтиметра и барометра. В качестве исходных данных выступает зеркало заднего вида, изображенное на рисунке.

Анализ исходных данных. Любое дело начинается с анализа исходных данных, поэтому начнем с демонтажа зеркала и его разбора. Судя по внешнему виду в зеркале имеется два индикатора светодиодных семисегментных по 4 знака, значит либо до них можно добраться, либо придумать что-то свое.

Вообще стоит отметить, что реализация функций альтиметра, барометра и компаса довольная отвратительная в зеркале, потому что показания плавают сильно, значения кратны 100, а компас не калибруем по известным методикам. Поэтому данные функции можно выкинуть при случае. Тем более, известно, что одновременное измерение высоты и давления одним барометрическим датчиком с допустимой точностью невозможно. Если изменяется высота, то датчик должен измерять только высоту, а если стоим на месте, то измеряем только атмосферное давление. Судя по показанием приборов, складывается ощущение, что в зеркале имеется один компас и один барометрический датчик.

Внутри зеркала находится такая плата:

61d844a0503144d6a3430437368670a4.jpg

Итак вскрытие показало, что у нас внутри зеркала находится плата, на которой для управления индикаторами LED стоят драйверы TM1638, а логика зашита в контроллер MPC82E54AS2. В качестве датчика используется MEMSIC C2122M. Заниматься перезашивкой текущего контроллера и модификацией платы пока желания нет, поэтому решено сделать свою плату для зеркала, которая будет реализовать нашу логику и выводить нужную нам информацию от датчиков.

Решение задачи. Итак, решено сделать свою плату, повторяющую габариты штатной платы и индикаторы, только не будет использовать индикатор компаса, он нам не нужен. Логика работы устройства следующая:1) Имеется три кнопки:»+», «PWR»,»-»: прибавить яркость, вкл или выкл подсветки, убавить яркость;2) При нажатии на кнопки, включается подсветка и информация отображается 20 секунд;3) Если экран включен, то PWR выключает его;4) Данные температур обновляются раз в 1 секунду.

Соответственно функциональная схема устройства имеет вид:

37e9274dc34a48fda116ebcd792a3f43.jpg

Таким образом, в соответствии со схемой у нас микроконтроллер по SPI взаимодействует с двумя драйверами LED, двумя датчиками температуры. Все запитано по схеме, повторяющей штатную, чтобы использовать часть радиоэлементов из платы.

В качестве микроконтроллера будем использовать STM8S003, как самый дешевый из линейки STM8S, периферии у него достаточно, а в частности нам необходимы только GPIO, RCC, SPI. В качестве датчиков температуры использованы DS18B20, которые не составляют дефицита и есть на руках. Для управления LED индикаторам используется MAX7221.

МК STM8S003 имеет следующие характеристики:

18e1e7c8cb9f4c91a5c4e4193669c256.png

Выбор данного МК обусловлен его простотой, дешевизной в условиях кризиса, а также наличием простых средств разработки (STM8S-Discovery). Для тех кто не хочет разводить печатку, можно сделать все тоже самое на макетной плате с использованием следующей просто отладочной платки:

f751a0426ea04fe098a8816dc76f2c8a.jpg

Цена на ebay всего 120 рублей.

Исходя из функциональной схемы получается следующая принципиальная схема устройства:

3180f895f57a4f439038843d844c2701.jpg

Плату с двухсторонним монтажом изготовили с помощью фоторезиста, также им сделан слой маски фиолетового цвета, в результате чего получилось следующее изделие, вид «штатной» платы и «патч» платы со своей логикой:

c40f01538494444faf02251dc8c3859f.jpg

Программная реализация довольно простая, сначала отработана на базе Arduino, потом функционал портирован на STM8S боевого изделия, готового к установки на автомобиль. Стендовые испытания на климатику и на наработку на отказ плата прошла успешно, поэтому сейчас осуществляется монтаж платы в автомобиль. Когда коллега сделает установку, то выложу комплексный отчет обо всех изменения его автомобиля.

Внутри исходного кода три простых библиотеки на языке Си:

работы с бипером работы с драйвером LED работы с DS18b20 С точки зрения программирования ключевым моментом является факт, что у STM8 плавают такты, поэтому задержки для DS18b20 реализованы на базовом таймере номер 4, для примера функция задержки на 15 мкс для контроллера на частоте 16МГц имеет вид:

void _delay_15us (u16 n_15us) { /* Init TIMER 4 */ CLK_PeripheralClockConfig (CLK_PERIPHERAL_TIMER4, ENABLE); /* Предделитель: / (2^3) = 8 /3 */ TIM4→PSCR = 3; /* SYS_CLK_HSI_DIV1 Auto-Reload: 16M / 8 = 2M, тогда 15 мкс это 30 тактов */ TIM4→ARR = 29; // 30 — 1 /* Компенсация времени инициализации таймера в МК*/ TIM4→CNTR = 29; /* Сбросить флаг обновления */ TIM4→SR1 &= ~TIM4_SR1_UIF; /* Включить счет */ TIM4→CR1 |= TIM4_CR1_CEN;

while (n_15us--) { while ((TIM4→SR1 & TIM4_SR1_UIF) == 0) ; TIM4→SR1 &= ~TIM4_SR1_UIF; }

/* Отключить таймер */ TIM4→CR1 &= ~TIM4_CR1_CEN; CLK_PeripheralClockConfig (CLK_PERIPHERAL_TIMER4, DISABLE); } Уровень яркости индикаторов сохраняется в энергонезависимой памяти по принципу «карты памяти» описанной с помощью структуры. Для каждого поля структуры имеется функция взятия значения и функция записи нового значения.

Выводы. Итак, разработано устройство для автомобиля, которое решает задачу изменения температуры внутри салона и вне его. Казалось простая функция, но почему то в Китайских авто её нет, либо она очень спрятана от обывателя.

Демонстрация функционала новой платы:

[embedded content]

Даташиты на компоненты «штатной платы»: www.moly-tech.com/uppdf/MEMSIC/MMC2122MG%20RevC.pdfkazus.ru/datasheets/pdf-data/3675111/MEGAWIN/MPC82E54AS2.htmlcholla.mmto.org/computers/avr/cool_parts/tm1638.pdf

Исходный код прошивки платы: Исходный код для IAR

© Habrahabr.ru