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

Спидометр/одометр на ИН14
Доброго времени суток!
В очередной раз напало творчество. Решил обновить старый спидометр в боевом танке ВАЗ 2121. Сделав ревизию закромов, нашёл 3 штуки ИН14. Для часов — мало, для термометра — много. Ни туда — ни сюда. В спидометр — самое то.
Для начала штатный спидометр был снят и выпотрошен. Текущий пробег сохранён на бумажке, чтобы всё по-честному. Был приобретен датчик скорости 10 импульсов на оборот(ДСА-3). В качестве индикаторов скорости — вышеупомянутые ИН14, для отображения пробега, часов и прочего — широко известный в узких кругах конструкторов АОНов на z80 — АЛС318.
Спидометр/одометр на ИН14
Первоначально ядром прибора был выбран PIC18F452 за обилие GPIO. Потом попался i2c расширитель портов mcp23017, до которого давно хотел добраться. С ним, надобность множества GPIO отпала, и был выбран близкий мне по последним конструкциям, msp430g2452. Также нашлись RTC — i2c часы ds1307.
ИН14 требует для штатной работы 170 вольт. Повышающий DC-DC был собран по испытанной схеме на MC34063+IRF740. Опишу некоторые нюансы, появившиеся в процессе создания.
1. Круглый корпус. Не совсем удобная форма для размещения внутри электроники и индикации. Пришлось делать внутреннюю конструкцию модульной с несколькими разъёмами. Также ставилась задача сделать корпус герметичным (ну или почти герметичным), так как ватерлиния в связи с условиями эксплуатации автомобиля бывает выше крыши. Это было решено заливкой лишних отверстий эпоксидным клеем и установкой единого разъёма для связи с внешним миром. Собственно конструкция:
Спидометр/одометр на ИН14
и разъём:
Спидометр/одометр на ИН14
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.
Спидометр/одометр на ИН14
4. Питание. Спидометру для хранения времени постоянное питание от аккумулятора и для работы — напряжение, подающиеся при включении зажигания. Последним питается DC-DC преобразователь и дешифратор для ИН14, расширитель портов. При отсутствии напряжения зажигания — устройство переводится в режим хранения. Если ключ зажигания включен — запускается индикация, из разрешаются прерываниия от датчика скорости. При выключении зажигания — показания одометров записываются в энергонезависимую память микроконтроллера.
5. Управление Для установки часов, сброса показаний одометров (их два, кроме основного счётчика пробега) применён энкодер с кнопкой (картинку честно спёр в сети. свой энкодер уже залит термоклеем для гидроизоляции):
Спидометр/одометр на ИН14
6. Логические уровни slave-ов i2c. Так как часы ds1307 питаются от 5В, а микроконтроллер и расширитель портов от 3.3В — подтягивающие резисторы шины i2c подключены к 3.3В. По даташиту для ds1307 напряжение логической единицы — 2.2В, то 3.3В будут вполне в штатным.
7. Watchdog В системе используется аппаратный i2c интерфейс, во время ожидания отправки/приёма байта процессор «спит». В случае сбоя/отключения зажигания в это время — микроконтроллер может не дождаться ответа slave-а и остаться в «спящем» режиме. Для исключения подобных зависаний используется аппаратный watchdog микроконтроллера. В основном цикле watchdog постоянно сбрасывается. В случае зависания — основной цикл останавливается и watchdog переполняется, посылая микроконтроллеру reset. Для определения характера reset (power on или watchdog) в программу введена переменная, не инициализируюемая при сбросе (#pragma NOINIT). Если она равна известному значению — был сброс по watchdog.
8. Калибровка В принципе калибровку можно сделать уже в бою, например, ехать с определённой скоростью по gps. Набрав, например, 30 км/ч — нажать на капу, и спидометр запомнит измеренную частоту импульсов, соответствующую 30 км/ч. Но на задней стенке была интересная надпись:
Спидометр/одометр на ИН14
Таким образом 10 импульсов датчика скорости будут соответствовать одному метру, пройденного автомобилем. Если будут значительные отличия по факту — внесу нужные коррективы.
9. Виброустойчивость. Прибор предназначен для эксплуатации в сложных с точки зрения вибрации условиях. В Интернетах не нашёл информации про виброустойчивость ИН14. Время, как говорится, покажет. Электрические соединения сделаны старым добрым МГТФ-ом. После проверки модулей — они были залиты эпоксидным клеем. Кстати нашёл в fixprice вполне себе клей в формфакторе двойных шприцов.
Вот элементы конструкции:Спидометр/одометр на ИН14
Спидометр/одометр на ИН14
Спидометр/одометр на ИН14
Спидометр/одометр на ИН14

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