Як можна зрозуміти з назви запису, мені захотілося встановити красивий шкіряний руль із кнопочками замість дефолтного гумового в мій Rapid комплектації Active з BCM 6C0937087D на борту. Проблема поточної конфігурації полягає в тому, що в цьому BCM відсутній пін 13 колодки T73c, який відповідає за підключення LIN-шини блоку кнопок MFSW. Найпростішим (і правильним) варіантом тут був би апдейт BCM до 6C0937089(6C0937189) або 6C0937090(6C0937190), однак і тут є свої складнощі:
Забагато витрат виходить заради кнопочок, правда? Значить, час подумати про альтернативу. Але перед цим трохи теорії.
Як працюють кнопочки на кермі?
Як ми знаємо зі статті про шини даних у PQ26, кнопки керма підключаються по шині LIN у режимі слейва до майстра-BCM. Майстер із високою частотою опитує блок кнопок "віддай мені поточний статус", після отримання відповіді інтерпретує її та віддає відповідну команду по шині CAN комфорт, яку "ловлять" споживачі — магнітофон або приладова панель.
Розумною альтернативою апгрейду BCM мені здалося виготовлення (або купівля) контролера, який би виконував роль BCM у цій конфігурації. Для цього його потрібно було б "врізати" в CAN комфорт і підключити по LIN до блоку кнопок у ролі майстра. При пошуку вже готових рішень знайшовся популярний контролер "YAM" авторства YAM1966. Зв'язався з Юрієм і уточнив, чи реально використати його контролер для мого завдання, на що отримав ствердну відповідь, однак виникла проблема — Юрій повідомив, що в нього немає CAN-команд для PQ26/MQB, тому мені потрібно їх десь знайти самостійно.
Після нетривалих пошуків натрапив на запис, де автор грався з CAN-шиною свого Гольфа, і на моє прохання він скинув усі свої напрацювання з цієї теми, а я, своєю чергою, переслав їх Юрію, щоб він додав команди звідти до свого софту.
Замовляю контролер і приблизно через тиждень отримую його в Польщі. Виглядає він так:
І отримую від Юрія схему підключення до машини для мого випадку:
Паралельно з цим до мене доїжджає кермо (не першої свіжості) від Октавії з місцевої розборки, який мені вдалося купити за ~50 євро:
Пробую зібрати все це докупи на столі, живлячи контролер і блок кнопок від свого улюбленого БЖ Baseus 65w через PD trigger, що виставлений на 12V:
Підключаюся до жовтого роз'єму "улитки" за цією схемою:
І отримую перший результат:
Відмінно, значить, контролер успішно спілкується з кермом. Тепер потрібно його "подружити" зі споживачами — ГУ та приладовою панеллю. Після повторного пошуку в мережі CAN-команд рульового колеса PQ26 знайшов статтю Мирослава зі Словаччини, де він вивчив, як змінюються дані в CAN-шині при натисканні на кожну кнопку. Ось як це виглядає:
Також тут знайшов пояснення, від чого залежать значення байта 3 (тривалість):
"how long": 0x1 — <0,8сек; 0x4 — 0,8…2сек; 0x5 — 2…3сек; 0x6 — >3сек
Усю цю інформацію я надіслав Юрію, і він оперативно додав цей функціонал до програми налаштування контролера та його прошивки.
Тепер час перевірити весь цей сетап у машині. "Врізався" в CAN шину в кабелі-сплітері для камери, оскільки бажання різати рідну проводку не знайшлося:
Ну і фінальний тест у машині:
Тест показав, що всі кнопки керма, які мають працювати — працюють. Успішно керується бортовик у приладовій панелі та радіо. Працюють виклик голосового помічника при тривалому натисканні на кнопку VOICE, крутилка гучності, PREV/NEXT, SRC, MUTE, OK тощо.
Також у налаштуваннях контролера створив нову подію — увімкнення підсвічування кнопок при довгому натисканні на кнопку AUTO. Заявляється, що контролер вміє зчитувати стан світла з CAN, але щоб не навантажувати систему скануванням CAN, я зупинився поки що на варіанті з кнопкою.
Продовжити я вирішив із заміни керма — тут усе стандартно. Знімаємо клему "-", скидаємо подушку, знімаємо жовтий роз'єм подушки (попередньо підчепивши викруткою білий язичок на ній), відкручуємо болт керма біткою Spline M12 через подовжувач і динамометричну насадку (щоб виміряти зусилля, з яким воно було закручене — виявилося 42 Н/м).
Потім встановлюємо кермо у зворотному до зняття порядку та затягуємо болт зусиллям 30 Н·м + доворот 90 градусів. Я погано читав мануал і прогледів, що після кожного зняття гвинт необхідно замінювати, тому доведеться купити новий гвинт і замінити його трохи пізніше.
Далі почалася цікава частина — вмикати підсвічування кнопок керма з однієї з кнопок мені швидко набридло, тому захотілося, щоб воно вмикалося автоматично, разом із усіма іншими кнопками. Для цього я просканував CAN шину за допомогою нового контролера YAM і знайшов команди, які відповідають за регулювання яскравості (це те, що робить ГУ з меню "Light"), та команду, яка відображає поточний статус підсвічування:
1. Регулювання яскравості
17330800, довжина 5 байт, перший байт — це HEX значення відсотка ліміту яскравості, наприклад
22 15 01 3С 00, тут 22 — це HEX-репрезентація decimal-значення 34, тобто ліміт — 34%.
2. Статус підсвічування
5F0, довжина 8 байт, перший байт — ліміт яскравості (з п.1), другий — поточна яскравість приладів [0, 255], наприклад
29 A6 26 00 00 7E 00 00, тут A6 — 166, це поточна яскравість.
Усю цю інфу я надіслав Юрію, і він на її основі реалізував автоматичне керування підсвічуванням блоку кнопок.
Далі виникли проблеми з колесиком гучності — при швидкому прокручуванні були пропуски у відправці команд. Тут виявилося, що блок кнопок віддає по LIN не лише 01 / 0F як одиночний прокрут залежно від напрямку руху, а й множинні прокрути також, наприклад:
При одиночному прокруті вниз блок віддає 0F, при швидкому — 0D, 0E.
При одиночному прокруті вгору — 01, при швидкому — 02, 03.
Цю інфу я також надіслав Юрію і оперативно отримав у відповідь патч, який покривав цю логіку.
Після цього залишалося лише сховати контролер у машині. Для цього я вибрав місце над блоком підігріву сидінь, оскільки мені потрібно було мати легкий доступ до контролера для його підключення до комп'ютера.
Контролер і блок кнопок керма підключив на різні запобіжники, щоб у разі раптового апгрейду BCM можна було привести всю цю систему до штатного стану за 15 хвилин, просто перекинувши провід LIN з контролера в BCM.
Всю проводку дбайливо вклав у мохнату ізоленту.
Результат:
Кілька кнопок залишилися незадіяними через відсутність на борту maxidot, тому доведеться придумати їм призначення трохи пізніше :)