Indholdsfortegnelse:

Embedded Universal Interface Board - USB/Bluetooth/WIFI Control: 6 trin
Embedded Universal Interface Board - USB/Bluetooth/WIFI Control: 6 trin

Video: Embedded Universal Interface Board - USB/Bluetooth/WIFI Control: 6 trin

Video: Embedded Universal Interface Board - USB/Bluetooth/WIFI Control: 6 trin
Video: This may be the best car hack! 2024, November
Anonim
Embedded Universal Interface Board - USB/Bluetooth/WIFI -kontrol
Embedded Universal Interface Board - USB/Bluetooth/WIFI -kontrol
Embedded Universal Interface Board - USB/Bluetooth/WIFI -kontrol
Embedded Universal Interface Board - USB/Bluetooth/WIFI -kontrol

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

Design af printkortet
Design af printkortet
Design af printkortet
Design af printkortet
Design af printkortet
Design af printkortet
Design af printkortet
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

Design af protokollen
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

Design af firmwaren
Design af firmwaren
Design af firmwaren
Design af firmwaren
Design af firmwaren
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

Grænseflade via flowkode
Grænseflade via flowkode
Grænseflade via flowkode
Grænseflade via flowkode
Grænseflade via flowkode
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

Færdigt produkt
Færdigt produkt
Færdigt produkt
Færdigt produkt
Færdigt produkt
Færdigt 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: