Спидометр/одометр на ИН14

223573535e4a4d2ab59998d867645ddf.jpg
Доброго времени суток!
В очередной раз напало творчество. Решил обновить старый спидометр в боевом танке ВАЗ 2121. Сделав ревизию закромов, нашёл 3 штуки ИН14. Для часов — мало, для термометра — много. Ни туда — ни сюда. В спидометр — самое то.
Для начала штатный спидометр был снят и выпотрошен. Текущий пробег сохранён на бумажке, чтобы всё по-честному. Был приобретен датчик скорости 10 импульсов на оборот (ДСА-3). В качестве индикаторов скорости — вышеупомянутые ИН14, для отображения пробега, часов и прочего — широко известный в узких кругах конструкторов АОНов на z80 — АЛС318.
a4011d9fb4ab4ef082540dbdbf74a2a7.jpg
Первоначально ядром прибора был выбран PIC18F452 за обилие GPIO. Потом попался i2c расширитель портов mcp23017, до которого давно хотел добраться. С ним, надобность множества GPIO отпала, и был выбран близкий мне по последним конструкциям, msp430g2452. Также нашлись RTC — i2c часы ds1307.
ИН14 требует для штатной работы 170 вольт. Повышающий DC-DC был собран по испытанной схеме на MC34063+IRF740. Опишу некоторые нюансы, появившиеся в процессе создания.
1. Круглый корпус. Не совсем удобная форма для размещения внутри электроники и индикации. Пришлось делать внутреннюю конструкцию модульной с несколькими разъёмами. Также ставилась задача сделать корпус герметичным (ну или почти герметичным), так как ватерлиния в связи с условиями эксплуатации автомобиля бывает выше крыши. Это было решено заливкой лишних отверстий эпоксидным клеем и установкой единого разъёма для связи с внешним миром. Собственно конструкция:
7651dbdebe4b410cbd74102edf6f7713.jpg
и разъём:
c953b97a6ddc4139b4aa30efde6990e4.jpg
2. Динамическая индикация. Чтобы не замечать переключение разрядов при динамической индикации, так бесящее определённых людей, частота обновления каждого разряда должна быть не меньше 100Гц. Правда есть те, кто и 100 Гц видит, но я их не катаю на этом автомобиле. Из двух индикаторов самый с этой точки зрения «трудный» — 9-ти разрядный АЛС318. Получается, частота обновления показаний должна быть не меньше 9×100 Гц. Для упрощения вычисления интервалов — была выбрана частота обновления 1кГц. Схемотехнически АЛС318 подключен к расширителю портов mcp23017. Порт А — сегменты, порт B — разряды. 9-й разряд управляется непосредственно с GPIO микроконтроллера. Получается, раз в миллисекунду нужно по i2c обновлять состояние портов A и B расширителя. Отсюда вылез следующий нюанс.
3. Медленный обмен по i2c у ds1307. На шине i2c висят в нашем случае два slave-а. Расширитель портов и часы. Последние по даташиту не успевают за частотой SCL выше 100кГц, в то время как расширитель умеет работать на частотах до 1.7МГц. Для обновления портов расширителя нужно писать в i2c раз в 1 мс 4 8-мибитных слова (адрес расширителя, адрес порта А, данные для порта А, данные для порта B). Расширитель при инициализации программируется на автоинкремент адреса внутренних регистров при чтении/записи. А адрес порта В следует сразу за адресом порта А, что позволяет сэкономить на передаче дополнительного адреса порта B. Для обеспечения малого времени обработки процедуры обновления индикации была выбрана частота тактирования SCL — 500кГц. Причём, опрос состояния часов проводится один раз за 100 циклов обновления индикации, т.е. раз в 100 мс. Процедура опроса часов устанавливает частоту SCL в допустимые для ds1307 100кГц. При отладке обмена по i2c сильно помог USB логический анализатор SaleaeLogic (8каналов, до 24МГц дискретизация). Софт к нему умеет декодировать различные протоколы, в том числе i2c.
0517c0dffb2c4fd4b477b76b2a6e6be8.PNG
4. Питание. Спидометру для хранения времени постоянное питание от аккумулятора и для работы — напряжение, подающиеся при включении зажигания. Последним питается DC-DC преобразователь и дешифратор для ИН14, расширитель портов. При отсутствии напряжения зажигания — устройство переводится в режим хранения. Если ключ зажигания включен — запускается индикация, из разрешаются прерываниия от датчика скорости. При выключении зажигания — показания одометров записываются в энергонезависимую память микроконтроллера.
5. Управление Для установки часов, сброса показаний одометров (их два, кроме основного счётчика пробега) применён энкодер с кнопкой (картинку честно спёр в сети. свой энкодер уже залит термоклеем для гидроизоляции):
02b5de2bc88e4bc785de3bf6a15041f1.jpg
6. Логические уровни slave-ов i2c. Так как часы ds1307 питаются от 5В, а микроконтроллер и расширитель портов от 3.3В — подтягивающие резисторы шины i2c подключены к 3.3В. По даташиту для ds1307 напряжение логической единицы — 2.2В, то 3.3В будут вполне в штатным.
7. Watchdog В системе используется аппаратный i2c интерфейс, во время ожидания отправки/приёма байта процессор «спит». В случае сбоя/отключения зажигания в это время — микроконтроллер может не дождаться ответа slave-а и остаться в «спящем» режиме. Для исключения подобных зависаний используется аппаратный watchdog микроконтроллера. В основном цикле wtchdog постоянно сбрасывается. В случае зависания — основной цикл основной цикл останавливается и watchdog переполняется, посылая микроконтроллеру reset. Для определения характера reset (power on или watchdog) в программу введена переменная, не инициализируюемая при сбросе (#pragma NOINIT). Если она равна известному значению — был сброс по watchdog.
8. Калибровка В принципе калибровку можно сделать уже в бою, например, ехать с определённой скоростью по gps. Набрав, например, 30 км/ч — нажать на капу, и спидометр запомнит измеренную частоту импульсов, соответствующую 30 км/ч. Но на задней стенке была интересная надпись:
3f72dc0e432f40a3894c0a17381f6e1a.jpg
Таким образом 10 импульсов датчика скорости будут соответствовать одному метру, пройденного автомобилем. Если будут значительные отличия по факту — внесу нужные коррективы.
9. Виброустойчивость. Прибор предназначен для эксплуатации в сложных с точки зрения вибрации условиях. В Интернетах не нашёл информации про виброустойчивость ИН14. Время, как говорится, покажет. Электрические соединения сделаны старым добрым МГТФ-ом. После проверки модулей — они были залиты эпоксидным клеем. Кстати нашёл в fixprice вполне себе клей в формфакторе двойных шприцов.

Вот элементы конструкции:


10. Разное. Существующий пробег сохранён предварительно с вышеозначенной бумажки в энергонезависимой памяти. Кстати о ней. В msp430 энергонезависимая память организована постранично. Для пользователя доступно первые три. В четвертой хранятся калибровочные данные тактового генератора. Сохранение показаний основного счётчика пробега и двух дополнительных сбрасываемых одометров производится последовательно, заполняя поочередно первые три страницы flash. При достижении конца третьей страницы — первые три страницы стираются и запись начинается снова с начала первой. Таким образом увеличивается ресурс flash, хотя ресурс замка зажигания (сохранение происходит при выключении зажигания), конечно, меньше чем ресурс стирания записи flash.
В панели приборов:
50ceed209cdc409fa61bfd0623f369a1.JPG
В принципе всё. Жду комментарии и замечания. Архив с исходниками и схемой в diptrace по традиции в картинке:
К сожалению, обновленный habrastorage распознает архив в картинке и не даёт его сохранить, поэтому вот исходники и схема:
dl.dropboxusercontent.com/u/974924/nivaCon2.rar
P.S. И да, этим лампам ИН14 — действительно 44 года.
P.P. S. Видео на ходу снять не удалось. Не хватило рук. Определение скорости сверил по GPS. Отклонения ± 4 км/ч на скорости 40 км/ч. Вполне достаточная точность.

© Geektimes