Cuprins:

Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI: 6 pași
Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI: 6 pași

Video: Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI: 6 pași

Video: Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI: 6 pași
Video: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Noiembrie
Anonim
Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI
Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI
Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI
Placă de interfață universală încorporată - Control USB / Bluetooth / WIFI

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

Proiectarea PCB-ului
Proiectarea PCB-ului
Proiectarea PCB-ului
Proiectarea PCB-ului
Proiectarea PCB-ului
Proiectarea PCB-ului
Proiectarea PCB-ului
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

Proiectarea protocolului
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

Proiectarea firmware-ului
Proiectarea firmware-ului
Proiectarea firmware-ului
Proiectarea firmware-ului
Proiectarea firmware-ului
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

Interfață prin Flowcode
Interfață prin Flowcode
Interfață prin Flowcode
Interfață prin Flowcode
Interfață prin Flowcode
Interfață 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

Produs finit
Produs finit
Produs finit
Produs finit
Produs finit
Produs 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: