Cuprins:
- Pasul 1: Proiectarea PCB-ului
- Pasul 2: Proiectarea protocolului
- Pasul 3: Proiectarea firmware-ului
- Pasul 4: interfațarea prin Flowcode
- Pasul 5: Alte metode de interfațare
- Pasul 6: Produsul finit
Video: Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
De multe ori găsesc că creez biblioteci pentru noi module încorporate de la zero, pe baza fișei tehnice a dispozitivului. La generarea bibliotecii, mă simt blocat într-un ciclu de cod, compilez, programez și testez atunci când mă asigur că lucrurile funcționează și sunt fără erori. Adesea, timpul de compilare și de programare poate fi mult mai mare decât timpul necesar editării codului, astfel încât o modalitate de a tăia acești pași atunci când se dezvoltă ar fi foarte utilă.
De asemenea, găsesc adesea că vreau să interfațez un modul încorporat cu un computer. Dacă modulul nu are o conexiune USB specifică, ceea ce este adesea cazul, atunci trebuie să cumpărați în general un convertor USB prea scump care să facă o singură treabă, cum ar fi doar SPI sau doar I2C.
Din aceste motive am decis să creez placa de interfață universală. Este conceput pentru a permite comunicații ușoare pe PC cu module încorporate.
Caracteristicile interfeței încorporate ale plăcii pe care m-am stabilit includ.
- I / O digitală
- I2C
- SPI
- UART
- PWM
- Servo motor
- Intrare ADC
- Ieșire DAC
Toate acestea pot fi utilizate complet independent.
Placa de interfață poate fi controlată printr-o conexiune USB la computer, dar are și conexiuni opționale WIFI sau modul Bluetooth pentru a permite utilizarea plăcii de la distanță sau într-un scenariu de tip IoT.
Folosind anteturi SIL standard de 2,54 mm, este posibilă conectarea directă a cablurilor dupont feminine între placă și modulul încorporat, permițând conexiuni rapide, fiabile și fără lipire.
De asemenea, m-am gândit să adaug lucruri precum CAN, LIN, H-bridge etc, dar acestea pot veni mai târziu cu o revizuire v2.
Pasul 1: Proiectarea PCB-ului
Când proiectez PCB-ul, îmi place să încerc să păstrez lucrurile cât mai simplu posibil. Când veți construi plăci manual, este important să adăugați componente numai atunci când îndeplinesc un scop specific și să utilizeze cât mai multe caracteristici interne ale microcontrolerului.
Privind furnizorul meu preferat de electronice, am găsit un cip cu care mă simțeam confortabil, care avea funcțiile pe care le căutam și era un cost rezonabil. Cipul pe care am aterizat a fost PIC18F24K50.
Cu cele 23 de pini I / O disponibile, acest lucru mi-a permis aceste caracteristici
- I / O Digtal
- I2C
- SPI
- UART
- PWM x 2
- Servomotor x 6
- Intrare ADC x 3
- Ieșire DAC x 1
- I / O acționat de la 5V sau 3V3
- LED de stare
Un dezavantaj al IC-ului pe care l-am ales este că are doar un periferic UART și, prin urmare, utilizarea metodei de control Bluetooth sau Wifi vă va împiedica să utilizați conexiunea UART.
În imaginile de mai sus sunt prezentate schema finală și PCB.
Pasul 2: Proiectarea protocolului
Primul pas în proiectarea protocolului este de a decide ce anume veți avea nevoie pentru a putea face placa. Despărțirea lucrurilor adaugă un nivel mai bun de control, în timp ce combinerea lucrurilor împreună simplifică interfața și reduce traficul de comunicări între placă și computer. Este un joc de echilibru și greu de perfecționat.
Pentru fiecare funcție a plăcii ar trebui să indicați parametrii și returnările. De exemplu, o funcție de citire a unei intrări ADC ar putea avea un parametru pentru a specifica ce intrare să fie eșantionată și o valoare de returnare care conține rezultatul.
În designul meu, aici este lista funcțiilor pe care am vrut să le includ:
-
I / O digitală
- SetPin (PinNumber, State)
- State = GetPin (PinNumber)
-
SPI
- Inițializare (mod SPI)
- DataIn = Transfer (DataOut)
- ControlChipSelect (Canal, Stat)
- SetPrescaler (Rate)
-
I2C
- Inițializați ()
- Start ()
- Repornire ()
- Stop ()
- SlaveAck = Trimite (DataOut)
- DataIn = Receive (Last)
-
UART
- Inițializați ()
- TX Byte (DataOut)
- BytesAvailable = Număr RX ()
- DataIn = RX Byte ()
- SetBaud (Baud)
-
PWM
- Activați (canal)
- Dezactivează (canal)
- SetFrequency (Canal, Frecvență)
- GetMaxDuty (Duty)
- SetDuty (Duty)
-
Servo
- Activați (canal)
- Dezactivează (canal)
- SetPosition (canal, poziție)
-
ADC
ADCsample = eșantion (canal)
-
DAC
- Permite
- Dezactivează
- SetOutput (Tensiune)
-
WIFI
- SetSSID (SSID)
- Setați parola (parola)
- Status = CheckConnectionStatus ()
- IP = GetIPAddress ()
Parametrii sunt afișați între paranteze și returnările sunt afișate înainte de simbolul egal.
Înainte de a începe codificarea, atribuie fiecărei funcții un cod de comandă începând de la 128 (binar 0b10000000) și lucrând în sus. Documentez protocolul pe deplin pentru a mă asigura că, odată ce capul meu este în cod, am un document frumos la care să mă refer înapoi. Documentul complet de protocol pentru acest proiect este atașat și include codurile de comandă primite și lățimile de biți.
Pasul 3: Proiectarea firmware-ului
Odată ce protocolul este stabilit, este vorba despre implementarea funcționalității pe hardware.
Adopt o abordare simplă de tip mașină de stat atunci când dezvolt sisteme slave pentru a încerca să maximizez comanda potențială și transferul de date, păstrând în același timp firmware-ul simplu de înțeles și depanat. Un sistem mai avansat, cum ar fi Modbus, ar putea fi utilizat în loc dacă aveți nevoie de o interacțiune mai bună cu alte dispozitive conectate, dar acest lucru adaugă cheltuieli generale care vor încetini lucrurile.
Mașina de stări constă din trei stări:
1) Se așteaptă comenzi
2) Parametrii de recepție
3) Răspundeți
Cele trei stări interacționează după cum urmează:
1) Trecem prin octeții primiți în buffer până când avem un octet care are setul de biți cel mai semnificativ. Odată ce primim un astfel de octet, îl verificăm cu o listă de comenzi cunoscute. Dacă găsim o potrivire, atunci atribuim numărul de octeți de parametri și returnăm octeți pentru a se potrivi cu protocolul. Dacă nu există octeți de parametri, atunci putem executa comanda aici și fie să trecem la starea 3, fie să repornim starea 1. Dacă există octeți de parametri, atunci trecem la starea 2.
2) Parcurgem octeții de intrare salvându-i până când am stocat toți parametrii. Odată ce avem toți parametrii, executăm comanda. Dacă există octeți de întoarcere, atunci trecem la etapa 3. Dacă nu există octeți de întoarcere de trimis, ne întoarcem la etapa 1.
3) Trecem prin octeții primiți și pentru fiecare octet suprascriem octetul ecou cu un octet de returnare valid. Odată ce am trimis toți octeții de întoarcere ne întoarcem la etapa 1.
Am folosit Flowcode pentru a proiecta firmware-ul, deoarece demonstrează frumos vizual ceea ce fac. Același lucru s-ar putea face la fel de bine în Arduino sau în alte limbaje de programare încorporate.
Primul pas este stabilirea comunicațiilor cu computerul. Pentru a face acest lucru, micro trebuie să fie configurat pentru a rula la viteza corectă și trebuie să adăugăm cod pentru a conduce perifericele USB și UART. În Flowcode, acest lucru este la fel de ușor ca să trageți în proiect o componentă USB Serial și o componentă UART din meniul componente Comms.
Adăugăm o întrerupere RX și un tampon pentru a prinde comenzile primite pe UART și interogăm în mod regulat USB-ul. Putem apoi, în timpul liber, să procesăm tamponul.
Sunt atașate proiectul Flowcode și codul C generat.
Pasul 4: interfațarea prin Flowcode
Simularea Flowcode este foarte puternică și ne permite să creăm o componentă pentru a vorbi cu placa. Prin crearea componentei, acum putem pur și simplu trage componenta în proiectul nostru și avem instantaneu funcțiile plăcii disponibile. Ca bonus suplimentar, orice componentă existentă care are un periferic SPI, I2C sau UART poate fi utilizată în simulare și datele de comunicare pot fi transmise către placa de interfață printr-o componentă Injector. Imaginile atașate arată un program simplu pentru a imprima un mesaj pe ecran. Datele de comunicare care sunt trimise prin placa de interfață către hardware-ul de afișare real și configurarea componentelor cu componentele I2C Display, I2C Injector și Interface Board.
Noul mod SCADA pentru Flowcode 8.1 este un bonus adăugat absolut prin faptul că putem lua apoi un program care face ceva în simulatorul Flowcode și îl putem exporta astfel încât să ruleze singur pe orice PC fără probleme de licențiere. Acest lucru ar putea fi excelent pentru proiecte precum platforme de testare sau clustere de senzori.
Folosesc acest mod SCADA pentru a crea instrumentul de configurare WIFI care poate fi utilizat pentru a configura SSID și parola, precum și pentru a colecta adresa IP a modulului. Acest lucru îmi permite să configurez totul folosind conexiunea USB și apoi să transfer pe o conexiune de rețea WIFI odată ce lucrurile rulează.
Sunt atașate câteva exemple de proiecte.
Pasul 5: Alte metode de interfațare
Pe lângă Flowcode, puteți folosi destul de mult limbajul de programare la alegere pentru a comunica cu placa de interfață. Am folosit Flowcode întrucât avea deja inclusă o bibliotecă de piese pe care am putea să o punem în funcțiune imediat, dar acest lucru este valabil și pentru multe alte limbi.
Iată o listă de limbi și metode pentru a comunica cu placa de interfață.
Python - Utilizarea unei biblioteci seriale pentru a transmite date către un port COM sau o adresă IP
Matlab - Utilizarea comenzilor File pentru a transmite date către un port COM sau o adresă IP
C ++ / C # / VB - Folosind fie un DLL pre-scris, accesând direct portul COM sau Windows TCP / IP API
Labview - Folosind fie un DLL pre-scris, componentul serial VISA, fie componenta TCP / IP
Dacă cineva ar dori să vadă implementarea limbilor de mai sus, vă rugăm să ne anunțați.
Pasul 6: Produsul finit
Produsul finit va fi probabil o caracteristică importantă în trusa mea de instrumente încorporată pentru anii următori. Deja m-a ajutat să dezvolt componente pentru diverse afișaje și senzori Grove. Acum pot obține codul complet blocat înainte de a recurge la orice compilație sau programare shenanigans.
Am împărțit chiar și niște tablouri pentru colegi, astfel încât să își poată îmbunătăți și fluxul de lucru și acestea au fost foarte bine primite.
Vă mulțumim că ați citit Instructable-ul meu. Sper că l-ați găsit util și sperăm că vă va inspira să vă creați propriile instrumente pentru a vă accelera productivitatea.
Recomandat:
Noțiuni introductive despre interfața senzorului I2C ?? - Interfață MMA8451 folosind ESP32s: 8 pași
Noțiuni introductive despre interfața senzorului I2C ?? - Interfața MMA8451 folosind ESP32s: În acest tutorial, veți afla totul despre cum să porniți, să conectați și să obțineți dispozitivul I2C (accelerometru) care funcționează cu controlerul (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Sistem automat de trecere feroviară utilizând platforma încorporată bazată pe Arduino: 9 pași
Sistem automat de trecere feroviară utilizând platforma încorporată bazată pe Arduino: Crăciunul este la doar o săptămână distanță! Toată lumea este ocupată cu sărbătorile și cu obținerea de cadouri, ceea ce, de altfel, devine cu atât mai dificil de obținut cu posibilități nesfârșite în jurul nostru. Ce zici să mergi cu un cadou clasic și să adaugi o notă de bricolaj la
Joc inteligent de baschet arcade cu cercuri de numărare a scorurilor folosind platforma încorporată Evive- Arduino: 13 pași
Joc inteligent de baschet arcade cu cercuri de numărare a scorurilor folosind platforma încorporată Evive- Arduino: Dintre toate jocurile de acolo, cele mai distractive sunt jocurile arcade. Deci, ne-am gândit de ce să nu facem unul singur acasă! Și iată-ne, cel mai distractiv joc DIY pe care l-ai fi jucat până acum - DIY Arcade Basketball Game! Nu numai că este
Cum se construiește un cablu de consolă pentru placa universală .: 11 pași
Cum se construiește un cablu de consolă pentru PCB-ul universal: Proiectul PCB universal (UPCB pe scurt) a fost început pentru a permite un singur controler de joc, în special bastoane de luptă, pe cât mai multe console diferite. Informații despre proiect pot fi găsite pe următorul fir de pe Shoryuken.com
Cum se construiește un cablu USB pentru placa universală: 11 pași
Cum să construiți un cablu USB pentru PCB-ul universal: Proiectul PCB universal (UPCB pe scurt) a fost început pentru a permite un singur controler de joc, în special stick-uri de luptă, pe cât mai multe console diferite. Informații despre proiect pot fi găsite pe următorul fir de pe Shoryuken.com