Мазмуну:

Унаа стерео адаптеринин рулду ачкычтары (CAN Bus -> Key1): 6 кадам
Унаа стерео адаптеринин рулду ачкычтары (CAN Bus -> Key1): 6 кадам

Video: Унаа стерео адаптеринин рулду ачкычтары (CAN Bus -> Key1): 6 кадам

Video: Унаа стерео адаптеринин рулду ачкычтары (CAN Bus -> Key1): 6 кадам
Video: Нет такой войны за хранение на блошином рынке - не выпустили коробку, iPhone и ноутбук 2024, Июль
Anonim
БУЛ Автобус Жыттап
БУЛ Автобус Жыттап

Key1) "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 Step Lum2596S 3-40V 3A жөнгө салуучу
  • Кабелдик сактандыргыч + сактандыргыч (100-200 Ом)
  • Аны басып чыгаруу үчүн долбоор кутусу же 3D принтер
  • Унаанын стерео уячалары (эркек + аял)
  • Лайнердик материалдар, зымдар ж.

Тест жардамчылары (талап кылынбайт, бирок тестирлөөнү бир топ жеңилдетет)

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

1 -кадам: Автобустун жыттап алышы

Машинаңыздын ичинде көптөгөн тутумдарды туташтырган зымдардын тутамдарын өткөрүүнүн ордуна, кээ бир заманбап унааларда ар бир компонентке жуп зымдар бар. Маалымат бул зымдар аркылуу санарип маалымат пакеттери катары жөнөтүлөт жана бардык системалар бардык билдирүүлөрдү окуй алышат. Бул CAN автобус тармагы (машинаңызда бир нече тармактар болушу мүмкүн, андыктан бардык маалыматтар көрүнбөй калышы мүмкүн).

Биз кылгысы келген нерсе - CAN автобус тармагына туташуу жана маалымат трафигин "жыттап алуу". Ошентип, рулду басканда "көрө алабыз". Ар бир пакетте ID бар, ал пакетти жөнөткөн унаа субсистемасын жана системанын абалын билдирген маалыматтарды билдирет. Бул учурда биз рулду ачуучу билдирүүлөрдү жөнөтүүчү кичи системанын идентификаторун жана ар бир ачкычтын маалыматын табууга аракет кылып жатабыз.

Эгер сиз бактылуу болсоңуз, анда сиз машинаңыздын баалуулугун интернеттен таба аласыз жана бул кадамды өткөрүп жибере аласыз.

Бул процесс бир аз катышат жана буга чейин башка жерлерде түшүндүрүлгөн, ошондуктан мен аны кыскача айтып берейин:

  • Унааңыздагы CAN автобус байланышы үчүн туура баалуулуктарды табыңыз. Менин машинам үчүн (2009 -жылы Fiat Idea) бул 50KBPS baud ылдамдыгы жана 8MHz саат ылдамдыгы болчу.
  • CAN автобус модулун жана "sniffer" конфигурациясында 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 | Button

--------------------------------------------- 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 | Win 964 | 3C4 | 00 | 02 | Жогору 964 | 3C4 | 00 | 01 | Down 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.

--------------- >> -------------- + ------------- << --- - data0 | 0b10010000 | 0b10010000 | 0b10010000 буйругу | ЖАНА 0b00010000 | ЖАНА 0b10000000 | ЖАНА 0b00001000 жыйынтык | = 0b00010000 | = 0b10000000 | = 0b00000000

Бул жерде, эгерде маалымат алкагында буйрук бар болсо, AND операциясынын жыйынтыгы 0дон жогору болорун көрө алабыз. Ошентип, биз аныктаган ар бир буйрук үчүн {data frame} & {command value}> 0 үчүн текшерүү керек.

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

Биз фреймде буйрук бар экенин аныктагандан кийин, тегерек буферге санарип идиштин маанисин кошобуз. Маанилер 0дөн 99га чейин, бирок мен стерео тарабынан окулган "чыңалуу" сызыктуу эмес экенин байкадым, андыктан өзүңүз үчүн баалуулуктарды сынап көрүңүз.

DigitalPot.ino

Бул файл баалуулуктарды тегерек буферден чыгарат жана аларды аткаруу үчүн санарип идишке жөнөтөт. Менин учурда "pot.setPotMin (false);" стерео максималдуу "чыңалуу" деп окуй турган каршылыкты максимумга чейин жогорулатат. Сиздин стереоңуз санарип казанды минимумга чейин коюуну талап кылышы мүмкүн, андыктан аны сынап көрүңүз.

5 -кадам: Долбоордун корпусу

Долбоордун тиркемеси
Долбоордун тиркемеси

Менде 3D принтер бар, ошондуктан адаптерим үчүн эки бөлүктөн турган корпусту басып чыгарууну чечтим. Мен сиз түзөтө ала турган Fusion 360 файлын жана 60x80 мм перформатка ылайыктуу gcode файлдарын коштум.

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

6 -кадам: Акыркы ойлор

Мен адегенде адаптерди пландаштырып койгом, дайыма кубаттуулукка туташып, кээ бир CAN автобус билдирүүлөрүндө ойгоном, анткени менин машинамда стерео бөлүмдө от алуучу зым жок. Мен кийинчерээк каршы болдум, анткени мен машинадан алыстап баратканымда батарейканы түгөтүп, адаптер жөнүндө кабатырланууну каалаган жокмун. Мен күйгүзүүчү зымды иштетүү үчүн адаптерди андан ары татаалдаштыруунун кажети жок, унаанын сактандыргыч кутусун бөлгүчтү колдондум.

Менин тесттеримден керектөө кубаттуулугу 20-30 мА. Мен аны уйку режиминде 10 мАга чейин түшүрдүм, жана компоненттерден светодиоддорду алып салуу менен андан да төмөн түшө алмакмын, бирок мен аны убара кылбоону чечтим, анткени ал машина иштеп жатканда гана иштейт.

Мен акыркы натыйжага абдан кубанычтамын. Жооп берүү убактысы акылга сыярлык жана ал сейрек буйруктарды өткөрүп жиберет.

Менин убактымдын инвестициясы коммерциялык адаптердин баасынан алда канча чоң болсо да (ал иштеген жок), алган билимим баа жеткис.

Сунушталууда: