Turinys:
- 1 žingsnis: PCB projektavimas
- 2 žingsnis: Protokolo kūrimas
- 3 žingsnis: programinės įrangos kūrimas
- 4 žingsnis: sąsaja naudojant srauto kodą
- 5 žingsnis: kiti sąsajos metodai
- 6 žingsnis: paruoštas produktas
Video: Įterpta universali sąsajos plokštė - USB/Bluetooth/WIFI valdymas: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Dažnai matau, kad kuriu naujų įterptųjų modulių bibliotekas nuo nulio, remdamasis įrenginio duomenų lapu. Kurdamas biblioteką, manau, įstrigsiu kodo, kompiliavimo, programavimo ir testavimo cikle, užtikrindamas, kad viskas veikia ir kad be klaidų. Dažnai kompiliavimo ir programos laikas gali būti daug ilgesnis nei laikas, kurio reikia kodo redagavimui, todėl būdas sukurti šiuos veiksmus būtų labai patogu.
Taip pat dažnai pastebiu, kad noriu sujungti įterptąjį modulį su kompiuteriu. Jei modulyje nėra specialiai USB jungties, kuri dažnai būna, paprastai turite nusipirkti per brangų USB keitiklį, kuris atliks vieną darbą, pvz., Tik SPI arba tiesiog I2C.
Dėl šių priežasčių nusprendžiau sukurti universalią sąsajos plokštę. Jis sukurtas taip, kad būtų galima lengvai bendrauti kompiuteriu naudojant įterptus modulius.
Lentos, į kurią įsitaisiau, įterptosios sąsajos funkcijos apima.
- Skaitmeninis įvestis/išvestis
- I2C
- SPI
- UART
- PWM
- Servo variklis
- ADC įvestis
- DAC išvestis
Visa tai galima naudoti visiškai savarankiškai.
Sąsajos plokštę galima valdyti per USB jungtį prie kompiuterio, tačiau taip pat yra pasirenkami WIFI arba „Bluetooth“modulio jungtys, leidžiančios plokštę naudoti nuotoliniu būdu arba pagal IoT tipo scenarijų.
Naudojant standartines 2,54 mm žingsnio SIL antraštes, galima tiesiogiai prijungti moteriškus dupontinius kabelius tarp plokštės ir įterpto modulio, kad būtų galima greitai, patikimai ir be litavimo prijungti.
Aš taip pat galvojau pridėti tokius dalykus kaip CAN, LIN, H-bridge ir tt, bet jie gali būti pateikti vėliau, kai bus peržiūrėtas v2.
1 žingsnis: PCB projektavimas
Kurdamas PCB man patinka stengtis, kad viskas būtų kuo paprasčiau. Kai ketinate statyti lentas rankomis, svarbu pridėti komponentų tik tada, kai jie turi tam tikrą tikslą ir naudoja kuo daugiau vidinių mikrovaldiklio funkcijų.
Žvelgdamas į pageidaujamą elektronikos tiekėją, radau man patinkantį lustą, kuris turėjo funkcijas, kurių aš ieškojau, ir kainavo protingai. Lustas, ant kurio nusileidau, buvo PIC18F24K50.
Turėdamas 23 įvesties/išvesties kaiščius, tai suteikė man šias funkcijas
- „Digtal I/O“
- I2C
- SPI
- UART
- PWM x 2
- Servo variklis x 6
- ADC įvestis x 3
- DAC išėjimas x 1
- Įvestis/išvestis varoma nuo 5 V arba 3 V3
- Būsenos šviesos diodas
Vienas pasirinkto IC trūkumas yra tas, kad jis turi tik vieną UART išorinį įrenginį, todėl naudojant „Bluetooth“ar „Wifi“valdymo metodą nebegalėsite naudotis UART ryšiu.
Aukščiau esančiuose paveikslėliuose parodyta baigta schema ir PCB.
2 žingsnis: Protokolo kūrimas
Pirmasis žingsnis kuriant protokolą yra nuspręsti, ko konkrečiai jums reikės, kad lenta galėtų tai padaryti. Sugriauti dalykus suteikia geresnį valdymo lygį, o šukavimas kartu supaprastina sąsają ir sumažina komunikacijos srautą tarp plokštės ir kompiuterio. Tai pusiausvyros žaidimas, kurį sunku ištobulinti.
Kiekvienai lentos funkcijai turėtumėte nurodyti visus parametrus ir grąžą. Pavyzdžiui, funkcija, skirta skaityti ADC įvestį, gali turėti parametrą, nurodantį, kurį įvestį imti, ir grąžinimo vertę, kurioje yra rezultatas.
Savo projekte čia yra funkcijų, kurias norėjau įtraukti, sąrašas:
-
Skaitmeninis įvestis/išvestis
- „SetPin“(„PinNumber“, būsena)
- Būsena = „GetPin“(„PinNumber“)
-
SPI
- Inicijuoti (SPI režimas)
- „DataIn“= perdavimas („DataOut“)
- „ControlChipSelect“(kanalas, valstija)
- „SetPrescaler“(norma)
-
I2C
- Inicijuoti ()
- Pradėti ()
- Perkrauti ()
- Sustabdyti ()
- SlaveAck = Siųsti („DataOut“)
- DataIn = gauti (paskutinis)
-
UART
- Inicijuoti ()
- TX baitas („DataOut“)
- BytesAvailable = RX skaičius ()
- DataIn = RX baitas ()
- „SetBaud“(„Baud“)
-
PWM
- Įgalinti (kanalas)
- Išjungti (kanalas)
- „SetFrequency“(kanalas, dažnis)
- „GetMaxDuty“(pareiga)
- „SetDuty“(pareiga)
-
Servo
- Įgalinti (kanalas)
- Išjungti (kanalas)
- „SetPosition“(kanalas, pozicija)
-
ADC
ADCsample = Pavyzdys (kanalas)
-
DAC
- Įgalinti
- Išjungti
- SetOutput (įtampa)
-
BEVIELIS INTERNETAS
- SetSSID (SSID)
- Nustatyti slaptažodį (slaptažodį)
- Būsena = CheckConnectionStatus ()
- IP = „GetIPAddress“()
Parametrai rodomi skliausteliuose, o grąžos - prieš simbolį lygus.
Prieš pradėdamas koduoti, kiekvienai funkcijai priskiriu komandos kodą, pradedant nuo 128 (dvejetainis 0b10000000) ir einant aukštyn. Aš visiškai dokumentuoju protokolą, kad įsitikinčiau, jog kai mano galva yra kodu, turiu gražų dokumentą, į kurį galiu grįžti. Pridedamas visas šio projekto protokolo dokumentas, kuriame yra gaunamų komandų kodai ir bitų pločiai.
3 žingsnis: programinės įrangos kūrimas
Nustačius protokolą, reikia įdiegti aparatinės įrangos funkcionalumą.
Kurdamas vergines sistemas, taikau paprastą būsenos mašinos tipo metodą, kad galėčiau maksimaliai padidinti galimą komandų ir duomenų pralaidumą, o programinę įrangą būtų paprasta suprasti ir derinti. Jei reikia geresnės sąveikos su kitais prijungtais įrenginiais, vietoj to galima naudoti pažangesnę sistemą, tokią kaip „Modbus“, tačiau tai prideda pridėtinių išlaidų, kurios sulėtins situaciją.
Būsenos mašina susideda iš trijų būsenų:
1) Komandų laukimas
2) parametrų priėmimas
3) Atsakyti
Trys valstybės sąveikauja taip:
1) Mes einame per gaunamus baitus buferyje, kol turime baitą, kuriame yra svarbiausias bitų rinkinys. Gavę tokį baitą, mes jį patikriname pagal žinomų komandų sąrašą. Jei randame atitikimą, priskiriame parametrų baitų skaičių ir grąžiname baitus, kad jie atitiktų protokolą. Jei nėra parametrų baitų, mes galime čia atlikti komandą ir pereiti prie 3 būsenos arba iš naujo paleisti būseną 1. Jei yra parametrų baitų, pereiname prie 2 būsenos.
2) Mes einame per gaunamus baitus, juos išsaugodami, kol išsaugosime visus parametrus. Kai turime visus parametrus, vykdome komandą. Jei yra grąžinimo baitų, pereiname prie 3 etapo. Jei nėra grąžintinų baitų, mes grįžtame į 1 etapą.
3) Mes einame per gaunamus baitus ir už kiekvieną baitą perrašome aido baitą su galiojančiu grąžinimo baitu. Išsiuntę visus grąžinimo baitus, grįžtame į 1 etapą.
Aš naudojau „Flowcode“kurdamas programinę -aparatinę įrangą, nes ji puikiai vizualiai parodo, ką darau. Tą patį galima padaryti ir „Arduino“ar kitomis įterptosiomis programavimo kalbomis.
Pirmasis žingsnis yra užmegzti ryšį su kompiuteriu. Norėdami tai padaryti, „micro“turi būti sukonfigūruotas taip, kad veiktų tinkamu greičiu, ir mes turime pridėti kodą, kad galėtume valdyti USB ir UART išorinius įrenginius. „Flowcode“tai taip pat paprasta, kaip į projektą įterpti USB nuoseklųjį komponentą ir UART komponentą iš „Comms“komponento meniu.
Pridedame RX pertraukimą ir buferį, kad gautume gaunamas UART komandas, ir reguliariai apklausiame USB. Tada laisvalaikio metu galime naudoti buferį.
Pridedamas „Flowcode“projektas ir sukurtas C kodas.
4 žingsnis: sąsaja naudojant srauto kodą
„Flowcode“modeliavimas yra labai galingas ir leidžia mums sukurti komponentą kalbėtis su lenta. Kurdami komponentą dabar galime tiesiog nuvilkti komponentą į savo projektą ir iš karto turėti prieinamas plokštės funkcijas. Kaip papildoma premija, bet koks esamas komponentas, turintis SPI, I2C arba UART periferinius įrenginius, gali būti naudojamas modeliavimui, o komunikacijų duomenys gali būti siunčiami į sąsajos plokštę per purkštuvo komponentą. Pridedamuose paveikslėliuose rodoma paprasta programa, skirta spausdinti pranešimą į ekraną. „Comms“duomenys, kurie siunčiami per sąsajos plokštę į faktinę ekrano aparatūrą ir komponentų sąranką naudojant „I2C Display“, „I2C“purkštukų ir sąsajos plokštės komponentus.
Naujasis „Flowcode 8.1“SCADA režimas yra absoliuti papildoma premija, nes tada galime pasiimti programą, kuri ką nors daro „Flowcode“simuliatoriuje, ir eksportuoti ją taip, kad ji veiktų atskirai bet kuriame kompiuteryje be jokių licencijavimo problemų. Tai gali būti puiku tokiems projektams kaip bandymo įrenginiai ar jutiklių grupės.
Aš naudoju šį SCADA režimą, norėdamas sukurti WIFI konfigūravimo įrankį, kuris gali būti naudojamas sukonfigūruoti SSID ir slaptažodį, taip pat surinkti modulio IP adresą. Tai leidžia man viską nustatyti naudojant USB jungtį ir tada, kai viskas veikia, perkelti į WIFI tinklo ryšį.
Pridedami keli projektų pavyzdžiai.
5 žingsnis: kiti sąsajos metodai
Be „Flowcode“, bendraudami su sąsajos lenta, galite naudoti pasirinktą programavimo kalbą. Mes naudojome „Flowcode“, nes joje jau buvo įtraukta dalių biblioteka, kurią galėjome nedelsiant pradėti naudoti, tačiau tai taip pat taikoma daugeliui kitų kalbų.
Čia yra kalbų ir būdų, kaip bendrauti su sąsajos lenta, sąrašas.
„Python“- serijinės bibliotekos naudojimas duomenims perduoti į COM prievadą arba IP adresą
„Matlab“- failų komandų naudojimas duomenims srautu perduoti į COM prievadą arba IP adresą
C ++ / C# / VB - naudojant iš anksto parašytą DLL, tiesiogiai pasiekiant COM prievadą arba „Windows“TCP / IP API
„Labview“- naudojant iš anksto parašytą DLL, VISA serijos komponentą arba TCP/IP komponentą
Jei kas nors norėtų, kad minėtos kalbos būtų įdiegtos, praneškite man.
6 žingsnis: paruoštas produktas
Gatavas produktas tikriausiai bus svarbi mano įterpto įrankių rinkinio savybė daugelį metų. Tai jau padėjo man sukurti komponentus įvairiems „Grove“ekranams ir jutikliams. Dabar galiu visiškai prikalti kodą prieš imdamasis kompiliavimo ar programavimo klaidų.
Aš netgi išdalinau keletą lentų kolegoms, kad jie taip pat galėtų pagerinti savo darbo eigą, ir jos buvo labai gerai įvertintos.
Dėkojame, kad perskaitėte mano „Instructable“. Tikiuosi, kad tai jums buvo naudinga, ir tikiuosi, kad tai įkvėps jus kurti savo įrankius, kad padidintumėte produktyvumą.
Rekomenduojamas:
Universali įvesties/išvesties išplėtimo plokštė, skirta valdyti daugelį „Nixie“vamzdžių naudojant I2C: 9 žingsniai (su nuotraukomis)
Universali įvesties/išvesties išplėtimo plokštė, skirta valdyti daugelį „Nixie“vamzdžių su „I2C“: šiuo metu labai įdomu prikelti senovinius „nixie“vamzdelius. Rinkoje galima rasti daugybę „nixie“vamzdinių laikrodžių rinkinių. Atrodė, kad net buvo gyvybingai prekiaujama senomis rusiškų niuksinių vamzdžių atsargomis. Taip pat čia apie instrukcijas
Ryškumo valdymas PWM pagrįstas LED valdymas naudojant mygtukus, „Raspberry Pi“ir „Scratch“: 8 žingsniai (su nuotraukomis)
Ryškumo valdymas PWM pagrįstas LED valdymas naudojant mygtukus, „Raspberry Pi“ir „Scratch“: bandžiau rasti būdą, kaip paaiškinti, kaip PWM veikė mano mokiniams, todėl iškėliau sau užduotį pabandyti valdyti šviesos diodo ryškumą naudojant du mygtukus - vienas mygtukas padidina šviesos diodo ryškumą, o kitas - jį pritemdo. Programa
UCL - įterpta - įspėjimų sistema - RC automobilis: 7 žingsniai
UCL - įterpta - įspėjimų sistema - RC automobilis: Šiame projekte aš sukūriau paprastą įspėjimo sistemą logistikos robotams. Iš esmės tai yra RC automobilis su ultragarsiniu jutikliu priekyje ir kliūčių vengimo jutikliu gale. Automobilis valdomas per „Bluetooth“programėlę
Kaip gauti muzikos iš beveik bet kurios (Haha) svetainės (jei tik galite ją išgirsti, galite ją gauti Gerai, jei ji įterpta į „Flash“, galbūt negalėsite) REDAGUOTA !!!!! Pridėta informacija: 4 žingsniai
Kaip gauti muzikos iš beveik bet kurios (Haha) svetainės (jei tik galite ją išgirsti, galite ją gauti … Gerai, jei ji įterpta į „Flash“, galbūt negalėsite) REDAGUOTA !!!!! Pridėta informacija: jei jūs kada nors einate į svetainę ir ji groja jums patinkančią ir norimą dainą, tada čia yra nurodymas, kad jūs nesate mano kaltė, jei ką nors sujauksite (vienintelis būdas tai padaryti bus, jei pradėsite ištrinti medžiagą be priežasties) ) man pavyko gauti muzikos
Universali apsauga nuo vagysčių elektroninei įrangai ar automobiliams su nematomu jungikliu: 4 žingsniai (su nuotraukomis)
Universali (vagystės) elektroninės įrangos ar automobilių apsauga su nematomu jungikliu: parodysiu, kaip galite naudoti nendrinį jungiklį kaip universalią elektroninės įrangos ar automobilių apsaugą. Viskas, ko jums reikia, yra nendrinis jungiklis ir magnetas. Automobiliams jums reikės maitinimo relės, kad padidintumėte nendrinio jungiklio perjungimo pajėgumą. Paveikslėlis