Как известно, штатная магнитола Hyundai Solaris отличается посредственным звучанием, странными решениями, вроде отсутствия кнопки паузы, а на не самых дорогих комплектациях еще идет и без Bluetooth и hands-free. Возможность управления кнопками на рулевом колесе в свете вышеперечисленного смотрится довольно слабым утешением, поэтому замена на какое-нибудь другое ГУ выглядит вполне логичным шагом.
С предыдущего автомобиля у меня осталась магнитола Alpine CDE-133BT, умеющая работать беспроводной гарнитурой для телефона, поэтому вскоре она заняла положенное место на машине. От прочих техника Alpine отличается тем, что использует цифровой протокол для команд дистанционного управления, поэтому подключение к кнопкам на руле в данном случае не даст ничего вообще. Не желая отказываться от былого удобства, я обратился за информацией в Интернет и выяснил, что предприимчивые китайцы (и даже россияне) охотно выпускают переходники самых разнообразных форм и конструкций. Скорее всего, что-то подобное бы я и купил, но внимание мое привлекла вот эта тема, в которой добрый человек поделился с общественностью особенностями протокола ДУ Alpine и командами, которые по нему присылаются: https://web.archive.org/web/20160315045509/http://www.mp3car.com/forum/mp3car-technical-hardware/input-devices/134542-need-alpine-wired-remote-control-pinout. Загоревшись мыслью повторить идею автора, я приступил к собственной разработке.
Разъем дистанционного управления Alpine представляет собой обыкновенное 3,5-мм гнездо под трехполюсной штекер TRS. Первый контакт служит массой, последний передает сигналы от пульта.
Сам сигнал представляет собой последовательность импульсов амплитудой не менее 3 вольт, длительностью 500 микросекунд и таким же интервалом следования. Нормальный уровень сигнала, таким образом — низкий.
читать дальшеЛогическая единица кодируется наличием напряжения на данном периоде сигнала, нуль – его отсутствием. Непосредственно перед отправкой команды пульт сигнализирует о своих намерениях, выдавая на выход «1» на 8мс, за которой следует «0» еще на 4,5 мс, после чего начинается отправка самой команды.
Никакой синхронизации или чего-то подобного в протоколе нет: пульт просто передает пачку импульсов, никак не контролируя их получение. Интервал между сообщениями должен составлять не менее 41 мс. По наблюдениям автора, пульт продолжает непрерывно отправлять посылки, пока кнопка нажата, что говорит о том, что решение о повторе команды принимается уже логикой самого ГУ.
Полный список команд выглядит следующим образом:
Vol Up 110101111101101110101011110110111101011011010101 Vol Dn 110101111101101110101011011011011111011011010101 Mute 110101111101101110101011101011011110111011010101 Pst up 110101111101101110101011101010111110111101010101 Pst dn 110101111101101110101011010101011111111101010101 Source 110101111101101110101011101101111101101101010101 Trk up 110101111101101110101011101110111101101011010101 Trk dn 110101111101101110101011010111011111101011010101 Power 110101111101101110101011011101111110101101010101 Play 110101111101101110101011010101111111110101010101 Band 110101111101101110101011011010111111011101010101
Хорошо видно, что в сообщениях имеются повторяющиеся фрагменты в начале и в конце, которые для экономии места можно выписать отдельно, после чего сами команды приобретут такой вид:
(START) 110101111101101110101011 Vol Up 11011011110101101 Vol Dn 01101101111101101 Mute 10101101111011101 Pst up 10101011111011110 Pst dn 01010101111111110 Source 10110111110110110 Trk up 10111011110110101 Trk dn 01011101111110101 Power 01110111111010110 Play 01010111111111010 Band 01101011111101110 (END) 1010101
С цифровой частью системы, таким образом, было все понятно сразу, а вот второй контакт разъема привлек мое внимание тем, что магнитола всегда подавала на него 5 вольт, даже находясь в режиме Standby, что логично, учитывая наличие в наборе команды на включение/выключение. Надежды, что его можно будет использовать для питания планируемого переходника, к сожалению, не оправдались, поскольку любые попытки нагрузить эту линию приводили к катастрофическому проседанию напряжения, даже при токах порядка 15-20 мА. Очевидно, в фирменных пультах этот контакт используется просто как сигнал, что магнитола включена, и подтягивается ею к линии питания через высокоомный резистор. Может быть, этот контакт задает уровень логической единицы, а в самом пульте, таким образом, установлен простой ключ, подающий это напряжение на выход, но эти особенности меня уже интересовали мало.
Оборудование для реализации выбиралось из принципа «что есть под рукой», чтобы не создавать себе лишних сложностей. Макетирование и разработку программы было решено сделать с помощью отладочной платы Lauchpad от Texas Instruments, поскольку опыт программирования для MSP430 у меня на тот момент был больше, а возможности отладки у Launchpad — намного шире, поскольку там уже есть встроенный аппаратный отладчик.
Рабочий прототип устройства должен был быть реализован на ATMega 328P, поскольку, во-первых, MSP430 требует напряжения питания не выше 3,33В, а во-вторых, в наличии у меня было аж три штуки китайских клонов Arduino Pro Mini, купленных для экспериментов в незапамятные времена. Перенести уже разработанную программу на AVR казалось мне вполне посильной задачей. Опасения, что уровень сигналов для магнитолы будет слишком низкий, не оправдались — в ходе разработки она спокойно воспринимала импульсы амплитудой и 3,33 В. Прототип состоит из отдельного понижающего импульсного преобразователя напряжения и небольшой дочерней платы, в которую включается Arduino. На плате разводилась вся дополнительная обвязка вроде подтягивающих и защитных резисторов, источника опорного напряжения для встроенного компаратора микроконтроллера и т.д. Все соединения выполнены на разъемах, чтобы облегчить процесс отладки, в том числе и с проводкой автомобиля. Конструкция прячется в корпус из-под модуля обходчика иммобилайзера от какой-то автосигнализации. На всякий случай, цепь защищена предохранителем номиналом 500 мА.
Поскольку кнопок на руле только шесть, а функций у дистанционного управления может быть больше, я еще на этапе написания программы решил, что система должна уметь различать короткое и длительное нажатие на кнопку, при этом отправляя разные команды. Исключение сделано только для регулировки громкости — здесь команда просто начинает после небольшой задержки повторяться до тех пор, пока кнопку не отпустят. Остальные же клавиши я настроил следующим образом:
Таким образом, не отрывая рук от руля, можно переключаться между файлами и каталогами на носителе или запомненными станциями приемника — практика показала, что это очень удобно. К сожалению, для изменения конфигурации пока что требуется перепрошивка устройства.
Испытания прототипа пока продолжаются, чтобы посмотреть, как ведет себя электроника в автомобильных условиях эксплуатации. Окончательное устройство планируется сделать куда менее габаритным и на одной плате с уже интегрированным блоком питания. Возможности ATMega для подобного применения также явно избыточны, поэтому можно будет поставить аналогичный МК в корпусе поменьше. Текущая версия прошивки занимает ~1300 байт флэша и умещается при работе в 42 байта ОЗУ — в основном из-за хранения в ней структуры с конфигурацией.