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

в 13:19, , рубрики: C, diy или сделай сам, stm8s, микроконтроллеры stm, программирование микроконтроллеров, Электроника для начинающих, электроника своими руками, метки: ,

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

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

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

Итак, приступим к созданию «патча» на зеркало.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программная реализация довольно простая, сначала отработана на базе 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);
}

Уровень яркости индикаторов сохраняется в энергонезависимой памяти по принципу «карты памяти» описанной с помощью структуры. Для каждого поля структуры имеется функция взятия значения и функция записи нового значения.

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

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

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

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

Автор: smashrod

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js