Приветствую, Хабр! Все началось с того, что у меня на автомобиле (Kia Sportage 2) не работает ABS. Как-то давным-давно я приобрел Wi-Fi сканер, который умеет читать ошибки по CAN. Как оказалось, для диагностики ABS/ESP необходима работа с K-Line. И это еще не все…
Самое простое, естественно — это поехать в сервис автодиагностики. Но это не для меня. Я хочу иметь диагностический кабель
Почитав в интернете ворох информации о способах чтения ошибок по OBDII, пришел к выводу, что мне нужен кабель под названием VAG-KKL или какой-то его аналог. Цена за него варьируется от 300 рублей до пары тысяч. В чем, интересно, разница? Погуглив еще немного, я убедился, что отличия все-таки есть и касаются они схемотехники.
Рис.1. Отличия схемотехники диагностических кабелей.
И это еще не весь зоопарк устройств (я не беру в расчет профессиональные сканеры). Основное отличие — это использование микросхемы преобразования USB-UART. Могут использоваться, например, FT232 либо CH340 (наверное, всем известные преобразователи интерфейсов). Некоторые производители ставят кварц на FTDI и пишут, что это основное отличие и без него работать не будет. Дальше следует физика K-Line. Тут, думаю, менее существенно, но все же есть варианты. Например, компаратор LM339/LM393 либо полноценный драйвер MC33199 (или другой).
Как из этого всего выбрать то, что мне нужно? Пошел от обратного. Пока рыскал в поисках информации о шнурке, наткнулся на различные программы для диагностики. Разные программы работают, внимание (!), с разными переходниками. А всего-то хотел ошибки ABS почитать.
Нашел связку: программа CASCADE + шнурок на FT232 + любая физика. Если данное приложение использовать с преобразователем CH340 (или другим), оно работать откажется. Тут мне пришло в голову, что идея с сервисом была здравой, ну да ладно. Нравится мне все усложнять.
Вспомнил, что в одном из проектов я уже использовал микросхемы K-Line и L-Line. Эти интерфейсы используются для обмена данными с блоками автомобиля на основе протокола ISO9141. Отыскал плату давно забытого проекта и нашел на ней впаянный драйвер E-L9637D. Ну и завертелось…
Все для того же проекта много лет назад были приобретены диагностические разъемы OBDII. Напомню, что данный коннектор используется в автомобиле для диагностических (и других) целей. Он имеет 16 контактов и содержит в себе такие выводы, как CAN, J1850, K-Line, L-Line и питание (но бывают варианты).
Рис.2. Разъем OBDII.
Вот такой набор «сделай сам». Выбираем необходимый нам интерфейс обмена данными, земля, питание. Устанавливаем штыри в разъем (их в комплекте 10, видимо все 16 класть очень дорого). Конструкция, на самом деле, довольно удобная. На фото ниже я указал выводы OBDII, которые мне нужно задействовать.
Рис.3. Сборка разъема OBDII.
«Оденьте крышку», ну да ладно. Так как я остановился на программе CASCADE, то в разработке буду использовать преобразователь уровней FT232 и ранее найденный драйвер. В результате некоторых изысканий получилась следующая схема.
Рис.4. Схема диагностического кабеля OBDII.
Тут я совместил различные вариации схем, найденных на просторах интернета. На всякий случай установил кварцевый резонатор для FT232 (который пока паять не буду) и использовал один и тот же преобразователь в разных корпусах (QFN32 и SSOP-28) — какой быстрее найду, тот и запаяю. Добавил несколько светодиодов для отслеживания данных и наличия входного питания. Для диагностики ABS мне нужен только K-Line, но я решил оставить и L-Line, так как он есть в E-L9637D.
Рис.5. Печатная плата в Altium.
Печатная плата довольно простая (микросхема в корпусе SSOP-28 установлена с обратной стороны платы), так что тут заострять внимание не буду. После сборки платы последовала незамедлительная диагностика.
Рис.6. Установленный диагностический кабель.
И ничего… Светодиод питания горит, при опросе автомобиля программой моргают еще два светодиода. Данные с линии не читаются.
Что же, открываю документацию по распиновке диагностического разъема для моего автомобиля.
Рис.7. Распиновка разъема OBDII (нумерация зеркальна, видимо со стороны проводов).
Очень интересно. Корейцы (а может и не только они так делают) разделили диагностику некоторых блоков по разным K-Line. Пока искал информацию по шнуркам, совершенно не подумал о распиновке разъема на авто. Вывод под номером 8 как раз тот, что мне нужен (1 вывод на рис.7). Оказывается, в спецификации OBDII некоторые выводы обозначены как незадействованные и могут использоваться производителем на свое усмотрение.
Плату перезаказывать уже не хочется, поэтому термоклей в помощь. На схеме (рис.4) видно, что все выводы диагностического разъема я подключил через резисторы 0R (как чувствовал). Почитал информацию на форумах: оказывается, покупая шнурок, многие сразу его разбирают и замыкают линии 7, 8, 12 и 15.
Рис.8. Добавление переключателя на L-LINE.
Замыкаю линии 7, 8, 12. Выпаиваю резистор с вывода 15 и ставлю переключатель, чтобы реализовать возможность подключения L-Line (у меня его нет) к K-Line. Кстати, 8 контакт OBDII даже не выведен в штыревую линейку на плате-переходнике от производителя разъема.
Рис.9. Схема подключения переключателя.
Рис.10. Переключатель на плате.
Отлично, теперь у меня есть универсальное решение. Жаль до разработки схемы не обратил внимание на незадействованные выводы и их возможное применение.
Снова подключаем к автомобилю и проверяем. Соединение происходит не с первого раза — нужно ловить момент, когда включать зажигание (нужно еще поиграться со схемой). Вот и долгожданный результат.
Рис.11. Ошибка C1200 ABS.
Полную расшифровку ошибки я нашел в интернете, но и так уже было понятно по описанию, что проблема с датчиком переднего левого колеса (обрыв или короткое замыкание).
Во время всех этих манипуляций пожалел, что по привычке установил разъем microUSB. Думаю, что Type-C был бы удобнее.
Спасибо за внимание и успехов!