Датчик парктроника схема электрическая
Схема работает по принципу сонара. Ультразвуковой передатчик посылает импульсы, а приемник регистрирует их, если они отразятся от препятствий или преград. Генератор ультразвуковых импульсов, выполнен на элементах микросхемы К561ТЛ2 или ее аналоге. Генератор генерирует частоту около 40 кГц, но ее можно регулировать сопротивлением R14. Питание схемы парктроника происходит от бортовой сети автомобиля от аккумуляторной батареи, через стабилизатор.
Каждый новый импульс на передатчике TX генерируется каждый раз, когда десятичный счетчик К561ИЕ8 находится в состоянии сброса выход Q0. Другие выходы используются для визуализации расстояния от радара до преграды. Отраженный от другого автомобиля или бордюра сигнал улавливается приемником RX и усиливается транзисторами VT1-VT4 и временно переключает триггер на элементах DD1.1 и DD1.2 останавливая работу счетчика. На светодиодном индикаторе загорается соответствующий светодиод, говорящий расстояние до преграды. О самом большом расстояние говорит светодиод HL9, а о минимальном светодиод HL1 и при этом еще заработает звуковая сигнализация.
Регулировкой сопротивления R14 добиваются лучшей чувствительности с частотой около 40 кГц. Настройкой резистора R15 можно задать диапазон между светодиодами. Советую использовать максимальный диапазон на 90 см — по 10 см для каждого светодиода.
Схема парктроника состоит из таймера на микросборке NE555 (отечественный аналог КР1006ВИ1)к выходу которого подключен излучающий светодиод HL1; приёмного фотодиода HL2 с ОУ и детектором; трёх компараторов. Операционный усилитель и компараторы собраны на одной микросхеме LM324 (К1401УД2). Выходная световая сигнализация выполнена на светодиодах HL3-5, звуковое оповещение о препятствие выполнено на таймере LN555 и звуковом динамике Z1. Для стабилизации питания схемы использован стабилизатор напряжения на 15 вольт и конденсатор С5.
Работа схемы: Таймер 555 создает последовательность прямоугольных импульсов, частота следования которых задается цепочкой пассивных компонентов R1, R2, C1 и равна в данной случае 120 Гц. Излучающий инфракрасный светодиод HL1 постоянно посылает эти импульсы на препятствие перед автомобилем. Инфракрасный луч, отражается от них и попадает в приемник на фотодиоде HL2. С фотодиода HL2 сигнал следует на операционный усилитель.
Усиленный сигнал детектируется диодами D2-3 и идет на компаратор, собранный на трех ОУ. Напряжение на входах компараторов прямо пропорционально расстоянию до преграды. Делитель напряжения, собранный на сопротивлениях R7–R10 задает необходимый порог срабатывания компараторов. Через диоды D4–D5 и сопротивления R15–R17 сигнал с компараторов проходит на таймер VD3. К третьему выходу таймера подсоединен звуковой пьезоэлемент Z1 типа Зп-22. При расстоянии до преграды около 30см начинает светится первый светодиод и начинают звучать редкие звуковые сигналы - 1-2 раза в секунду. При расстоянии около 15 см - светится второй светодиод и слышны более частые 3-4 раза в секунду звуковые команды. При расстоянии в 7 см и менее– светится последний светодиод и слышны частые звуковые сигналы. Приведенные расстояния можно отрегулировать в зависимости от использованных в конструкции типов инфракрасных компонентов.
Схема парковочного радара выполнена на печатной плате. Инфракрасные фото и светодиоды можно взять почти любые, но обязательно разделить светонепроницаемой трубкой. Также требуется продумать защиту от солнечной засветки. Устанавливать излучающий и приёмный компоненты можно впереди или сзади транспортного средства.
Данная радиолюбительская разработка, это еще одна попытка создать простой парковочный датчик своими руками, сигнализирующего о приближении транспортного средства к препятствию. В схеме применяется отраженный ИК-луч, точнее инфракрасный светодиод излучает вспышки с частотой следования 5-6 кГц.
ИК светодиод должен быть направлен в сторону вероятного препятствия. Излученный им свет отражается от препятствия и принимается фотодиодом, на котором генерируется переменное напряжение с частотой идущих вспышек. Сила светового потока, попадающего на фотодиод прямо пропорционально расстоянию до преграды. Поэтому, чем она ближе, тем выше значение этого переменного напряжения. Схема представляет собой типовой двух каскадный усилитель переменного тока и индикатор уровня переменного напряжения на микросборке AN6884.
Индикация реализована на пяти светодиодах, чем больше их светится, тем ближе препятствие. Регулировкой подстроечного потенциометра на выходе фотодиода можно настраивать чувствительность приемного тракта, т.е дальность действия и индикации, чтобы получить наилучший результат.
Генератор ИК-импульсов состоит из ИК-светодиода, транзисторного токового ключа VT3-VT4 и генератора импульсов на двух элементах микросборки D1. В роли D1 подойдет любая КМОП микросборка, у которой имеется как минимум два инвертора. Импульсы с генератора следует на транзисторный ключ, который осуществляет коммутацию ток протекающего через ИК-светодиод.
Принимает отраженные вспышки фотодиод FD1. Эго можно позаимствовать от ПДУ старых телевизоров. Кроме ИК-света фотодиод фиксирует и солнечный свет, поэтому, чтобы отделить от них нужный сигнал применяется схема, в которой фотодиод включен как фоторезистор, через который протекает некоторый ток через R1. Напряжение в точке соединения R1-FD1 обладает постоянной составляющей, которая зависит от резистора R1 и солнечного излучения.
Затем, сигнал попадает на усилительный каскад на биполярных транзисторах VT1 и VT2, по схеме с ОЭ. Переменный резистор чувствительности R7 включен на входе усилителя, чтобы защитить усилитель от возможной перегрузки.
Степень близости к преграде оценивают по величине переменного напряжения на коллекторе биполярного транзистора VT2. Измеритель этого напряжения собран на микросборке AN6884 по типовой схеме. Чем выше уровень переменного напряжения, следует на восьмой вывод, тем большее горит светодиодов HL1-HL5.
Фотодиод и ИК-светодиод должны быть расположены в одной плоскости и ориентированы в одну сторону (не друг на друга, а на преграду). Расстояние между ними где то 30 мм. Между ними должна быть смонтирована непрозрачная перегородка, блокирующая попадание прямого света от HL6 на HD1. Сверху рекомендуется сделать подобный непрозрачный козырек, понижающий в разы количество солнечного света, идущего на датчик.
ИК-датчик способен заметить препятствие на расстоянии до одного метра, при обнаружении он посылает импульсную посылку на детектор тонального сигнала, который запускает таймер типа LM555 генерирующий ШИМ-сигнала для пьезозуммера. По звуку этого зуммера водитель ориентируется, на каком расстоянии от транспортного средства имеется препятствие.
В роли ИК датчика в данном случае служат два ИК-светодиода LED1 и LED2 и фототранзистор Q1. Светодиоды создают луч, который при его отражении от препятствия идет на фототранзистор, тем самым, открывая его. Выходной сигнал с транзистора следует с частотой 20 КГц, поэтому мы используем детектор тонального сигнала LM567. Микросхема способна интерпретировать частоту, генерируемую другим элементом, и дать выходной сигнал в соответствии с текущим приложением. Поэтому, LM567 генерирует подходящий сигнал для запуска таймера на LM555, который собран по схеме нестабильного мультивибратора. Выходной сигнал таймера следует на светодиод для рабочей индикации и на пьезозуммер для звуковой сигнализации о наличии препятствия, а также идет через транзистор Q3 на лампу DS1 для световой сигнализации обнаружения преграды.
Собранная радиолюбительская конструкция легко встраивается в задний бампер автомобиля с заранее изготовленными отверстиями для светодиодов и фототранзистора ИК датчика. Пьезозуммер и лампа индикации монтируются в приборной панели перед глазами у водителя.
Этот или подобные вопросы задаются на автомобильных форумах, и не редко. Кто спрашивает? Спрашивают неугомонные мастера, которым доставляет удовольствие постоянно проводить тюнинг своего автомобиля. Если вы имеете понятие об основах электроники, умеете отличать резистор от транзистора, пользоваться паяльником, и вам это доставляет удовольствие, то сделать парктроник своими руками для вас не проблема.
Схема традиционного парктроника
Но, вначале давайте поймем суть вопроса. Парковочные устройства или парктроники являются хорошими помощниками для автовладельцев особенно в суматошно-смятых условиях городского движения и парковки. Без сомнений, при помощи парктроника намного облегчается процесс парковки. Но, не следует забывать, что парковочный радар – это не панацея, и тем более, в случае ЧП, объяснения о том, что у вас вышел из строя парктроник не помогут.
Именно поэтому к выбору парктроника, а тем более, если вы решили изготовить парктроник своими руками, нужно относиться очень и очень внимательно. Помимо подбора всех элементов, которые включает в себя схема парктроника, нужно обязательно учесть конструктивную особенность вашего авто. Речь идет о бамперах, куда, собственно, вы и будете устанавливать датчики или видеокамеры. Чтобы не оказалось после установки датчиков, что они «видят» только асфальт или только небо.
- Врезной датчик – от 2-х до 8-ми. Естественно, чем больше датчиков, тем больший захват площади.
- Индикатор расстояния: с одной шкалой, ЖК-индикатор, с двумя шкалами и т.д. Вплоть до вывода видеосигнала на лобовое стекло. Прогресс – он неумолимо движется вперед.
- Электронный блок управления всей этой системой.
Если речь идет о самом элементарном устройстве, коим и может стать ваш самодельный парктроник, то 2-3-х датчиков вполне достаточно для схемы парктроника.
Если вы собираетесь изготовить парктроник своими руками, то должны понимать, что все комплектующие для него должны быть только высокого качества. А схема парктроника собрана идеально. Отказывают или дают сбои даже самые продвинутые парктроники, но этот факт никоим образом не освобождает водителя от ответственности в случае ДТП.
Комплектующие для сборки самодельного парктроника
На примере опыта одного из «кулибиных» мы покажем, что нужно, чтобы собрать самодельный парктроник. Более подробные схемы парктроника можно найти на соответствующих радиоэлектронных ресурсах сети.
Итак, комплект самодельного парктроника:
- Контроллер Arduino Duemilanove – это и есть та самая аппаратная вычислительная платформа, по сути – мозг вашего самодельного парктроника.
- Ультразвуковые сонары (датчики) расстояния: Ultrasonic Range Finder
- Пластиковый корпус (бокс)
- Макетная плата
- Светодиод, желательно трёхцветный
- Провода, соответствующие длине прокладки
- Источник питания – АКБ 9В
Сборка самодельного парктроника
Плату контроллера устанавливаете в пластиковый корпус на силикон или клей, затем запитываете контроллер и ультразвуковой датчик. Определив, какие выводы светодиодов отвечают за какой цвет, присоединяете их к соответствующим выводам контроллера.
Настройку программы контроллера производите в соответствие с его инструкцией, увеличив или уменьшив сигнал посылок к датчику. Установку парктроника на автомобиль производите исходя из его конструктива. Датчики следует устанавливать с минимальной «мертвой зоной». Прежде, чем применить свой самодельный парктроник, проведите тестирование, и не одно.
Если вы уверены в своих знаниях и умении собрать парктроник своими руками, то делайте это. Если нет, то проще купить заводской парктроник, и установить его на авто самостоятельно. Безопасность автомобиля, как своего, так и чужого, дело ответственное. Взвесьте все «за» и «против».
Удачи вам в изготовлении парктроника своими руками.
Итак, в один прекрасный день, ныне они выдаются все больше солнечные, Вы садитесь в свой автомобиль, включаете зажигание, и вдруг видите это неприятное сообщение
Не пугайтесь, это все го лишь означает, что у Вас присутствует нарушение в системе работы помощи при парковке. Давайте разбираться, что это за система, как она функционирует, и из каких узлов состоит.
Вот электрическая схема на авто, указанное в начале поста
Вам не нужно точно понимать всю суть, поскольку Вы не обязаны быть электриком, только потому что являетесь автовладельцем. Вам нужно уяснить одно — в данной системе предметом неисправности могут служить следующие элементы
1. Блок REM — задний электронный модуль
2. Блок PAM — непосредственно блок парктроника
3. Датчики парковки, их может быть четыре или восемь(если есть еще датчики спереди), и выход из строя любого из них повлечет за собой сбой ВСЕЙ системы
4. Провода, по которым подается питание, и происходит связь всех элементов системы.
5. Предохранители системы
Элементов куча, как же нам определить, где именно таится неисправность? Давайте начнем по порядку.
Достаточно часто из строя выходят датчики парктроника. Это может носить как постоянный эффект, так и быть временным явлением вследствие обледенения, влаги, и прочих дорожных и погодных факторов.
Как определить, какой датчик вышел из строя?
Для этого зовем партнера, просим его завести машину, поставить на передачу R и просим держать тормоз, чтобы машина не уехала на Вас. Почему на Вас? Вы, для проверки, должны находиться сзади автомобиля и слушать работу датчиков. Работающий датчик издает характерное пощелкивание, неработающий молчит. Вы можете даже определить какой именно датчик вышел из строя
Помните, что датчик может не работать и по причине окисла, разрушения проводов, идущих к нему (особенно часто это бывает на датчиках спереди из-за их расположения и реагентов на дороге). Как это определить? Просто поменяйте датчики местами, и проверьте, появиться ли неисправность в этом случае.
В моем случае не работают все 4 датчика. Это может говорить о следующем. Выйти все датчики из строя сразу — возможно, но маловероятно. Поскольку у датчиков общее питание и масса, то может быть проблема с проводами — возможно, но тоже маловероятно на датчиках находящихся сзади. Но иметь в виду эту версию стоит. Давайте проверять теперь ее с другого конца.
Проверим есть ли питание на блоке парктроников (блок PAM). Если там все в порядке, то локализация сужается, и мы будем подозревать либо блок парктроников, либо провода, идущие от него на датчики.
Принцип действия парковочных систем основан на излучении сигналов, которые принимаются после отражения от препятствия и обрабатываются управляющим устройством (например, микроконтроллером). Исходя из параметров принятого сигнала рассчитывается расстояние до препятствия, после чего соответствующая информация выводится на блок индикации. Особенности конкретной принципиальной электрической схемы парктроника могут отличаться в зависимости от типа используемых датчиков, количества дополнительных функций, стоимости парковочной системы и пр. Основной принцип работы при этом остаётся неизменным.
В качестве излучателей и приёмников обычно используются одни и те же датчики. Наиболее распространенный вариант — ультразвуковые сонары, но применяются также инфракрасные и электромагнитные сенсоры.
Функциональная схема парктроника
Рассмотрим принцип действия парковочного ассистента на примере одного из вариантов функциональной схемы устройства.
Управление работой данной схемы осуществляется микроконтроллером (МК на рис. 1). Микроконтроллер в заданные моменты времени подаёт управляющие сигналы на передатчик (Прд), который включает сенсоры (УЗИ) на передачу. При приближении к препятствию отраженные от него сигналы поступают на схему приемника (Прм), затем усиливаются усилителем (У) и поступают на микроконтроллер.
Микросхема МК анализирует параметры принятых сигналов (в случае ультразвуковых сенсоров — величину временной задержки), после чего управляет дальнейшей работой передатчика и блока сигнализации (БСИ).
Функциональные схемы разных парктроников имеют определенные отличия. Например, более простые могут обходиться вообще без микроконтроллеров. Управление в таком случае осуществляется посредством других электронных микросхем.
Принципиальная схема парктроника на счетчике-делителе
Рассмотрим пример принципиальной электрической схемы парктроника, собранной на десятичном счетчике-делителе. В нашем случае это МС К561ИЕ8.
В качестве датчиков используются два разных устройства — ультразвуковой излучатель (TX, MA40S4S) и приёмник (RX, MA40S4R). Генератор ультразвуковых импульсов собран на МС К561ТЛ. Здесь DD1.5 играет роль выходного буфера, DD1.6 – усилителя выходного сигнала, а DD1.4 – непосредственно генератора. Генерируемая частота составляет примерно 40 кГц, причём этот показатель можно подстроить посредством резистора R14.
Парктроник запитывается от сети 12 В (желательно брать питание от лампы заднего хода либо использовать альтернативные варианты при подключении передних датчиков). Стабилизатор входного напряжения выполнен на элементе DA1.
В момент сброса десятичного счётчика на выходе Q0 формируется управляющий электрический импульс, запускающий работу излучателя TX на передачу. Остальные выходы К561ИЕ8 задействованы для индикации расстояния от препятствия.
Отраженный сигнал после детектирования на RX усиливается каскадом VT1–VT4 и переключает триггер (DD1.1 и DD1.2). Тем самым работа счетчика временно останавливается. Включается один из светодиодов, сигнализирующий о расстоянии до препятствия. Включение диода HL9 говорит о максимальной дистанции до преграды, а HL1 – о минимальной. Одновременно с диодом HL1 включается звуковая сигнализация на зуммере BF.
Описанная принципиальная схема предусматривает возможность ручного регулирования ряда параметров. Потенциометром R14 настраивается чувствительность устройства. Посредством R15 задаётся диапазон срабатывания между светодиодами. Например, можно установить промежуток 10 см для каждого из диодов, тогда парктроник будет срабатывать при расстоянии в 90 см от препятствия.
Отметим, что приведённая электрическая схема парктроника позволяет подключить его всего с одной парой датчиков. Это очень простой и недорогой вариант организации парковочной системы.
Принципиальная электрическая схема на микроконтроллере
Эта принципиальная электрическая схема парктроника соответствует приведенной на рис. 1 функциональной.
Принципиальная схема собрана на 8-битном микроконтроллере Z86E0208PSC марки ZiLOG (DD1). DA1 – это стабилизатор напряжения 7805, обеспечивающий питание +5 В. На транзисторах VT1–VT3 собран резонансный усилитель. Применяются по четыре ультразвуковых излучателя и приёмника (BQ).
В качестве времязадающей цепи используется схема на кварцевом генераторе ZQ (8 МГц) и конденсаторах C3, C4. Ультразвуковые излучатели подключены на выводы 15—18 порта 2 контроллера. На входы излучателей подаются пакеты импульсов длительностью 1 мс с возбуждающим напряжением размахом 10 В.
Отраженные ультразвуковые волны принимаются приёмниками BQ1, BQ5—7, включенными во входную цепь трехкаскадного усилителя на транзисторах КТ3102. С выхода усилителя сигнал подаётся на вход P32 контроллера — неинвертирующий вход компаратора. С делителя R1–R3 на инвертирующий вход P33 подаётся эталонное напряжение +2,7 В. Дополнительную защиту от помех обеспечивает ограничительный диод VD1 с конденсатором C1. Для ограничения мгновенных значений принятого импульса уровнями 0 и 5 В используются диоды VD2 и VD3.
Принципиальная электрическая схема данного парковочного радара подразумевает подключение питания к лампе заднего хода автомобиля, левому и правому поворотникам. Это обеспечивает запуск системы в случае включения задней передачи или начале перестроения/поворота.
Микросхема DA1 преобразует 12 В в питающее напряжение МС Z86E02 + 5 В и стабилизирует его. На резисторе R6 и конденсаторах C2, C8 и C13 собран фильтр для подавления помех. На резисторах R1 и R5 реализован делитель напряжения 2,7 В.
Принцип действия
После включения парковочного радара управляющая микросхема запускает работу излучателей. При появлении в зоне действия системы препятствия происходит отражение ультразвука и возврат его к приёмнику. Микроконтроллер по времени задержки рассчитывает расстояние до преграды и формирует соответствующие предупреждающие сигналы: частые при расстоянии до препятствия менее 1 метра и редкие на дистанциях 1—2 метра.
После излучения пакета длительностью 1 мс контроллер переводит схему в режим ожидания, работа передатчиков подавляется. Если через 60 мс приемниками не была принята отраженная волна, радар опять запускается на передачу.
Схема датчика парктроника на инфракрасном излучении
В завершение приведем простейшую принципиальную электрическую схему датчика парктроника, собранную на инфракрасных излучателях.
Работа этой электрической схемы парктроника основана на взаимодействии операционного усилителя LM324 и таймера NE555. Используются два ИК-диода — передатчик и приёмник. В качестве индикаторов задействованы три светодиода — красный, зеленый, жёлтый.
Принципиальная схема парктроника настроена таким образом, что обеспечивает трёхступенчатую сигнализацию о приближающемся объекте. На дистанции 30 см включается желтый светодиод, на 20 см — жёлтый и зелёный, на 10 см горят все три индикатора.
При своей простоте эта схема представляет определенный интерес, поскольку монтажную плату со всеми необходимыми деталями можно купить в любом магазине радиодеталей.
При желании можно самостоятельно собрать парктроник своими руками с помощью этой электрической схемы. Правда, потребуется вынести индикаторы за пределы монтажной платы датчика и разместить их где-нибудь в районе приборной панели.
В попытках свести все жизненные рабочие показатели своего автомобиля на один экран головного устройства дошла очередь и до подключения парктроника. Многие возразят — ведь даже у дешевых парктроников есть свой экранчик, зачем выводить данные куда-то ещё? Да просто лишний экранчик в салоне ставить не хочется, и покопаться в железе повод есть…
В статье постараюсь описать приёмы и инструменты для реверс-инжиниринга недокументированного протокола обмена двух железок между собой.
Из содержания некоторых публикаций, создаётся впечатление, что, во-первых, стоит выбирать парктроник с радиоканалом между основным блоком и экраном, и во-вторых, ничего сложного в протоколах обмена не ожидается. Хм… ну да. Правдой это оказалось наполовину.
Наличие радиоканала между основным блоком и «блоком индикации» позволяет предположить, что протокол обмена между ними будет простым и последовательным с передачей измеренных расстояний в явном виде. Если бы экран цеплялся напрямую, то, скорее всего, вся логика была бы реализована в одном чипе и на экран шли бы уже команды типа «зажги вот этот пиксель/сегмент и погаси вон тот», без возможности получить непосредственно измеренные расстояния. Окей. Воодушевлённые, идём в «крупнейший кибермаркет» и покупаем там самый дешевый комплект парктроника с самолётами в логотипе. Купили, и тут началось…
Шаг первый. Вскрытие и считывание посылаемых данных
Для начала определимся со способом передачи данных по радиоканалу. Вскрыв основной блок, находим там кругленький чип R433A с совершенно стандартной обвязкой. Приёмника в основном блоке нет, следовательно, канал передачи данных односторонний, с единственно возможной для R433 OOK-модуляцией. Т.е. при наличии высокого уровня цифрового сигнала (логической «единицы») передатчик передаёт в эфир несущую на частоте 433,92 МГц. При отсутствии высокого уровня — передатчик молчит. Со стороны приёмника в блоке индикации аналогичным образом происходит декодирование: если приёмник видит несущую, выдаёт высокий уровень, если не видит — выдаёт низкий. Да, все помехи от парктроника соседа приёмник так же прекрасно ловит, поэтому его чувствительность сильно занижается. И к передаваемым данным, как правило, добавляется контрольная сумма (этот факт нам ещё пригодится ниже).
Нам понадобится цифровой осциллограф-самописец (удобны простые USB-осциллографы, типа DiSco). Находим дорожку, которая идёт от главного микроконтроллера «мозгов» к передатчику в основном блоке или от приёмника к микроконтроллеру в блоке индикации, находим любую «минусовую» дорожку, подпаиваем к ним проводочки, подключаем осциллограф, смотрим:
Вот такую повторяющуюся посылку шлёт основной блок сразу при подаче питания. При внимательном её рассмотрении можно сделать крайне неочевидный вывод о том, что посылка состоит из трёх частей:
- Первая часть — очевидно, некая синхронизация, чтобы «разбудить» приёмник и чип в блоке индикации. Состоит из пяти импульсов по 0.4 мс с паузами по 0.4 мс и следом одного импульса длительностью 1 мс с паузой 2 мс. Запомним информацию о длительности, она пригодится для реализации собственного декодера.
- Вторая и третьи части — это непосредственно данные, закодированные в 16 импульсах разной ширины в каждой части (плюс ещё один 0.4 мс импульс в самом конце).
Шаг второй. Декодирование ручками
Итак, у нас есть 32 бита данных и 4 датчика. Логично предположить, что на каждый датчик отводится «чуть менее» 8 бит, плюс, вероятно, контрольная сумма (мы ещё помним про контрольную сумму!). И нам нужно понять, каким образом в этих битах кодируются расстояния до препятствий и всё такое. Для начала отключим все датчики и вручную с показаний осциллографа запишем полученную последовательность бит:
10011100 10011100 10011101 01000100
хм… понятно, что ничего не понятно. В отсутствие датчиков логично бы получать все единицы или все нули. Здесь ничего похожего. Подключим датчик A, направив его в пустоту (показания — «бесконечность»):
10011100 10011100 10010011 01001100
изменились последние два байта. В 4-м байте поменялся 1 бит. Видимо, именно он показывает «наличие датчика A»? А в 3-м байте поменялось 3 бита. Причём, если рассматривать их как отдельное 3-битное число, записанное от младшего к старшему биту, можно заметить, что оно увеличилось на единицу: 011+1=100. А единица эта — добавилась к 4-му байту. Отсюда два предварительных вывода:
- в 3-м байте есть биты, относящиеся к контрольной сумме,
- контрольная сумма — это простая арифметическая сумма чего-то с чем-то, никаких там CRC и прочих сложностей,
- данные в целом кодируются не байтами, а 4-битными «нибблами».
10011100 10011110 01011101 01000100
изменились 2-й и 3-й байты. Шестой бит второго байта (считая от нуля), похоже, «наличие датчика B». Младшие 4 бита третьего байта — тоже контрольная сумма, тоже увеличилась на единицу, появившуюся во втором байте. Но появилась она там не в нулевом и не в четвёртом, а в шестом бите! Уже становится интересно. Пробуем одновременно датчики A и B в «бесконечность»:
10011100 10011110 01010011 01001100
да, кое-что прояснилось. Имеем второй байт, как в посылке «только датчик B» и четвёртый байт из посылки «только датчик A». А вот в третьем байте две 4-битных части из двух предыдущих посылок. Предположение про 4-битные контрольные суммы начинает подтверждаться? Непривычно только то, что контрольная сумма засунута в середину посылки.
Попробуем теперь выставить перед датчиком A (отключив B) препятствие на расстоянии, скажем, 90 см:
10011100 10011100 10011111 01000110
о как, бит «наличие датчика A» больше не показывает нам наличие датчика A. Но в последних 4 битах появился бит в другом месте. И разительно поменялась контрольная сумма. Хотя если сравнить с исходной посылкой без датчиков: 1111-1011 = 100, а последние 4 бита: 0110-0010 = 100. Ура! Совпало!
Тем не менее, дальше становится понятно, что вручную с показаний осциллографа срисовывать эти биты тяжело и велика вероятность ошибиться. Поэтому…
Шаг третий. Декодирование ножками в микроконтроллере
У нас есть микроконтроллер. Ардуино или просто AVR на макетке, неважно. Он у нас есть, кому как не ему собирать все данные для головного устройства. Поэтому самое время написать программку для декодирования посылки от парктроника и передачи этой посылки через терминалку в компьютер для упрощения дальнейшего процесса реверсинга.
Поскольку уровень сигналов от парктроника составляет стандартные 5 вольт, то подключение к AVRке для отладки очень простое — проводом на любую неспециализированную ножку (хмм… может я зря зачеркнул в заголовке?).
Исходник программы доступен на гитхабе. Декодированием занимается функция-обработчик прерывания PCINT3_vect в строке 119 и далее. Остальная часть программы делает много других интересных штук, может быть когда-нибудь я и про это напишу статью. А пока опишу вкратце алгоритм декодирования посылки от парктроника.
У нынешних AVRок почти на каждую ногу можно повесить прерывание, которое будет срабатывать каждый раз при изменении уровня на входе. Т.е. каждый раз при переходе от 0 до 5 вольт и каждый раз при переходе обратно от 5 до 0. Таким образом, достаточно при помощи таймера засекать время между срабатываниями прерывания и фиксировать внутреннее состояние. Состояний может быть несколько: ожидание первых 5 импульсов, ожидание широкого импульса, ожидание паузы, ожидание первых 16 бит (с последующим декодированием в зависимости от длительности импульса), ожидание паузы, ожидание вторых 16 бит, ожидание финального импульса, переход в начальное состояние. Причём всё это реализовано в обработчике прерывания, отнимает каждый раз буквально считанные такты и совсем не занимает главный цикл (правда, занимает отдельный таймер, но это исправимо).
Получившееся устройство по UART выдаёт в терминалку компьютера декодированные значения непосредственно в виде 4х байт. Для упрощения последующего анализа открываем Excel и пишем макрос:
генерирующий из 4 шестнадцатеричных байт вот такое (разноцветие и подписи, конечно, я уже добавил сам):
очень наглядно стало видно, что биты «наличие датчика» действительно имеются по всем 4-м датчикам и влияют на контрольные суммы соответственно. А пропадание бита датчика A при некоторых показаниях обусловлено чем-то ещё.
Обладая всем вышеописанным инструментарием, опытным путём получаем таблицу по датчику A:
- Последние 4 бита — десятки сантиметров датчика A. Причём если промоделировать расстояния вплоть до нуля, получится, что нулю десятков сантиметров соответствует 1111 и далее по убывающей, 10+ см = 1110, 20+ см = 1101, 30+ см = 1100 и т.д. вплоть до 0011, соответствующего 130+ см.
- Отмеченные бледно-розовым два столбца по 2 бита соответствуют единицам сантиметров (заметьте, что для 105, 95 и 85 см биты одинаковы). Причём в первом столбце более старшие биты 4-битного значения. Принцип кодирования тот же: 0 см = 1111, 1 см = 1110 и т.д. вплоть до 9 см = 0110
- Первая контрольная сумма остаётся неизменной, а вот вторая меняется хитро. Столбец десятков сантиметров влияет на сумму непосредственно, а вот оба столбца единиц сантиметров — влияют только на старшие два бита контрольной суммы.
- Два столбца по два бита, кодирующие единицы сантиметров, остаются на своих местах (отмечены светлозеленым). Получается, что, скорее всего, единицы сантиметров выводятся каждый раз для ближайшего к препятствию датчика, а десятки сантиметров — отдельно по каждому датчику. Таким образом, на штатном экранчике выводится расстояние до ближайшего к препятствию датчика с точностью до сантиметра и, грубо, расстояние до остальных датчиков в виде полосочек перед бампером.
- Десятки сантиметров для датчика B получаются также разбитыми на два столбца по два бита (отмечены «среднезеленым»).
- Обратившись к инструкции к парктронику, выясняем, что заявленное максимальное фиксируемое расстояние до препятствия — 2.5 метра. А в 4 битах можно закодировать только 1.6 метра. Значит где-то есть пятый бит? И действительно, промоделировав расстояния 1.7 метра и дальше, выясняем, что это второй бит первого байта (отмечен тёмнозеленым). Таким образом, десятки сантиметров датчика B кодируются битами в следующем порядке (от старшего к младшему): 2,1,0,16,15.
- Меняются значения обоих 4-битных контрольных сумм. Следовательно, биты, связанные с показаниями датчика B, влияют на обе суммы.
- Первая контрольная сумма чётко изменяется на единицу вместе с изменениями на единицу значения десятков сантиметров. Видимо остальные столбцы, которые тоже включены в эту сумму — среди неизменяющихся по датчику B.
Очередь датчика C:
гоньфень джи рёнран суньзаой, то есть единицы сантиметров по-прежнему на своих местах.- Десятки сантиметров для датчика C закодированы в пяти битах, которые на этот раз вместе, хоть и принадлежат разным байтам (сиреневый и тёмносиреневый). Принцип кодирования аналогичен предыдущим датчикам.
- Первая контрольная сумма (первые 4 бита) чётко изменяется на единицу вместе с изменениями на единицу значения десятков сантиметров. Аналогично датчику B. Следовательно, предварительный вывод: в первую контрольную сумму входят значение десятков сантиметров датчика B и датчика C (вероятно, без пятого бита) и что-то ещё. Интуиция подсказывает, что это младшие 4 бита последнего байта. Проверим ниже.
По датчику D собирать подробную таблицу стало лениво, поэтому так:
что ж, все гипотезы подтвердились. Первые 4 бита последнего байта кодируют десятки сантиметров датчика D.
Для проверки промоделируем несколько сочетаний датчиков A и B:
да, всё совпадает.
На данном этапе мы можем полностью декодировать расстояния по каждому датчику, включая единицы сантиметров. И наличие/отсутствие датчиков. Может быть, этого достаточно? Хм. Кажется что-то ещё недораскопано…
Шаг четвёртый. Расчёт CRC (Chinese Redundancy Check)
- Их две, по 4 бита, находятся почему-то не в последнем, а в третьем байте.
- Каждая из них является простой арифметической суммой данных из других столбцов.
- Предположительно известна принадлежность некоторых бит к конкретным контрольным суммам.
Отметим известную на данный момент принадлежность на выборке каких-нибудь произвольных показаний:
попробуем просуммировать по первой строке, возьмём столбцы десятков сантиметров датчиков B, C и D:
1110 + 0111 + 0011 = 11000
хм, а контрольная сумма в третьем байте 0111. А что если минус один?
1110 + 0111 + 0011 — 1 = 10111
совпадает, если отбросить лишний бит. Проверим по другим строкам:
1110 + 0111 + 0011 — 1 = 10111 (ой, тут всё повторилось)
0101 + 0111 + 0011 — 1 = 0111 (тут без отбрасывания)
1111 + 1100 + 1100 — 1 = 100110 (тут аж два бита переполнилось)
0001 + 0101 + 0011 — 1 = 1000 (без отбрасывания)
ура, всё совпало!
У нас остались не отмеченные столбцы. Вероятно, они относятся ко второй контрольной сумме, поэтому попробуем просуммировать:
1010 + 1011 + 0011 = 11000
1110 + 0111 + 0101 = 11010
1110 + 0011 + 1000 = 11001
1111 + 1111 + 0111 = 100101
1111 + 1011 + 0111 = 100001
мда, маловато общего с второй контрольной суммой. Посмотрим, сколько нужно вычесть, чтобы совпало:
1010 + 1011 + 0011 — 10 = 10110
1110 + 0111 + 0101 — 10 = 11000
1110 + 0011 + 1000 — 11 = 10110
1111 + 1111 + 0111 — 01 = 100100
1111 + 1011 + 0111 — 11 = 11110
где-то я это уже видел… а, ну да, у первой контрольной суммы! Зависимость простая — от второй КС нужно отнять то, что мы отбросили как переполнение при расчёте первой КС, только xor'енное с 11. Т.е. отбрасывая 00 (ничего) от первой КС, от второй отнимаем 11 и т.д.
Уфф, вроде всё. Осталось два незадействованных бита, но они, похоже, всегда единицы.
Шаг пятый. Чистка радиоэфира
А вообще я не сторонник применения радиоканалов где попало. Эфир и так прилично загажен, так что работать это всё будет местами (географическими) довольно нестабильно. Поэтому займёмся тем, что выкинем из парктроника приёмник и передатчик, соединив базовый блок, блок индикации и наш микроконтроллер по проводам. Почему я упоминаю блок индикации, хотя не собирался его ставить? А из-за пищалки. Всё-таки передача от базового блока парктроника в наш микроконтроллер, там декодирование, затем пересылка в головное устройство, там снова декодирование и отрисовка внесёт некритичный, но заметный лаг в отображение расстояний. Поэтому блок индикации останется в недрах приборки и будет пищать заведомо быстрее (хотя в будущем, может быть, заставлю пищать свой микроконтроллер).
Можно было бы не париться и соединить все блоки проводочками прямо как в отладочном режиме, напрямую. Однако прокидывать через всю машину жалкие 5 вольт TTL, поверьте мне, не лучшая идея. Поэтому впаяем во все три устройства микросхемы MAX485, реализующие передачу по куда более надёжному интерфейсу RS-485. В общем как-то так (простите за неотмытый флюс). Базовый блок:
на месте белого кружка в правом верхнему углу платы стоял чип R433A, из его обвязки также удалён транзистор Q11 и резистор, вместо которого припаян проводок. А в свободном месте удалось расположить микросхемку так, что ножки попали на минусовой контакт и несколько других подходящих контактов. Поскольку базовый блок всегда является передатчиком, ножки DE и RE можно постоянно замкнуть на +5 вольт. Линии A и B интерфейса RS485 выведены на дополнительную клемму.
ну здесь вообще красота, MAX485 впаялась практически как родная вместо стоявшей микросхемы приёмника RF83C. Совпали ножки выхода данных DO и минусовая GND, ножки DE и RE, поскольку эта часть всегда приёмник, посажены на землю. Остальное потребовало всего одной перемычки.
Работает, как и прежде:
фотку собственного микроконтроллера, пожалуй, опубликую в статье про остальную часть функционала KMENevoBT с гитхаба.
Напоследок, код полного декодирования посылки от парктроника из отладочной программки на Delphi:
Шаг шестой. Выводы
Возможно, в какой-то момент стоило отказаться от дальнейших раскопок и заказать с Ebay тот же парктроник, который расковырял итальянец с форума по первой ссылке, но мне понравился сам парктроник. Он весьма быстро и точно работает. Пришлось добить, уже из принципа.
Что курили китайцы, разрабатывая такой вот протокол, непонятно.
Кстати, зная протокол обмена, можно применить этот парктроник не только на автомобиле, а, к примеру, на самодельном роботе. Да, для роботов есть отдельные ультразвуковые датчики, но тут их сразу четыре и читаются они одной ножкой ардуины, хоть и с задержкой в несколько миллисекунд.
Читайте также: