Takle projekter med høj intensitet med ShieldBuddy
Bidraget af DigiKeys nordamerikanske redaktører
2020-07-08
Mange hobbyister, skabere og gør-det-selv-folk bruger Arduino-mikrocomputerudviklingskort til at overvåge og styre deres projekter. Det samme gør et stigende antal professionelle ingeniører, som kan bruge disse boards som evaluerings- og prototypeplatforme til at fremskynde udviklingen og sænke omkostningerne i forbindelse med evaluering af integrerede kredsløb (IC'er), sensorer og periferiudstyr. Som det blev diskuteret i Brug Arduino BOBs til hurtigt at evaluere sensorer og periferiudstyr, arbejder disse ingeniører måske i mindre teams med kortere tidsbegrænsninger til markedet (TTM). Derfor har de været nødt til at omfatte flere tekniske områder og opgaver og samtidig finde måder at fremskynde og sænke omkostningerne ved komponentvurdering på.
En løsning er at bruge Arduinos sammen med open source-hardware i form af sensor- og periferi breakout boards (BOBs) sammen med open source-software med tilhørende biblioteker og eksempelprogrammer. Selv om der findes et stort udvalg af Arduino-kort til at opfylde en række forskellige krav til behandling og hukommelse, er det alligevel bedre at udføre nogle beregninger ved hjælp af en FPU (Floating Point Unit) for at undgå at gøre hovedprocessoren langsommere. Dette problem er blevet løst inden for Arduino-økosystemet med ShieldBuddy.
I denne artikel beskrives forskellige Arduino-behandlingsplatforme, og hvorfor FPU-funktionen er så vigtig for mange applikationer. Derefter introduceres ShieldBuddy, et board, der har samme fysiske aftryk som Arduino-boards, men som har tre uafhængige 32-bit processorkerner, der hver kører med 200 MHz og har hver sin egen FPU. Artiklen vil beskrive dens programmeringsmodel og vise, hvordan dens Eclipse-baserede programmeringsmiljø og dens understøttelse af Arduinos integrerede udviklingsmiljø (IDE) gør det muligt for både gør-det-selv-folk og designere at komme hurtigt i gang med den.
Arduino for både nybegyndere og professionelle
Nybegyndere i Arduino-universet starter typisk med Arduino Uno Rev3 (Figur 1), som er baseret på 8-bit ATmega328P-mikrocontrolleren, der kører med 16 megahertz (MHz). Dette kort har kun 32 kilobyte (Kbytes) flash-hukommelse (programhukommelse), 2 Kbyte SRAM, 14 digitale input/output-stifter (I/O) og seks analoge input-stifter. Seks af de digitale pins kan levere PWM-udgange (pulse width modulation), og de analoge pins kan også bruges som digitale I/O-pins, hvis det er nødvendigt.
Figur 1: Arduino Uno Rev3-udviklingskortet er baseret på 8-bit ATmega328P-mikrocontrolleren, der kører med 16 MHz. (Billedkilde: Arduino.cc)
Arduino Uno Rev3's headers med 14 digitale I/O-stifter, 6 analoge indgangsstifter og forskellige strøm-, jord- og referencestifter er grundlaget for et enormt økosystem af datterkort kaldet shields.
Mange brugere af Uno Rev3 går efterfølgende over til Arduino Mega 2560 Rev3-kortet (figur 2), som er baseret på 8-bit ATmega2560-mikrocontrolleren med en hastighed på 16 MHz. Dette kort har 256 KByte flash-hukommelse og 8 KByte SRAM. Udtrykket af dens headers betyder, at den kan understøtte de samme skjolde som Uno, men yderligere headers giver plads til 54 digitale I/O-stifter og 16 analoge indgangsstifter. I dette tilfælde kan 15 af de digitale pins levere PWM-udgange, og - igen - kan de analoge pins også bruges som digitale I/O-pins, hvis det er nødvendigt.
Figur 2: Arduino Mega 2560 Rev3-udviklingskortet er baseret på 8-bit ATmega2560-mikrocontrolleren, der kører med 16 MHz. Udtrykket af dens headere betyder, at den kan understøtte de samme skjolde som Arduino Uno, men den har også yderligere headere, hvilket giver i alt 54 digitale I/O-stifter og 16 analoge indgangsstifter. (Billedkilde: Arduino)
Ud over de begrænsninger, der er pålagt af en 8-bit datasti og et 16 MHz-ur, indeholder hverken Arduino Uno- eller Arduino Mega-mikrocontrollerne en FPU, hvilket betyder, at alle beregninger, der involverer floating-point-værdier, gør disse processorer dramatisk langsomme.
For de brugere, der ønsker endnu mere processorkraft, er det næste trin opad Arduino Due (figur 3), som har samme fysiske størrelse som Arduino Mega, men som er baseret på 32-bit Atmel/Microchip Technology SAM3X8E Arm® Cortex®-M3-processoren med en hastighed på 84 MHz. Dette kort har 512 KByte flash-hukommelse, 96 KByte SRAM, 54 digitale I/O-stifter, 12 analoge indgangsstifter og to analoge udgangsstifter, som drives af digital-til-analog-konvertere (DAC'er). I dette tilfælde kan kun 12 af de digitale pins levere PWM-udgange, og - igen - de analoge pins kan også bruges som digitale I/O-pins, hvis det er nødvendigt. Desværre indeholder Arduino Due's processor ligesom Arduino Uno og Mega ikke en FPU.
Figur 3: Arduino Due-udviklingskortet er baseret på 32-bit Atmel SAM3X8E Arm Cortex-M3-processoren med en hastighed på 84 MHz. Udtrykket af dens headers er identisk med Arduino Mega. (Billedkilde: Arduino.cc)
Mange brugere - både hobbybrugere og professionelle - nyder godt af det høje pin-tal på Arduino Mega- og Arduino Due-udviklingskortet. Men selv Arduino Due's 32-bit processor med en hastighed på 84 MHz kan være utilstrækkelig til visse beregningsintensive opgaver. På samme måde kan Dues 512 KB flash-hukommelse og 96 KB SRAM være utilstrækkelige til mere omfattende programmer, der arbejder med store datamængder.
Mikrocontrollere kan håndtere behandlingen af stadig større datamængder, men nogle beregninger kan bedre udføres ved hjælp af FPU'er for at opnå større effektivitet og lavere latenstid.
Hvad er FPU'er, og hvorfor er de nødvendige?
Grundene til, at FPU'er er nyttige, går tilbage til, hvordan computere håndterer tal. Den enkleste måde at repræsentere tal på i computere er at bruge hele tal (hele tal). Desuden er det ikke dyrt at foretage beregninger ved hjælp af hele tal. Hele tal er imidlertid begrænsede i deres natur og kan ikke udtrykke et bredt dynamisk område.
Dette er problematisk for ingeniører og videnskabsmænd, da de ofte skal bruge ekstremt store og små værdier i den samme beregning. Fysikere kan f.eks. have beregninger, der anvender de numeriske værdier af lysets hastighed (300.000.000) og Newtons gravitationskonstant (0,000000000000006674). På samme måde har ingeniører brug for værdier med et stort dynamisk område til opgaver som digital signalbehandling (DSP) og til brug i applikationer inden for kunstig intelligens (AI) og maskinlæring (ML).
Løsningen er at anvende numerisk repræsentation med flydende komma, hvor decimalpunktet kan "flyde" i forhold til de enkelte cifre i tallet, hvilket giver mulighed for at opnå en finere grad af numerisk "opløsning". Problemet er, at selv om en 32-bits floating point-værdi bruger den samme mængde hukommelse som et 32-bits heltal med fast komma, kræver udførelse af beregninger med floating point-værdier betydeligt flere beregningsressourcer.
Hvis processoren er tvunget til at udføre floatingpoint-beregninger ved hjælp af standard fastpunktshardware, vil resultatet være en dramatisk indvirkning på processorenes ydeevne. Løsningen er at udstyre processoren med en særlig FPU. Dette gør det muligt at udføre sofistikerede floating-point-operationer ved hjælp af meget få clockcyklusser.
Det er her, at ShieldBuddy kommer ind i billedet.
ShieldBuddy bringer FPU'er og høj ydeevne til Arduino-økosystemet
Infineon Technologies' KITAURIXTC275ARDSBTOBO1, eller ShieldBuddy (figur 4), er en relativt ny aktør inden for Arduino-kompatibelområdet og er et indlejret evalueringskort til Infineons TC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore 32-bit mikrocontroller TC275T64F200WDCKXUMA1.
Figur 4: ShieldBuddy TC275 er udstyret med Infineons TC275 32-bit multicore-processor med 32-bit processor på et kort med samme pladsbehov som Arduino Mega og Arduino Due, hvilket gør den kompatibel med mange af de tilgængelige applikationsskjolde.(Billedkilde: Hitex.com)
ShieldBuddy har samme fysiske størrelse som Arduino Mega og Arduino Due og er kompatibel med mange af applikationsskjoldene, men den adskiller sig ved at bruge TC275 med dens tre uafhængige 32-bit kerner, der hver kører med 200 MHz og har hver sin egen FPU. ShieldBuddy har desuden 4 megabyte (Mbytes) flash-hukommelse (8 gange så meget som Arduino Due og 16 gange så meget som Arduino Mega) og 500 KByte RAM (5 gange så meget som Arduino Due og 62 gange så meget som Arduino Mega).
En måde at se på dette på er, at Arduino Mega's kerne kun kan håndtere ca. 16 8-bit instruktioner pr. mikrosekund (µs). Til sammenligning har hver af TC275's kerner en cyklustid på 5 nanosekunder (ns), hvilket betyder, at hver kerne typisk kan udføre omkring 150 til 200 32-bit instruktioner/µs. Da hver af ShieldBuddys processorkerner har sin egen FPU, kan kortet udføre floating-point-beregninger med lille, hvis nogen, forringelse af ydeevnen.
Udvikling med ShieldBuddy
Når de professionelle softwareudviklere arbejder med ShieldBuddy, kan de bruge Eclipse IDE, mens hobbyfolk og hobbymagere måske foretrækker at bruge det velkendte Arduino IDE. Begge muligheder er understøttet.
Brugere af Arduino vil være bekendt med, at hver skitse (program) skal have to standardfunktioner: setup(), som køres en enkelt gang, og loop(), som køres igen og igen. Brugerne kan også oprette deres egne funktioner.
ShieldBuddy's tre kerner kaldes Core 0, Core 1 og Core 2. Med Arduino IDE kan de fleste eksisterende skitser kompileres til brug på ShieldBuddy uden ændringer. Som standard kompileres setup() og loop() funktionerne - sammen med alle brugerskabte funktioner, som de kalder - til at køre på Core 0.
Når brugeren opretter et nyt program, kan han opnå den samme effekt ved at navngive disse funktioner setup0() og loop0(). Brugeren kan også oprette setup1() og loop1() funktioner, som - sammen med alle de funktioner, som brugeren har oprettet, og som de kalder - automatisk bliver kompileret til at køre på Core 1. På samme måde vil setup2() og loop2() funktionerne samt alle de funktioner, de kalder, automatisk blive kompileret til at køre på Core 2.
Som standard kører hver kerne uafhængigt af hinanden, hvilket betyder, at det er muligt at have tre helt separate programmer kørende på ShieldBuddy samtidig. Når dette er sagt, kan kernerne også kommunikere indbyrdes ved hjælp af teknikker som f.eks. delt hukommelse. Desuden kan hver kerne udløse soft interrupts i de andre kerner.
Konklusion
Open source-konceptet Arduino har vist sig at være en enorm succes, og de efterfølgende hardware- og softwareøkosystemer er vokset til at omfatte hundredvis af skjolde og tusindvis af biblioteker og applikationer.
Selv om de tidlige Arduino-udviklingskort som 8-bit, 16 MHz Arduino Uno og Arduino Mega var noget begrænsede, er nyere implementeringer som 32-bit, 84 MHz Arduino Due betydeligt mere kraftfulde. Alligevel har mange brugere brug for mere programplads (flash), mere dataplads (SRAM) og mere processorkraft, end en traditionel Arduino kan tilbyde.
Med 4 MByte flash-hukommelse, 500 KByte SRAM og tre uafhængige 32-bit processorkerner, der kører med 200 MHz, hver med sin egen FPU, tager ShieldBuddy Arduino-konceptet til et helt nyt niveau, hvilket gør den interessant for både ekstreme gør-det-selv-folk og professionelle ingeniører.
Anbefalet læsning:
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




