Indholdsfortegnelse:
- Trin 1: Design af printkortet
- Trin 2: Design af protokollen
- Trin 3: Design af firmwaren
- Trin 4: Grænseflade via flowkode
- Trin 5: Andre grænseflademetoder
- Trin 6: Færdig produkt
Video: Embedded Universal Interface Board - USB/Bluetooth/WIFI Control: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Jeg finder ofte, at jeg opretter biblioteker til nye integrerede moduler fra bunden baseret på enhedsdatabladet. Ved generering af biblioteket finder jeg, at jeg sidder fast i en cyklus af kode, kompilere, programmere og teste, når jeg sikrer, at tingene fungerer og er fejlfrie. Ofte kan kompilering og programmeringstider være meget længere end den tid, det tager at redigere koden, og derfor ville en måde at afskære disse trin ved udvikling være meget praktisk.
Jeg finder også ofte, at jeg vil interface et integreret modul med en pc. Hvis modulet ikke specifikt har en USB -forbindelse, hvilket ofte er tilfældet, skal du generelt købe en overpris USB -konverter, der udfører et enkelt job som f.eks. SPI eller bare I2C.
Det er af disse grunde, jeg besluttede at oprette det universelle interfacekort. Det er designet til at give mulighed for let pc -baseret kommunikation med integrerede moduler.
De indlejrede grænsefladefunktioner i tavlen, jeg besluttede mig på, inkluderer.
- Digital I/O
- I2C
- SPI
- UART
- PWM
- Servomotor
- ADC -indgang
- DAC -udgang
Alle kan bruges helt uafhængigt.
Interfacekortet kan styres via en USB -forbindelse til pc'en, men har også valgfri WIFI- eller Bluetooth -modulforbindelser, så kortet kan bruges eksternt eller i et IoT -type scenario.
Ved at bruge standard 2,54 mm pitch SIL headere er det muligt direkte at tilslutte kvindelige dupontkabler mellem kortet og det integrerede modul, hvilket muliggør hurtige, pålidelige og loddefri forbindelser.
Jeg tænkte også på at tilføje ting som CAN, LIN, H-bridge osv., Men disse kan måske komme senere med en v2-revision.
Trin 1: Design af printkortet
Når jeg designer printkortet, kan jeg lide at prøve at holde tingene så enkle som muligt. Når du skal bygge tavler i hånden, er det vigtigt kun at tilføje komponenter, når de har et bestemt formål og bruge så mange interne funktioner i mikrokontrolleren som muligt.
Når jeg kiggede på min foretrukne elektronikleverandør, fandt jeg en chip, jeg var fortrolig med, og som havde de funktioner, jeg ledte efter, og som var en rimelig pris. Chippen jeg landede på var PIC18F24K50.
Med de tilgængelige 23 I/O -ben tillod dette mig disse funktioner
- Digtal I/O
- I2C
- SPI
- UART
- PWM x 2
- Servomotor x 6
- ADC -indgang x 3
- DAC -udgang x 1
- I/O drevet fra 5V eller 3V3
- Status LED
En ulempe ved den IC, jeg valgte, er, at den kun har en UART -perifer, og derfor vil brugen af Bluetooth- eller Wifi -kontrolmetoden stoppe dig i at kunne bruge UART -forbindelsen.
Vist på billederne ovenfor er det færdige skematiske og PCB.
Trin 2: Design af protokollen
Det første trin i udformningen af protokollen er at beslutte, hvad du specifikt skal bruge bestyrelsen til at kunne. Opdel ting tilføjer et bedre kontrolniveau, hvorimod at kombinere ting forenkler grænsefladen og reducerer kommunikation mellem trafikken mellem kortet og pc'en. Det er et balancespil og svært at perfektionere.
For hver funktion af tavlen skal du angive eventuelle parametre og afkast. For eksempel kan en funktion til at læse et ADC -input have en parameter til at angive, hvilket input der skal samples og en returværdi, der indeholder resultatet.
I mit design er her listen over funktioner, jeg ønskede at inkludere:
-
Digital I/O
- SetPin (PinNumber, stat)
- Stat = GetPin (PinNumber)
-
SPI
- Initialiser (SPI -tilstand)
- DataIn = Overførsel (DataOut)
- ControlChipSelect (kanal, stat)
- SetPrescaler (sats)
-
I2C
- Initialiser ()
- Start ()
- Genstart ()
- Hold op ()
- SlaveAck = Send (DataOut)
- DataIn = Modtag (sidste)
-
UART
- Initialiser ()
- TX Byte (DataOut)
- BytesAvailable = RX -tælling ()
- DataIn = RX Byte ()
- SetBaud (Baud)
-
PWM
- Aktiver (kanal)
- Deaktiver (kanal)
- SetFrequency (kanal, frekvens)
- GetMaxDuty (Duty)
- SetDuty (Duty)
-
Servo
- Aktiver (kanal)
- Deaktiver (kanal)
- SetPosition (kanal, position)
-
ADC
ADCsample = Sample (kanal)
-
DAC
- Aktiver
- Deaktiver
- SetOutput (spænding)
-
TRÅDLØST INTERNET
- SetSSID (SSID)
- Indstil adgangskode (adgangskode)
- Status = CheckConnectionStatus ()
- IP = GetIPAddress ()
Parametre vises i parenteserne, og afkast vises før symbolet for lig.
Inden jeg begynder at kode, tildeler jeg hver funktion en kommandokode, der starter fra 128 (binær 0b10000000) og arbejder opad. Jeg dokumenterer protokollen fuldstændigt for at sikre, at når mit hoved er i koden, har jeg et godt dokument at referere tilbage til. Det fulde protokoldokument til dette projekt er vedhæftet og indeholder indgående kommandokoder og bitbredder.
Trin 3: Design af firmwaren
Når protokollen er etableret, er det et tilfælde af implementering af funktionaliteten på hardwaren.
Jeg anvender en enkel tilgang til tilstanden maskintype, når jeg udvikler slavesystemer for at forsøge at maksimere den potentielle kommando- og datagennemstrømning, samtidig med at firmwaren er enkel at forstå og fejlsøge. Et mere avanceret system som Modbus kan i stedet bruges, hvis du har brug for bedre interaktion med andre tilsluttede enheder, men dette tilføjer overhead, hvilket vil bremse tingene.
Statsmaskinen består af tre tilstande:
1) Venter på kommandoer
2) Modtagelse af parametre
3) Svar
De tre stater interagerer som følger:
1) Vi går gennem de indgående bytes i bufferen, indtil vi har en byte, der har den mest betydende bit. Når vi har modtaget en sådan byte, kontrollerer vi den mod en liste over kendte kommandoer. Hvis vi finder et match, tildeler vi antallet af parameterbytes og returnerer bytes til at matche protokollen. Hvis der ikke er nogen parameterbytes, kan vi udføre kommandoen her og enten springe til tilstand 3 eller genstarte tilstand 1. Hvis der er parameterbytes, går vi til tilstand 2.
2) Vi går gennem de indgående bytes og gemmer dem, indtil vi har gemt alle parametrene. Når vi har alle parametrene, udfører vi kommandoen. Hvis der er returbytes, går vi til trin 3. Hvis der ikke er nogen returnbytes at sende, vender vi tilbage til fase 1.
3) Vi gennemgår de indgående bytes, og for hver byte overskriver vi ekkobyten med en gyldig returbyte. Når vi har sendt alle returbytes, vender vi tilbage til fase 1.
Jeg brugte Flowcode til at designe firmwaren, da den pænt viser visuelt, hvad jeg laver. Det samme kunne gøres lige godt i Arduino eller andre indlejrede programmeringssprog.
Det første trin er at etablere kommunikation med pc'en. For at gøre dette skal micro'en konfigureres til at køre med den rigtige hastighed, og vi skal tilføje kode for at drive USB- og UART -periferiudstyr. I Flowcode er dette lige så let som at trække en USB Serial -komponent og en UART -komponent ind i projektet fra menuen Comms -komponent.
Vi tilføjer en RX -afbrydelse og buffer for at fange indgående kommandoer på UART, og vi poller regelmæssigt USB. Vi kan derefter i vores fritid behandle bufferen.
Flowcode -projektet og genereret C -kode er vedhæftet.
Trin 4: Grænseflade via flowkode
Flowcode -simuleringen er meget kraftfuld og giver os mulighed for at oprette en komponent til at tale med tavlen. Ved oprettelsen af komponenten kan vi nu blot trække komponenten ind i vores projekt og øjeblikkeligt have tavlefunktionerne til rådighed. Som en ekstra bonus kan enhver eksisterende komponent, der har et SPI-, I2C- eller UART -periferiudstyr, bruges i simuleringen, og kommunikationsdata kan ledes til interfacekortet via en injektorkomponent. De vedhæftede billeder viser et enkelt program til at udskrive en besked til displayet. Kommunikationsdata, der sendes via grænsefladekortet til den faktiske skærmhardware og komponentopsætningen med I2C Display, I2C Injector og Interface Board komponenter.
Den nye SCADA -tilstand til Flowcode 8.1 er en absolut ekstra bonus, idet vi derefter kan tage et program, der gør noget i Flowcode -simulatoren og eksportere det, så det kan køre alene på enhver pc uden licensproblemer. Dette kan være fantastisk til projekter som testrigge eller sensorklynger.
Jeg bruger denne SCADA -tilstand til at oprette WIFI -konfigurationsværktøjet, der kan bruges til at konfigurere SSID og adgangskode samt indsamle modulets IP -adresse. Dette giver mig mulighed for at konfigurere alt ved hjælp af USB -forbindelsen og derefter overføre til en WIFI -netværksforbindelse, når tingene kører.
Nogle eksempler på projekter er vedhæftet.
Trin 5: Andre grænseflademetoder
Udover Flowcode kan du stort set bruge dit valgfrie programmeringssprog til at kommunikere med interfacekortet. Vi brugte Flowcode, da det havde et bibliotek med dele, der allerede var inkluderet, som vi kunne komme i gang med det samme, men det gælder også for mange andre sprog.
Her er en liste over sprog og metoder til at kommunikere med interfacekortet.
Python - Brug af et serielt bibliotek til at streame data til en COM -port eller IP -adresse
Matlab - Brug af filkommandoer til at streame data til en COM -port eller IP -adresse
C ++ / C# / VB - Brug af enten en forudskrevet DLL, direkte adgang til COM -porten eller Windows TCP / IP API
Labview - Brug af enten en forudskrevet DLL, VISA Serial -komponenten eller TCP/IP -komponenten
Hvis nogen gerne vil se ovenstående sprog implementeret, så lad mig det vide.
Trin 6: Færdig produkt
Det færdige produkt vil sandsynligvis være en fremtrædende funktion i mit integrerede værktøjskit i de kommende år. Det har allerede hjulpet mig med at udvikle komponenter til forskellige Grove -displays og sensorer. Jeg kan nu få koden fuldstændig sømmet, før jeg tyer til en kompilering eller programmering shenanigans.
Jeg har endda udleveret nogle bestyrelser til kolleger, så de også kan forbedre deres arbejdsgang, og disse er blevet meget godt modtaget.
Tak fordi du læste min Instructable Jeg håber, at du fandt den nyttig, og forhåbentlig vil den inspirere dig til at oprette dine egne værktøjer til at fremskynde din produktivitet.
Anbefalede:
Embedded Window Manager: 10 trin
Embedded Window Manager: Dette projekt viser, hvordan man implementerer en vinduesmanager med bevægelige overlappede vinduer på en integreret mikro-controller med et LCD-panel og en berøringsskærm. Der er kommercielt tilgængelige softwarepakker til at gøre dette, men de koster penge og er tæt på
UCL Embedded - B0B Linefollower: 9 trin
UCL Embedded-B0B Linefollower: Dette er B0B.*B0B er en generisk radiostyret bil, der midlertidigt tjener grundlaget for en line-følgende robot. Ligesom så mange Line-følgende robotter før ham, vil han gøre sit bedste for at blive ved aa linje forårsaget af en overgang mellem gulvet og ac
MXY Board - Lavt budget XY Plotter Drawing Robot Board: 8 trin (med billeder)
MXY Board - Lavbudget XY Plotter Drawing Robot Board: Mit mål var at designe mXY boardet til at lave lavt budget til XY plotter tegnemaskinen. Så jeg designede en tavle, der gør det lettere for dem, der ønsker at lave dette projekt. I det forrige projekt, mens du bruger 2 stk Nema17 stepper motorer, bruger dette bord
Smart basketball-arkadespil med score-tællende bøjler ved hjælp af Evive- Arduino Embedded Platform: 13 trin
Smart Basketball Arcade Game With Score Counting Hoops Using Evive- Arduino Embedded Platform: Af alle de spil derude er de mest underholdende arkadespil. Så vi tænkte, hvorfor ikke lave en selv derhjemme! Og her er vi, det mest underholdende DIY -spil, du nogensinde har spillet indtil nu - DIY Arcade Basketball Game! Ikke kun er det
UCL - Embedded - Vælg og sted: 4 trin
UCL - Embedded - Pick and Place: Denne instruktive vil gå, hvordan en 2D pick and place -enhed er lavet, og hvordan man koder den