Итак техническое задание:
- "удлиннение" поворотов до заданного количества (3-4).
- отмена удлинения при длительном удержании переключателя поворота (до первого выключения реле) или при переключении на другой поворот (мгновенно).
- "удлиннение" аварийки до общепринятой "спасибо" - 2 раза при кратковременном нажатии на кнопку аварийки.
- "спасибо" при кратковременном нажатии внешней (дополнительной) кнопки.
-
- включение аварийки при движении задним ходом (опция).
- возможность программирования параметров на машине без участия компьютера (не уверен, что буду реализовывать).
Для реализации устройства я выбрал контроллер ATtiny13 как наиболее распространённый. На данный момент софт откатывается в ATmega8 и могу сказать что для программирования параметров на машине пока не хватает ресурсов тиньки, поэтому либо переход на ATtiny25-45, либо без программирования... Да и не придумал я пока как задавать параметры и какие вобще нуждаются в изменении. Поэтому первая версия устройства будет точно без этой функции.
Схема.
Схематическую реализацию я подсмотрел на одном известном ресурсе. Реализаций этого дэвайса очень много, но мне не нравилось во всех реализациях одно - реле в качестве шунтирующих устройств. Поэтому начал разработку своего устройства на полевых транзисторах. На данный момент схема выглядит вот так: Схема выглядит немного уродливо, но это "макет". Назначение выводов точно соответствует схеме на тини13, что упрощает разработку и отладку, так как для реализации функции аварийки при включении заднего хода пришлось задействовать вывод "Ресет" в качестве входа, что сильно затрудняет перепрограммирование устройства после программирования фьюза "RSTDISBL" Итоговая схема на тиньке выглядит вот так (изменённая): Как видно из схемы, в качестве шунтирующих устройств применены полевые транзисторы P-канальные IRF9310 (пока приобрёл IRF7425) в корпусе SO-8. Сразу отвечу на вопрос "хватит их?" - Да, хватает и ничего не греется, даже несмотря на отсутствие нормальных драйверов для управления затворами. Можно применить любые с током более 10А, при сопротивлении открытого транзистора менее 0,015 Ом.
Входные и выходные каскады решил для простоты схемы реализовать на сборке ULN2004 тоже в корпусе SO-16. Если вход заднего хода не планируется использовать, то обязательно вывод RESET тиньки отключить от ULN-ки. Иначе будут глюки.
Плата.
В итоге вся схема с разъёмом MF-2x03R влезла на плату размером 33*33мм, а без разъёма (просто контактные площадки) - 29*33мм. Довольно компактно. Плату сделал под две версии корпуса тиньки (шириной 150 mil и 200 mil), т.к. в китае продаётся большинство в узком корпусе, а на наших просторах в широком).
В формате Sprint-Layout v5.0 можно скачать во вложении. pcb.rar
Прошивка.
На данный момент (01.11.2015) реализованы почти все функции из техзадания, кроме последнего пункта. В меге8 это заняло 868 байт кода. Но ещё будет оптимизация и переход на тини13, там будет чуть компактнее, но всё равно боюсь, что функцию программирования впихнуть не получится. Будем посмотреть.
В ближайшее время хочу вытравить плату, а пока занят оптимизацией кода.
ЗЫ: вот так выглядит макет устройства (может быть кто-то вспомнит эту плату - макет круиз-контроля). В макете применено стандартное реле поворотов на U643B. Т.е. макет максимально приближён к реальности.
[upd 15.11.2015] первая публичная версия прошивки (v0.8) во вложении. В архиве 2 файла:
- turn_extender_v0.8_no_reverse.hex - без использования вывода Ресет, т.е. без функции заднего хода.
- turn_extender_v0.8_reverse.hex - требует установки фьюза "RSTDISBL"
Исходников пока не будет. Когда обкатается и уберутся все глюки, тогда и выложу. Устройство сегодня поселилось в машине - тестирую.
Фьюзы для версии без заднего хода (LOW: 0x79, HIGH 0xFF): Фьюзы для версии с использованием заднего хода (LOW: 0x79, HIGH 0xFE): Внимание, при установке фьюза "RSTDISBL" повторно запрограммировать контроллер без использования высоковольтного (HV) программатора не получится. Поэтому вначале прошиваем прошивку, а потом фьюзы.
На всякий случай ссылки на реаниматор тини13. раз и два.