INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Ek vind gereeld dat ek biblioteke vir nuwe ingebedde modules van nuuts af skep, gebaseer op die datablad van die toestel. By die opstel van die biblioteek vind ek dat ek vasloop in 'n siklus van kode, saamstel, programmeer en toets om te verseker dat dinge werk en foutloos is. Die opstel- en programtye kan dikwels baie langer wees as die tyd wat dit neem om die kode te wysig, en 'n manier om hierdie stappe by die ontwikkeling uit te skakel, is baie handig.
Ek vind ook gereeld dat ek 'n ingeslote module met 'n rekenaar wil koppel. As die module nie spesifiek 'n USB -verbinding het nie, wat gewoonlik die geval is, moet u gewoonlik 'n duur USB -omskakelaar koop wat net 'n enkele taak verrig, soos net SPI of net I2C.
Om hierdie redes het ek besluit om 'n universele koppelvlakbord te skep. Dit is ontwerp om maklike rekenaargebaseerde kommunikasie met ingebedde modules moontlik te maak.
Die ingeboude koppelvlakkenmerke van die bord waarop ek besluit het, sluit in.
- Digitale I/O
- I2C
- SPI
- UART
- PWM
- Servomotor
- ADC -invoer
- DAC uitset
Almal kan heeltemal onafhanklik gebruik word.
Die koppelvlakbord kan beheer word via 'n USB -verbinding met die rekenaar, maar het ook opsionele WIFI- of Bluetooth -moduleverbindings sodat die kaart op afstand of in 'n IoT -tipe scenario gebruik kan word.
Deur standaard SIL -kopstukke van 2,54 mm te gebruik, is dit moontlik om vroulike dupontkabels direk tussen die bord en die ingeboude module aan te sluit, wat vinnige, betroubare en soldeervrye verbindings moontlik maak.
Ek het ook daaraan gedink om dinge soos CAN, LIN, H-bridge ens by te voeg, maar dit kan later met 'n v2-hersiening kom.
Stap 1: Ontwerp die PCB
By die ontwerp van die PCB probeer ek dinge so eenvoudig as moontlik hou. As u planke met die hand gaan bou, is dit belangrik om slegs komponente by te voeg wanneer dit 'n spesifieke doel het en soveel moontlik interne funksies van die mikrobeheerder te gebruik.
As ek na die elektroniese verskaffer van my voorkeur kyk, vind ek 'n chip waarmee ek gemaklik was, met die funksies waarna ek gesoek het en teen 'n redelike prys was. Die chip waarop ek beland het, was die PIC18F24K50.
Met die beskikbare 23 I/O -penne het dit my hierdie funksies toegelaat
- Digtal I/O
- I2C
- SPI
- UART
- PWM x 2
- Servomotor x 6
- ADC -invoer x 3
- DAC -uitgang x 1
- I/O aangedryf vanaf 5V of 3V3
- Status LED
Een nadeel van die IC wat ek gekies het, is dat dit slegs een UART -randapparaat het, en as u die Bluetooth- of Wifi -beheermetode gebruik, kan u nie die UART -verbinding gebruik nie.
Die voltooide skema en PCB word in die bostaande beelde getoon.
Stap 2: Ontwerp die protokol
Die eerste stap in die ontwerp van die protokol is om te besluit wat u spesifiek nodig het om die bord te kan doen. Deur dinge op te breek, word dit beter beheer, terwyl die kombinasie van die koppelvlak die koppelvlak vergemaklik en die verkeer tussen die bord en die rekenaar verminder. Dit is 'n balans spel en moeilik om te vervolmaak.
Vir elke funksie van die bord moet u enige parameters en opbrengste aandui. Byvoorbeeld, 'n funksie om 'n ADC -invoer te lees, kan 'n parameter hê om te spesifiseer watter insette geneem moet word en 'n opbrengswaarde wat die resultaat bevat.
In my ontwerp is die lys van funksies wat ek wou insluit:
-
Digitale I/O
- SetPin (PinNumber, staat)
- Staat = GetPin (PinNumber)
-
SPI
- Initialiseer (SPI -modus)
- DataIn = Oordrag (DataOut)
- ControlChipSelect (kanaal, staat)
- SetPrescaler (tarief)
-
I2C
- Initialiseer ()
- Begin ()
- Begin oor ()
- Stop ()
- SlaveAck = Stuur (DataOut)
- DataIn = Ontvang (Laaste)
-
UART
- Initialiseer ()
- TX Byte (DataOut)
- BytesAvailable = RX -telling ()
- DataIn = RX Byte ()
- SetBaud (Baud)
-
PWM
- Aktiveer (kanaal)
- Deaktiveer (kanaal)
- Stelfrekwensie (kanaal, frekwensie)
- GetMaxDuty (plig)
- Stel plig (plig)
-
Servo
- Aktiveer (kanaal)
- Deaktiveer (kanaal)
- SetPosition (kanaal, posisie)
-
ADC
ADCsample = Voorbeeld (kanaal)
-
DAC
- Aktiveer
- Deaktiveer
- SetOutput (spanning)
-
WIFI
- StelSSID (SSID)
- Stel wagwoord (wagwoord)
- Status = CheckConnectionStatus ()
- IP = GetIPAddress ()
Parameters word tussen hakies getoon en opbrengste word voor die gelyke simbool getoon.
Voordat ek begin kodeer, ken ek elke funksie 'n opdragkode toe vanaf 128 (binêre 0b10000000) en werk opwaarts. Ek dokumenteer die protokol volledig om te verseker dat sodra my kop in die kode is, ek 'n mooi dokument het om na terug te verwys. Die volledige protokol dokument vir hierdie projek is aangeheg en bevat inkomende opdragkodes en bitwydtes.
Stap 3: Ontwerp die firmware
Sodra die protokol opgestel is, is dit die geval om die funksionaliteit op die hardeware te implementeer.
Ek gebruik 'n eenvoudige benadering tot die toestand van 'n masjien by die ontwikkeling van slawestelsels om die potensiële opdrag- en data -deurvoer te maksimeer, terwyl ek die firmware eenvoudig verstaan en ontfout. 'N Meer gevorderde stelsel soos Modbus kan in plaas daarvan gebruik word as u beter interaksie met ander gekoppelde toestelle benodig, maar dit dra by tot die koste wat die stadiger sal maak.
Die staatsmasjien bestaan uit drie state:
1) Wag vir opdragte
2) Ontvang parameters
3) Antwoord
Die drie state werk soos volg in:
1) Ons gaan deur die inkomende grepe in die buffer totdat ons 'n greep het met die belangrikste bitset. Sodra ons so 'n byte ontvang, kontroleer ons dit op 'n lys met bekende opdragte. As ons 'n ooreenkoms vind, ken ons die aantal parametergrepe toe en gee grepe terug om by die protokol te pas. As daar geen parametergrepe is nie, kan ons die opdrag hier uitvoer en óf oorgaan na toestand 3 óf herbegin toestand 1. As daar parametergrepe is, gaan ons na staat 2.
2) Ons gaan deur die inkomende grepe en stoor dit totdat ons al die parameters gestoor het. Sodra ons al die parameters het, voer ons die opdrag uit. As daar retoergrepe is, gaan ons na fase 3. As daar geen returgrepe is om te stuur nie, keer ons terug na stadium 1.
3) Ons gaan deur die inkomende grepe en vir elke byte oorskryf ons die echo -byte met 'n geldige retourbyte. Sodra ons al die retourgrepe gestuur het, keer ons terug na stadium 1.
Ek het Flowcode gebruik om die firmware te ontwerp, aangesien dit visueel aantoon wat ek doen. Dieselfde kan net so goed gedoen word in Arduino of ander ingebedde programmeertale.
Die eerste stap is om kommunikasie met die rekenaar te vestig. Om dit te kan doen, moet die mikro gekonfigureer word om op die regte spoed te werk, en ons moet kode byvoeg om die USB- en UART -randapparatuur aan te dryf. In Flowcode is dit so maklik soos om 'n USB Serial -komponent en 'n UART -komponent uit die Comms -komponentmenu na die projek te sleep.
Ons voeg 'n RX -onderbreking en buffer by om inkomende opdragte op die UART op te vang, en ons vra gereeld die USB. Ons kan dan die buffer in ons vrye tyd verwerk.
Die Flowcode -projek en die gegenereerde C -kode is aangeheg.
Stap 4: Koppelvlak via stroomstroomkode
Die Flowcode -simulasie is baie kragtig en stel ons in staat om 'n komponent te skep om met die bord te praat. By die skepping van die komponent kan ons die komponent nou eenvoudig na ons projek sleep en die bordfunksies onmiddellik beskikbaar hê. As 'n bykomende bonus kan enige bestaande komponent met 'n SPI-, I2C- of UART -randapparaat in die simulasie gebruik word en kan die kommsdata via 'n inspuitkomponent na die koppelvlakbord gestuur word. Die aangehegte beelde toon 'n eenvoudige program om 'n boodskap na die skerm te druk. Die kommunikasiedata wat via die koppelvlakbord na die werklike skermhardeware gestuur word en die komponentopstelling met I2C Display-, I2C Injector- en Interface Board -komponente.
Die nuwe SCADA -modus vir Flowcode 8.1 is 'n absolute bykomende bonus, omdat ons dan 'n program kan neem wat iets in die Flowcode -simulator doen en dit kan uitvoer sodat dit alleen op enige rekenaar kan werk sonder probleme met lisensiëring. Dit kan ideaal wees vir projekte soos toetsriglyne of sensorgroepe.
Ek gebruik hierdie SCADA -modus om die WIFI -konfigurasiehulpmiddel te skep wat gebruik kan word om die SSID en wagwoord op te stel, asook om die IP -adres van die module te versamel. Dit stel my in staat om alles op te stel met behulp van die USB -verbinding en dan oor te skakel na 'n WIFI -netwerkverbinding sodra dinge aan die gang is.
Enkele voorbeeldprojekte is aangeheg.
Stap 5: Ander koppelvlakmetodes
Benewens Flowcode, kan u ook die gewenste programmeertaal gebruik om met die koppelvlakbord te kommunikeer. Ons het Flowcode gebruik, aangesien dit 'n biblioteek met dele bevat wat ons onmiddellik aan die gang kon kry, maar dit geld ook vir baie ander tale.
Hier is 'n lys van tale en metodes om met die koppelvlakbord te kommunikeer.
Python - Gebruik 'n seriële biblioteek om data na 'n COM -poort of IP -adres te stroom
Matlab - Gebruik lêeropdragte om data na 'n COM -poort of IP -adres te stroom
C ++ / C# / VB - Gebruik óf 'n voorafgeskrewe DLL, direk toegang tot die COM -poort of Windows TCP / IP API
Labview - Gebruik 'n voorafgeskrewe DLL, die VISA Serial -komponent of TCP/IP -komponent
As iemand die bogenoemde tale wil implementeer, laat weet my asseblief.
Stap 6: Klaar produk
Die finale produk sal waarskynlik nog jare lank 'n prominente kenmerk in my ingeboude gereedskapstel wees. Dit het my al gehelp om komponente vir verskillende Grove -uitstallings en sensors te ontwikkel. Ek kan nou die kode heeltemal vasgespyker kry voordat ek 'n samestelling of programmeerprogram gebruik.
Ek het selfs 'n paar borde vir kollegas uitgedeel, sodat hulle ook hul werkvloei kan verbeter, en dit is baie goed ontvang.
Dankie dat u my Instructable gelees het; ek hoop dat u dit nuttig gevind het, en hopelik sal dit u inspireer om u eie gereedskap te skep om u produktiwiteit te bespoedig.