Мазмұны:

Автокөлік стерео адаптерінің рульдік кілттері (CAN Bus -> Key1): 6 қадам
Автокөлік стерео адаптерінің рульдік кілттері (CAN Bus -> Key1): 6 қадам

Бейне: Автокөлік стерео адаптерінің рульдік кілттері (CAN Bus -> Key1): 6 қадам

Бейне: Автокөлік стерео адаптерінің рульдік кілттері (CAN Bus -> Key1): 6 қадам
Бейне: Ford Fox Body Mustang 1979 to 1993: The History, All the Models & Features 2024, Қараша
Anonim
CAN автобус иісті
CAN автобус иісті

Кілт1) «src =» https://content.instructables.com/ORIG/F3X/UXCI/KCT3F9KZ/F3XUXCIKCT3F9KZ-p.webp

Стереоға командалар жіберу
Стереоға командалар жіберу

Key1) «src =» {{file.large_url | қосу: 'auto = webp & frame = 1 & height = 300' %} «>

Ескі автокөлікті сатып алғаннан кейін бірнеше күннен кейін мен телефонның музыкасын стерео арқылы ойнай алмайтынымды білдім. Автокөліктің блютузы болғанымен, музыкаға емес, тек дауыстық қоңырауларға рұқсат етілгені одан да қынжылтады. Ол сондай -ақ Windows Phone USB порты болды, бірақ ол 60 долларлық донглсіз iPhone -мен жұмыс істемейді.

Бұрынғы көліктердегі стерео құрылғыларды алмастыра отырып, көп ойланбай және зерттемей -ақ, әйгілі «арзан» веб -сайттан 40 долларлық стереоға тапсырыс бердім. Стерео реверсивті камерамен, Car Play және көптеген қосымша мүмкіндіктермен келді, бұл тек бір нәрсені жасайтын қымбат донглге қарағанда әлдеқайда жақсы болып көрінді.

Жаңа беткі тақтаны сатып алып, бояғаннан, қондырғыны 3D басып шығарудан және көптеген қосымша жұмыстан (бұл нұсқаулық болуы мүмкін) кейін, мен жағымсыз жаңалыққа тап болдым. Рульдік доңғалақ пернелерінің командалары CAN шинасы арқылы жіберілді, бірақ стерео тек Key1 кірісіне ие болды. Жарты жолдан бас тартпай, мен 60 фунт стерлингке тапсырыс бердім, ол жұмыс істемеді. Осы кезде мен адаптерді өзім жасауды шештім.

Мен инженер -электрик емеспін, менде электроника туралы қарапайым білім бар, бұл мен үшін оқу мен барлау жобасы болды. Менің кеңесім - алдымен көліктің техникалық сипаттамаларын тексеріп, үйлесімді радиоға тапсырыс беріңіз, бірақ егер сіз кептеліп қалсаңыз (мен сияқты) нұсқауларды өз тәуекеліңізбен орындаңыз.

Жабдықтар

Адаптер (шамамен 15 $)

  • Arduino Pro Mini 5V (немесе үйлесімді тақта)
  • MCP2515 CAN шинасының модулі
  • 60x80 мм перфоратор
  • X9C104 100K Ом сандық потенциометрі (стереоға байланысты)
  • DC-DC LM2596S 3-40V 3A төмендету реттегіші
  • Кабель сақтандырғыш ұстағыш + сақтандырғыш (100-200 Ом)
  • Оны басып шығару үшін жоба қорабы немесе 3D принтері
  • Автокөлік стерео ұялары (ерлер + әйелдер)
  • Дәнекерлеу материалдары, сымдар және т.б.

Тест көмекшілері (қажет емес, бірақ тестілеуді жеңілдетеді)

  • Arduino (кез келген 5В тақтасы жасайды)
  • MCP2515 CAN шинасының модулі
  • Нан тақтасы + секіргіштер

1 -қадам: CAN автобусты иіскейді

Бірнеше жүйені бір -бірімен байланыстыратын сіздің машинаңыздың ішкі жағынан айналатын сымдардың орнына, кейбір заманауи көліктерде әр компонентке қос сымдар қосылады. Ақпарат цифрлық деректер пакеті ретінде осы сымдар арқылы жіберіледі және барлық жүйелер барлық хабарламаларды оқи алады. Бұл CAN автобус желісі (сіздің көлігіңізде бірнеше желі болуы мүмкін, сондықтан барлық ақпарат көрінбеуі мүмкін).

Біз жасағымыз келетіні - CAN автобус желісіне қосылу және деректер трафигін «иіскеу». Осылайша біз рульдік пернені басқан кезде «көре» аламыз. Әрбір пакетте пакетті жіберген автокөліктің ішкі жүйесін және жүйенің күйін көрсететін деректерді көрсететін идентификатор бар. Бұл жағдайда біз рульдік доңғалақтың хабарламаларын жіберетін ішкі жүйенің идентификаторын және әр кілттің деректерін табуға тырысамыз.

Егер сіз бақытты болсаңыз, сіз өзіңіздің көлігіңіздің құндылығын Интернеттен таба аласыз және бұл қадамды өткізіп жібере аласыз.

Бұл процесс аздап қатысады және басқа жерлерде түсіндірілген, сондықтан мен оны қысқаша сипаттаймын:

  • Көлігіңізде CAN автобус байланысының дұрыс мәндерін табыңыз. Менің автокөлігім үшін (2009 ж. Fiat Idea) бұл жылдамдық 50 КБ / с және 8 МГц жиілік болды.
  • CAN шинасының модулін және Arduino -ны «иіс» конфигурациясы арқылы CAN шинасының желісіне қосыңыз.
  • Ноутбуктағы CAN шинасы мәндерін https://github.com/alexandreblin/python-can-monito… сияқты құралды пайдаланып оқыңыз. Онсыз мұны істеу өте қиын болады, өйткені көлік ештеңе істемеген кезде де көптеген хабарламалар жіберіледі.
  • Руль дөңгелегі түймесін басып, мәннің өзгеруін ескеріңіз. Бұл біршама қиын болуы мүмкін, өйткені көптеген хабарламалар жіберіледі және олардың қайсысы екенін түсіну қиын болуы мүмкін.

Міне, процесті терең түсіндіретін екі керемет мақала:

  • https://medium.com/@alexandreblin/can-bus-reverse-…
  • https://www.instructables.com/id/CAN-Bus-Sniffing-…

Ақырында сізде рульдік дөңгелектің CAN шинасының хабарламаларын тыңдау үшін қолданылатын ішкі жүйе идентификаторы және негізгі командалар үшін он алтылық мәндердің тізімі болуы керек. Менің жағдайда деректер келесідей болды:

ID | ID Hex | Байт 0 | Байт 1 | Түйме

--------------------------------------------- 964 | 3C4 | 00 | 00 | Түймелер жоқ 964 | 3C4 | 04 | 00 | SRC 964 | 3C4 | 10 | 00 | >> 964 | 3C4 | 08 | 00 | << 964 | 3C4 | 00 | 80 | Телефон 964 | 3C4 | 00 | 08 | ESC 964 | 3C4 | 80 | 00 | + 964 | 3C4 | 40 | 00 | - 964 | 3C4 | 00 | 40 | 964 ұтып алыңыз | 3C4 | 00 | 02 | 964 жоғары | 3C4 | 00 | 01 | 964 төмен | 3C4 | 00 | 04 | ЖАРАЙДЫ МА

Ішкі жүйенің идентификаторы - 3C4 (бұл жағдайда), ол он алтылық сан болып табылады, сондықтан біз оны Arduino эскиздерінде 0x3C4 сияқты жазуымыз керек. Бізді 0 және 1 байттар қызықтырады (сіздің жағдайда байттар көп болуы мүмкін). Бұл сондай -ақ он алтылық мәндер, сондықтан олар жетекші 0x арқылы жазылуы керек.

Егер сіз мәндерді екілікке түрлендірсеңіз, онда биттердің бір -біріне сәйкес келмейтінін байқайсыз (мысалы + 0b10000000 және - 0b01000000), сондықтан бірнеше пернені бір уақытта басуға болады.

Мен «сынақ көмекшісі» бөлімінде көрсетілген материалдармен иісқауышты құруды ұсынамын, сондықтан сіз оны машинаңызды модельдеу үшін кейінірек қайта пайдалана аласыз. Бұл адаптерді құрастыру және сынау кезінде сіздің көлігіңізде үнемі отырудан сақтайды. Тренажер ретінде берілген эскизді пайдалануға болады. «SubsystemId», «data0» және «data1» мәндерін өзіңіз анықтаған мәндермен өзгертіңіз.

2 -қадам: стереоға командаларды жіберу

Стереоға командалар жіберу
Стереоға командалар жіберу

Адаптерді құруды бастамас бұрын, алдымен стерео командаларды қабылдай алатынын тексерген жөн.

Менде автокөліктің қосалқы аккумуляторы болды, сондықтан стереоды оған тікелей жалғадым. Егер сізде 12 В жоғары қуат көзі болса, одан да жақсы. Өкінішке орай, мен Интернетте Key1 енгізу туралы көп ақпарат таба алмадым, сондықтан мен экспериментке жүгіндім. Мен стерео күйіп кетеді деп қатты уайымдамадым, өйткені бұл салыстырмалы түрде арзан, және бұл менің көлігіммен жұмыс жасаудың соңғы жолы.

Стереода командалық оқу экраны бар, онда қарсылықтың екі мәнінің біреуін таңдауға болады (1K және 3.3K) және «кернеу» мәнін (0-255) көруге болады. «Кернеу» дәйексөз келтірілген, себебі ол жаңылыстырады. Мен Key1 -ге сәттіліксіз әр түрлі кернеуді қолдануға көп уақыт жұмсадым. Мен кернеуді сәттіліксіз қолдану үшін әр түрлі резисторларды қолдануға тырыстым.

Мен Key1 сымын аккумуляторлық жерге тигізуге тырысқанымда серпіліс болды, нәтижесінде «кернеу» 0 -ге дейін төмендеді. Бұл әр түрлі резисторлармен үйлескенде оқу экранында тұрақты «кернеу» мәндерін шығарады.

Енді мен стереоға кірісті қалай жіберу керектігін білдім, сондықтан оларды Arduino -дан жіберу әдісі қажет болды. Бұл кезде мен кейбір резисторлармен бірге тезірек және сенімді шешім болуы мүмкін мультиплексорлар туралы естімедім (мен бұл мүмкін екеніне әлі сенімді емеспін), сондықтан мен сандық потенциометрді қолдандым. Алдымен менде сандық кастрюльді жұмысқа қосу мәселесі болды, мен кернеуді бөлгіштің орнына айнымалы резистор ретінде әрекет ету үшін оны реостат ретінде қосу керектігін түсіндім. Негізінде маған RH және RW терминалдарын қосу керек болды.

Қарсылықтан басқа, уақыт өте маңызды болды. Егер қарсылықтың төмендеуі тым қысқа болса, команда тіркелмейді. Егер ол тым ұзақ болса, ол бірнеше рет тіркелуі мүмкін. 240 м төмендеу, содан кейін келесі команда менің стерео үшін өте сенімді болғанша 240 м кідіріс. Бұл өте аз уақыт сияқты көрінсе де, біз секундына ең көбі 2 пәрмен жібере алатынымызды білдіреді, егер сіз дыбыс деңгейін жоғарылатуға немесе төмендетуге тырыссаңыз, бұл байқалады. Мен әр түрлі уақыттар мен үлгілермен ойнауға тырыстым, бұл жылдамдықты арттырды, бірақ онша сенімді емес. Егер сізде мұны қалай жақсарту туралы идеялар болса, оларды түсініктемелерде қалдырыңыз.

Әрі қарай жалғастырмас бұрын, мен сіздің стерео кіріс түрін қабылдайтынын тексеру үшін прототип құруды ұсынамын. Егер ол әртүрлі кернеулерді қабылдайтын болса да, адаптер сымдар мен Arduino эскизіне сәл өзгеріс енгізуі керек.

3 -қадам: адаптерді құру

Адаптерді құру
Адаптерді құру
Адаптерді құру
Адаптерді құру
Адаптерді құру
Адаптерді құру

Барлық компоненттерді бөлек тексеріп, оларды тақтада бірге сынап көргеннен кейін, оларға тұрақты үй берудің уақыты келді. Бұл компоненттерді төсеуге және дәнекерлеуге бірнеше сағатты алды.

Жоғарғы сол жақта - аккумулятордан 12В -ты басқа компоненттер қолдана алатын 5В -қа ауыстыратын реттегіш.

Төменгі сол жақта CAN шинасының модулі бар, ол автомобильдің CAN шиналар желісінің мәндерін оқиды және оларды Arduino -ға жібереді.

Жоғарғы оң жақта - стереоның Key1 кірісі мен айнымалы резистордың рөлін атқаратын цифрлық потенциометр (реостат ретінде сымды).

Төменгі оң жақта адаптердің миы қызметін атқаратын Arduino орналасқан, ол CAN шинасының хабарламаларын стерео оқылатын қарсылыққа айналдырады.

12В кірісінде 150 мА сақтандырғыш бар, ол тізбекті қорғамайды, бірақ қысқа тұйықталу кезінде өрттің алдын алу үшін бар.

4 -қадам: Бағдарламалық қамтамасыз ету

Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету

Жүктелгеннен кейін.ino файлдарының барлығын бір қалтаға салыңыз. Осылайша бәрі бірдей эскиздің бөлігі болады және бірге Арудиноға жіберіледі.

Сонымен қатар Arduino IDE -ге қажетті кітапханаларды қосу қажет. Ол үшін келесі файлдарды жүктеңіз:

github.com/autowp/arduino-mcp2515/archive/…

github.com/philbowles/Arduino-X9C/archive/…

содан кейін Sketch> Кітапхананы қосу>. Zip кітапханасын қосу бөліміне өтіп, екеуін де қосыңыз.

CanBusStereoAdapter.ino

Негізгі орнату осы файлда орындалады.

CAN шинасының мәндерінің жоғарғы пәрмені жоғарғы жағында анықталған. Егер сізде менікіндей көлік болмаса, сіз өзіңіздің құндылықтарыңызды қоюыңыз керек. Сіз он алтылық мәндерді снайперден пайдалана аласыз, мен екіліктерді қолдандым, сондықтан биттерде кездейсоқ қабаттасулар жоқ екенін көру оңайырақ.

Барлық автомобильдерде рульдік доңғалақтың командалары бірдей емес, сондықтан анықталған мәндерді алып тастауға, қосуға немесе өңдеуге болады.

«STEERING_ID» жүйесінде ішкі жүйенің идентификаторын ауыстыруды ұмытпаңыз.

CanBus.ino

Бұл файл CAN шинасының тыңдаушысын орнатады, пакеттерді түсіндіреді және қарсылық мәндерін дөңгелек буферге қояды.

CAN шинасының конфигурациясын «setupCanBus» функциясында сіздің көлігіңізге сәйкес келтіріңіз.

Біз дөңгелек буферді қолданамыз, себебі, бұрын айтылғандай, рульдік доңғалақтың командалық кірісі стерео кірістен әлдеқайда жылдам. Осылайша, цифрлық потенциометр өз жұмысын жасап жатқан кезде біз ешқандай команданы жіберіп алмаймыз. Егер біз тым көп пәрмен енгізсек, ең ескілері алдымен жойылады, өйткені олар маңызды емес. Бұл сонымен қатар бірнеше түймелер басылған кезде істі өңдеуге мүмкіндік береді, себебі стерео кіріс бір уақытта тек бір мәнді қабылдайды.

Егер сіз «CanBusStereoAdapter.ino» ішіндегі кез келген командалық анықтаманы өзгерткен болсаңыз, оларды «handleMessageData» функциясында жаңарту қажет болады. «handleMessageData» берілген CAN шинасының деректер фреймдерінде ЖӘНЕ операциясын қолдану арқылы белгілі командалардың бар -жоғын тексереді.

Мысалы, егер мен бір уақытта >> және + пернелер тіркесімін басқан болсам, ол бізге 0b10010000 мәні бар деректер шеңберін береді. >> (менің автокөлігім үшін) 0b00010000 екілік, ал + 0b10000000.

--------------- >> -------------- + ------------- << --- - деректер0 | 0b10010000 | 0b10010000 | 0b10010000 командасы | ЖӘНЕ 0b00010000 | ЖӘНЕ 0b10000000 | ЖӘНЕ 0b00001000 нәтижесі | = 0b00010000 | = 0b10000000 | = 0b00000000

Бұл жерде біз AND операциясының нәтижесі егер деректер шеңберінде команда болса 0 -ден үлкен болатынын көре аламыз. Біз анықтаған әр команда үшін {data frame} және {command value}> 0 мәндерін тексеру ғана қалады.

Есіңізде болсын, әрбір деректер шеңберінде әр түрлі командалар бар, сондықтан командалық мәндер бірдей болса, жақсы, өйткені біз оларды өздерінің кадрларымен тексереміз. Менің мысалда << және ESC екеуі де бірдей мәнге ие 0b00001000 (0x08), бірақ << деректерде 0 және ESC 1 деректерде.

Команда кадрда бар екенін анықтағаннан кейін, біз дөңгелек буферге сандық кастрюль мәнін қосамыз. Мәндер 0 -ден 99 -ға дейін, бірақ мен стерео оқитын «кернеу» сызықты емес екенін байқадым, сондықтан мәндерді өзіңіз тексеріңіз.

DigitalPot.ino

Бұл файл мәндерді дөңгелек буферден шығарады және оларды орындау үшін сандық кастрюльге жібереді. Менің жағдайда «pot.setPotMin (жалған);» стерео максималды «кернеу» ретінде оқылатын қарсылықты максимумға дейін арттырады. Сіздің стереоңыз сандық ыдысты минимумға дейін қоюды талап етуі мүмкін, сондықтан оны тексеріп көріңіз.

5 -қадам: Жобаның қоршауы

Жобаның қоршауы
Жобаның қоршауы

Менде 3D принтер бар, сондықтан мен адаптерге арналған екі бөлікті корпусты басып шығаруды шештім. Мен өңдей алатын Fusion 360 файлын және 60x80 мм перфбортқа сәйкес келетін gcode файлдарын қостым.

Егер сізде 3D принтері болмаса, сіз жобаның дайын корпусын немесе берік контейнерді пайдалана аласыз.

6 -қадам: Қорытынды ойлар

Мен бастапқыда адаптерді тұрақты қуатқа қосуды жоспарладым және CAN шинасының кейбір хабарламаларында оятуды ұйғардым, себебі менің көлігімде стерео бөлімде тұтану сымы жоқ. Мен кейінірек бұған қарсы шешім қабылдадым, себебі мен көліктен алыстап бара жатып батареяны зарядтап, адаптер туралы уайымдағым келмеді. Мен тұтану сымын жүргізу үшін автокөліктің сақтандырғыш қорапшасын қолдандым және адаптерді одан әрі күрделендірмедім.

Менің сынақтарымнан қуат тұтыну 20-30 мА құрайды. Мен оны ұйқы режимінде 10 мА дейін төмендеттім, және светодиодты компоненттерден алып тастау арқылы одан да төмен түсуім мүмкін еді, бірақ мен оған алаңдамауды шештім, себебі ол машина жұмыс істеп тұрған кезде ғана жұмыс істейді.

Мен соңғы нәтижеге өте ризамын. Жауап беру уақыты ақылға қонымды және командаларды сирек жібереді.

Менің уақыт салымым коммерциялық адаптердің құнынан әлдеқайда көп болса да (ол жұмыс істемеді), мен алған білім баға жетпес.

Ұсынылған: