Citroen C5 (2G) (Малий)

Android: Нова плата для кастомного CAN адаптера

Я їжджу на Citroen C5 (2G)
Львів, Україна

Корок за кроком рішення таки склалось в щось, що, нарешті, не соромно показати. Дуже надіюсь, що це фінальна версія і більше про це писати не доведеться.

Хронологія:

Нова плата


Кілька ітерацій розробки модуля за допомогою пайки монтажними кабелями, мали багато недоліків починаючи з складності, завершуючи надійністю. Тому, як логічний результат, я таки прийшов до створення власної плати.


Плата


схема плати


Виглядає чудово!

Проте я допустив кілька помилок:

  • діоди UART модуля мають іншу полярність ніж потрібно
  • пін DTR взагалі не потрібно було розводити
  • спільна земля UART модуля з andrioid системою

Рішення:

  • перепаяти діоди в зворотній полярності ніж на схемі
  • коли немає живлення UART модуля, пін DTR підтягується до землі, що трігерить ресет плати arduino, що унеможливлює її запуск. Вирішилось випаюванням конденсатора C3 з плати, а прошити плату можна натисканням на кнопку. 
  • я хотів відмежувати UART модуль від живлення плати діодами і в мене це вдалось, проте я зовсім пропустив той момент, що через USB кабель підключення до магнітоли буде спільна земля - фіаско. Тому при підключенні до USB плата жере близько 40 мА в режимі очікування, що зовсім не ок. Довелось модифікувати сам кабель, щоб розривати петлю коли зникає живлення USB від магнітоли:

Плата в розриві кабеля USB

Або підключити плату до Android, налаштувати і відключити кабель. Не знаю чи буду виправляти ці недоліки в майбутній ревізії плати.

Сама плата спроектована таким чином, щоб використати готові модулі Arduino pro min, UART модуля на мікросхемі CP2102 та перенести всі елементи з обох готових CAN модулів з невеликим додаванням елементів:


додаткові елементи


Щоправда, я додатково замінив танталові (жовті) конденсатори на керамічні 10uF.

Результат:


готова плата


Прошу звернути увагу, що з плати Arduino я скинув елементи, які не будуть використовуватись включно з конденсатором C3, який відповідає за під'єднання до піна DTR. Причину описав трішки вище.

Варто додати розшифрування пінів колодки:


розпіновка колодки


Піни 10/9 поки не використовуються, це відгалуження від проводів RX/TX якими магнітола обмінюється даними з стандартним CAN модулем. Для майбутніх експериментів.


Далі розпаяв колодку і врізав її в шлейф проводів.


підключення плати


Для прошивки потрібно взяти скетч отут citroen can transceiver.


Зміни в програмні частині


Об'єкт конфігурації.



Весь цей об'єкт записується в EEPROM плати arduino, при внесені зміни в структуру (не значень, а саме в структуру) цього налаштування потрібно не забути змінити номер версії конфіга.


Потенціометр для емуляції натискання кнопок.

Виділені червоним стовпці це "тапи" потенціометра MCP41100 для генерації опору. Перша цифра це тап для короткого натискання, друга - для довгого. Номери тапів обрано не довільно, а на основі мого невеликого дослідження:


Команди через Serial термінал.

При підключені через Serial потрібно встановити baud rate 38400. За допомогою команд можна отримати чи передати і зберегти нові налаштування. Для отримання поточних налаштувань використовується команда get config:



Що воно таке? Сам рядок конфігурації складається з трьох частин: {id};{data};{checksum}. checksum це сума числових номерів символів по ASCII таблиці з частини data і використовується для верифікації чи отриманий рядок прийшов без битих символів.

  • 0x1e5;0x3f 0x3f 0x42 0x3f 0x44 0x40 0x40;2233 - налаштування CAN пакета підсилювача
  • 0x000;1 29 5;273 - налаштування принципу регулювання гучності підсилювача (перше число 0/1 - чи використовувати динамічну гучність, друге 0-30 - максимальна гучність підсилювача, третє 0-30 - мінімальна гучність підсилювача). Якщо перше число 0, то достатньо встановити друге число на потрібний рівень гучності, третє можна поставити щось довільне
  • 0x001;1752 88;351 - налаштування перехоплення кнопок. Перше число це сума кнопок (виділено зеленим на скріні об'єкта конфігурації) які хочемо перехоплювати для одинарного натискання, друге це сума кнопок, які хочемо перехоплювати для довгого натискання.

Якщо не збираєтесь використовувати аплікацію для налаштувань, або маєте з нею є проблеми, а налаштувати потрібно, то верифікацію по checksum можна вимкнути, видаливши перевірку:



Таким чином ручні налаштування можна буде робити значно простіше. Щоб передати налаштування просто візьміть отриманий рядок, який вас цікавить, внесіть зміни і відправте його знову в термінал. Arduino повинно застосувати налаштування моментально. Перевірити можна викликавши get config ще раз. Якщо налаштування влаштовують, то відправте в термінал save config аби поточні налаштування записались в пам'ять arduino. В цьому випадку плата повинна написати в термінал config saved.


Налаштування через аплікацію


В перших ітераціях налаштування проводилось рубками через Serial термінал з використанням ноутбука як я описав вище. Час йшов і на світ з'явилась аплікація для android, за допомогою якої можна змінювати налаштування напряму з планшета:


Головний екран налаштувань


Тут ніби все досить наглядно, єдине, що може бути не зовсім зрозуміло, це галочка "Use dynamic volume". Згоден, що назва не надто зрозуміла але суть така: в кан боксах XP є можливість прокидання вибраного рівня гучності з магнітоли в кан шину, а значить, що можна динамічно змінювати гучність на самому підсилювачі, а не тримати фіксовану гучність. І воно справді працює добре, єдине, що довелось додати можливість не опускати гучність нижче певного мінімуму і не підіймати вище певного максимуму.


Галочка Debug відкриває невеличке вікно з пакетами, якими обмінюються пристрої:


Debug режим


Ну і кнопочка налаштування кнопок керма:


Налаштування кнопок керма


Суть в тому, що при натисканні галочки навпроти відповідної кнопки вмикається перехоплювання CAN пакета з інформацією про дану кнопку, коли кнопка натиснута, то біт в пакеті підміняється на 0, натомість плата генерує опір по підключенню до KEY магнітоли. Тобто генерується аналоговий сигнал замість цифрового. Далі цю кнопку можна замапити в меню налаштувань кнопок керма самої android системи.

Налаштування застосовуються в реальному часі, проте щоб записати їх в пам'ять arduino потрібно натиснути кнопку Save config. Тоді після втрати живлення налаштування збережуться.


Аплікація лежить за тим же посиланням: citroen can transceiver.


Якось так.

Пробіг 268000 км.
Опубліковано: 12 березня 00:33
2 0 2

Коментарі

Щоб залишати коментарі, потрібно авторизуватись.
Без коліс :(
Крута робота, детально розписано
12 березня 18:17
Я їжджу на Citroen C5 (2G)
colins777
Крута робота, детально розписано
colins777, дякую! трохи не так детально як хотілось би, але, думаю, якщо комусь буде потрібно зробити щось подібне, то цей запис мав би дати трохи інформації для початку.
1
12 березня 20:48