Abordați proiectele care consumă multe resurse de calcul, folosind ShieldBuddy

By Clive "Max" Maxfield

Contributed By DigiKey's North American Editors

Mulți pasionați, creatori și amatori folosesc plăcile de dezvoltare pentru microcomputere Arduino pentru a-și monitoriza și controla proiectele. La fel face și un număr din ce în ce mai mare de ingineri profesioniști care pot folosi aceste plăci ca platforme de evaluare și prototipare pentru a accelera dezvoltarea și a reduce costurile asociate cu evaluarea circuitelor integrate (CI), a senzorilor și a perifericelor. După cum s-a discutat în Utilizați BOB-uri Arduino pentru a evalua rapid senzorii și perifericele, acești ingineri pot lucra în echipe mai mici, cu constrângeri mai stricte privind timpul de lansare pe piață (TTM). Drept urmare, aceștia au trebuit să includă mai multe domenii și sarcini de inginerie, găsind în același timp modalități de a accelera și de a reduce costurile de evaluare a componentelor.

O soluție este utilizarea sistemelor Arduino împreună cu hardware open source sub formă de plăci breakout (BOB) pentru senzori și periferice împreună cu software open source cu biblioteci și programe de exemplu asociate. Deși există o mare varietate de plăci Arduino pentru a satisface o gamă largă de cerințe de procesare și de memorie, unele calcule sunt totuși mai bine realizate cu o unitate în virgulă mobilă (FPU) pentru a evita încetinirea procesorului principal. Această problemă a fost rezolvată în cadrul ecosistemului Arduino prin ShieldBuddy.

Acest articol va descrie diferitele opțiuni ale platformei de procesare Arduino și de ce capacitatea FPU este atât de importantă pentru multe aplicații. Apoi va prezenta ShieldBuddy, o placă care păstrează o amprentă fizică similară cu cea a plăcilor Arduino, dar are trei nuclee de procesare independente pe 32 de biți, fiecare dintre ele funcționând la 200 MHz și având propriul FPU. Articolul va descrie modelul de programare a acestuia și va arăta cum mediul de programare bazat pe Eclipse și compatibilitatea acestuia pentru mediul de dezvoltare integrat (IDE) Arduino permite atât amatorilor, cât și proiectanților să înceapă rapid să lucreze cu el.

Arduino pentru începători și profesioniști

Începătorii care abia descoperă universul Arduino pornesc, de obicei, de la Arduino Uno Rev3 (Figura1), care se bazează pe microcontrolerul ATmega328P pe 8 biți care funcționează la 16 megahertzi (MHz). Această placă are doar 32 de kiloocteți (Kbytes) de memorie flash (program), 2 Kbytes de SRAM, 14 pini de intrare/ieșire (I/O) digitală și șase pini de intrare analogică. Șase dintre pinii digitali pot furniza ieșiri cu modulația impulsului în lățime (PWM), iar pinii analogici pot fi utilizați și ca pini de intrare/ieșire digitală, dacă este necesar.

Imagine cu placa de dezvoltare Arduino Uno Rev3Figura 1: placa de dezvoltare Arduino Uno Rev3 se bazează pe microcontrolerul ATmega328P pe 8 biți care funcționează la 16 MHz. (Sursa imaginii: Arduino.cc)

Amprenta regletelor Arduino Uno Rev3, cu 14 pini de intrare/ieșire digitală, 6 pini de intrare analogică și diverși pini de alimentare, masă și referință, reprezintă baza pentru un ecosistem enorm de plăci secundare numite scuturi.

Mulți utilizatori de Uno Rev3 trec ulterior la placa Arduino Mega 2560 Rev3 (Figura 2), care se bazează pe microcontrolerul ATmega2560 pe 8 biți care funcționează la 16 MHz. Această placă are 256 Kbytes de memorie flash și 8 Kbytes de SRAM. Amprenta regletelor sale înseamnă că poate accepta aceleași scuturi ca și Uno, însă regletele suplimentare îi permit să includă 54 de pini de I/O digitală și 16 pini de intrare analogică. În acest caz, 15 dintre pinii digitali pot furniza ieșiri PWM și – încă o dată – pinii analogici pot fi utilizați și ca pini de intrare/ieșire digitală, dacă este necesar.

Imagine cu placa de dezvoltare Arduino Mega 2560 Rev3Figura 2: placa de dezvoltare Arduino Mega 2560 Rev3 se bazează pe microcontrolerul ATmega2560 pe 8 biți care funcționează la 16 MHz. Amprenta regletelor sale înseamnă că poate accepta aceleași scuturi ca și Arduino Uno, dar are, de asemenea, reglete suplimentare, oferind un total de 54 de pini de intrare/ieșire digitală și 16 pini de intrare analogică. (Sursa imaginii: Arduino)

Pe lângă limitările impuse de o cale de date pe 8 biți și un ceas de 16 MHz, nici microcontrolerele Arduino Uno și nici Arduino Mega nu includ un FPU, ceea ce înseamnă că orice calcule care implică valori în virgulă mobilă încetinesc dramatic aceste procesoare.

Pentru acei utilizatori care doresc o putere de procesare și mai mare, următoarea treaptă este Arduino Due (Figura 3), care are o amprentă fizică similară cu Arduino Mega, dar care se bazează pe procesorul Atmel/Microchip Technology SAM3X8E Arm® Cortex®-M3 pe 32 de biți care funcționează la 84 MHz. Această placă are 512 Kbytes de memorie flash, 96 Kbytes de SRAM, 54 de pini de intrare/ieșire digitală, 12 pini de intrare analogică și doi pini de ieșire analogică, care sunt acționați de convertoare digital-analogice (DAC). În acest caz, numai 12 dintre pinii digitali pot furniza ieșiri PWM și – încă o dată – pinii analogici pot fi utilizați și ca pini de intrare/ieșire digitală, dacă este necesar. Din păcate, la fel ca Arduino Uno și Mega, procesorul Arduino Due nu include un FPU.

Imagine cu placa de dezvoltare Arduino DueFigura 3: placa de dezvoltare Arduino Due se bazează pe procesorul Atmel SAM3X8E Arm Cortex-M3 pe 32 de biți care funcționează la 84 MHz. Amprenta regletelor sale este identică cu cea a plăcii Arduino Mega. (Sursa imaginii: Arduino.cc)

Mulți utilizatori – atât pasionați, cât și profesioniști – se bucură de numărul mare de pini al plăcilor de dezvoltare Arduino Mega și Arduino Due. Dar chiar și procesorul pe 32 de biți al plăcii Arduino Due, care funcționează la 84 MHz, poate fi insuficient pentru unele sarcini cu consum ridicat al puterii de calcul. În mod similar, memoria flash de 512 Kbytes și memoria SRAM de 96 Kbytes ale plăcii Due pot fi insuficiente pentru programe mai substanțiale care lucrează cu cantități mari de date.

În timp ce microcontrolerele pot procesa cantități tot mai mari de date, unele calcule sunt mai bine realizate cu ajutorul FPU pentru eficiență mai bună și latență mai mică.

Ce sunt FPU-urile și de ce sunt necesare?

Motivele pentru care FPU-urile sunt utile depind de modul în care computerele gestionează numerele. Cel mai simplu mod de a reprezenta numerele în interiorul computerelor este de a utiliza numere întregi. În plus, efectuarea calculelor cu ajutorul numerelor întregi nu consumă multe resurse de calcul. Cu toate acestea, numerele întregi sunt finite prin natura lor și nu pot exprima o gamă dinamică largă.

Acest lucru este problematic pentru ingineri și oameni de știință, deoarece ei trebuie să utilizeze adesea valori extrem de mari și mici în același calcul. De exemplu, fizicienii pot avea calcule care utilizează valorile numerice ale vitezei luminii (300.000.000) și ale constantei gravitaționale a lui Newton (0,00000000006674). În mod similar, inginerii au nevoie de valori cu o gamă dinamică mare pentru sarcini precum procesarea digitală a semnalelor (DSP) și pentru utilizarea în aplicațiile de inteligență artificială (AI) și învățare automată (ML).

Soluția constă în utilizarea reprezentării numerice în virgulă mobilă, unde virgula poate „pluti” în raport cu fiecare cifră a numărului, permițând obținerea unui grad mai fin de „rezoluție” numerică. Problema este că, deși o valoare în virgulă mobilă de 32 de biți consumă aceeași cantitate de memorie ca un număr întreg de 32 de biți în virgulă fixă, efectuarea calculelor folosind valori în virgulă mobilă necesită mult mai multe resurse de calcul.

Dacă procesorul este obligat să efectueze calcule în virgulă mobilă folosind hardware standard în virgulă fixă, rezultatul va fi un impact dramatic asupra performanțelor procesorului respectiv. Soluția constă în echiparea procesorului cu un FPU special. Acest lucru permite executarea unor operații sofisticate în virgulă mobilă folosind foarte puține cicluri de ceas.

Aici intervine ShieldBuddy.

ShieldBuddy aduce FPU și performanțe ridicate în ecosistemul Arduino

Un jucător relativ nou în spațiul compatibil cu Arduino, KITAURIXTC275ARDSBTOBO1 de la Infineon Technologies, sau ShieldBuddy (Figura 4), este o placă de evaluare încorporată pentru microcontrolerul de 32 de biți TC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore pe 32 de biți de la Infineon.

Imagine cu ShieldBuddy TC275 care este echipat cu procesorul Infineon TC275 pe 32 de biți cu nuclee multipleFigura 4: ShieldBuddy TC275 este echipat cu procesorul Infineon TC275 pe 32 de biți cu nuclee multiple pe o placă cu aceeași amprentă ca și Arduino Mega și Arduino Due, ceea ce îl face compatibil cu multe dintre scuturile de aplicații disponibile.(Sursa imaginii: Hitex.com)

Prin menținerea unei amprente fizice similare cu Arduino Mega și Arduino Due, ShieldBuddy este compatibil cu multe dintre scuturile de aplicații, dar se distinge prin utilizarea TC275 cu cele trei nuclee independente pe 32 de biți, fiecare dintre acestea funcționând la 200 MHz și având propriul FPU. În plus, ShieldBuddy are 4 megaocteți (Mbytes) de memorie flash (de 8 ori mai mult decât Arduino Due și de 16 ori mai mult decât Arduino Mega) și 500 Kbytes de memorie RAM (de 5 ori mai mult decât Arduino Due și de 62 ori mai mult decât Arduino Mega).

Un mod de a privi acest lucru este prin prisma faptului că nucleul Arduino Mega gestionează doar aproximativ șaisprezece instrucțiuni de 8 biți pe microsecundă (µs). Prin comparație, fiecare dintre nucleele TC275 are un timp de ciclu de 5 nanosecunde (ns), ceea ce înseamnă că fiecare nucleu poate executa în mod obișnuit între 150 și 200 de instrucțiuni pe 32 de biți/µs. Deoarece fiecare dintre nucleele procesorului ShieldBuddy are propriul FPU, placa poate efectua calcule în virgulă mobilă cu o degradare redusă a performanței, sau chiar fără o astfel de degradare.

Dezvoltarea cu ShieldBuddy

Atunci când lucrează cu ShieldBuddy, dezvoltatorii profesioniști de software ar putea dori să utilizeze un IDE Eclipse, în timp ce pasionații și creatorii ar putea prefera să utilizeze familiarul IDE Arduino. Ambele opțiuni sunt acceptate.

Utilizatorii Arduino sunt familiarizați cu faptul că fiecare schiță (program) trebuie să aibă două funcții standard: setup(), care este executată o singură dată, și loop(), care este executată la nesfârșit. De asemenea, utilizatorii își pot crea propriile funcții.

Cele trei nuclee ale lui ShieldBuddy se numesc Core 0, Core 1 și Core 2. În cazul IDE Arduino, majoritatea schițelor existente pot fi compilate pentru a fi utilizate pe ShieldBuddy fără modificări. În mod implicit, funcțiile setup() și loop() – împreună cu orice funcții create de utilizator pe care le apelează – vor fi compilate pentru a fi executate pe Core 0.

La crearea unui nou program, utilizatorul poate obține același efect denumind aceste funcții setup0() și loop0(). De asemenea, utilizatorul poate crea funcțiile setup1() și loop1(), care – împreună cu orice funcții create de utilizator pe care le apelează – vor fi compilate automat pentru a fi executate pe Core 1. În mod similar, funcțiile setup2() și loop2(), împreună cu toate funcțiile pe care acestea le apelează, vor fi compilate automat pentru a funcționa pe Core 2.

În mod implicit, fiecare nucleu funcționează independent, ceea ce înseamnă că este posibil să aveți trei programe complet separate care rulează simultan pe ShieldBuddy. Acestea fiind spuse, nucleele pot, de asemenea, să comunice între ele folosind tehnici precum memoria partajată. În plus, fiecare nucleu poate declanșa întreruperi soft în celelalte nuclee.

Concluzie

Conceptul Arduino open-source s-a dovedit a fi un succes extraordinar, iar ecosistemele hardware și software care au urmat au ajuns să cuprindă sute de scuturi și mii de biblioteci și aplicații.

Deși primele plăci de dezvoltare Arduino, cum ar fi Arduino Uno și Arduino Mega pe 8 biți și 16 MHz, erau oarecum limitate, implementările mai recente, precum Arduino Due pe 32 de biți și 84 MHz, sunt mult mai puternice. Chiar și așa, mulți utilizatori au nevoie de mai mult spațiu de programare (flash), mai mult spațiu de date (SRAM) și mai multă putere de procesare decât poate oferi orice Arduino tradițional.

Cu 4 Mbytes de memorie flash, 500 Kbytes de SRAM și trei nuclee independente de procesor pe 32 de biți care rulează la 200 MHz, fiecare cu propriul FPU, ShieldBuddy duce conceptul Arduino la un nivel cu totul nou, ceea ce îl face interesant atât pentru amatorii extremi, cât și pentru inginerii profesioniști.

Lectură recomandată:

  1. Predarea electronicii pentru începătorii absoluți
  2. Aplicați rapid și ușor FPGA-uri cu Arduino MKR Vidor 4000
  3. Alăturați-vă lumii Maker cu un kit Arduino inițial ușor de utilizat
DigiKey logo

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.

About this author

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield received his BSc in Control Engineering in 1980 from Sheffield Hallam University, England and began his career as a designer of central processing units (CPUs) for mainframe computers. Over the years, Max has designed everything from silicon chips to circuit boards and from brainwave amplifiers to steampunk Prognostication Engines (don't ask). He has also been at the forefront of Electronic Design Automation (EDA) for more than 30 years.

Max is the author and/or co-author of a number of books, including Designus Maximus Unleashed (banned in Alabama), Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: Instant Access, and How Computers Do Math. Check out his “Max’s Cool Beans” blog.

About this publisher

DigiKey's North American Editors