Aplicațiile încorporate devin din ce în ce mai complexe și mai sofisticate pentru a îndeplini mai multe obiective. În primul rând, aplicațiile trebuie să îmbunătățească eficiența, ceea ce necesită performanțe semnificative ale controlerului pentru a rula algoritmi sofisticați. Apoi, disponibilitatea omniprezentă a internetului permite aplicațiilor încorporate să devină mai “inteligente” și mai “conectate”.
Aplicațiile actuale sunt din ce în ce mai “inteligente” și “conectate” (© Microchip) ▶
Al treilea obiectiv este reducerea costurilor prin integrarea mai multor funcții, cum ar fi interfațarea senzorilor, conectivitatea, controlul motoarelor, conversia digitală a energiei, securitatea și siguranța într-un singur controler. Un astfel de nivel ridicat de integrare presupune experți din domeniu care se ocupă de zone sau module funcționale specifice și, apoi, funcții multiple care trebuie integrate într-o aplicație finală. Adesea, companiile multinaționale care au echipele răspândite în întreaga lume acordă o importanță și mai mare proiectării separate a diferitelor module și integrării lor fără probleme, pentru a reduce riscurile și eforturile de dezvoltare.
Îmbunătățirea eficienței
Să analizăm mai întâi de ce obiectivul de îmbunătățire a eficienței energetice necesită creșterea performanțelor controlerului. Luați în considerare exemplul unei aplicații de control al motorului. Industria s-a îndepărtat de motoarele de curent continuu cu perii, care oferă o eficiență de 75-80% și s-a orientat către motoarele de curent continuu fără perii (BLDC) sau către motoarele sincrone cu magneți permanenți (PMSM), mai noi. Aceste motoare oferă o eficiență cu până la 85-90% mai bună, un zgomot acustic redus și o durată de viață mai mare a produsului. Controlul unui motor de curent continuu, tipic, cu perii necesită tehnici foarte simple de control a direcției și a vitezei, ce pot fi realizate cu ajutorul unui microcontroler ‘entry-level’ pe 8-biți. Comparativ, controlul unui motor BLDC sau PMSM fără senzori cu “control orientat după câmp” (Field Oriented Control – FOC) este mai sofisticat și mai intensiv din punct de vedere computațional. Aceasta permite un control strâns al energiei utilizate de motor pe o gamă largă de sarcini sau viteze și contribuie la îmbunătățirea semnificativă a eficienței. Toate aceste tehnici avansate de control sunt intensive din punct de vedere computațional, implicând operații matematice precum împărțirea, înmulțirea, rădăcina pătrată și operațiile trigonometrice, care necesită o lățime de bandă semnificativă a unității centrale de procesare (CPU). Deoarece aceste funcții de control trebuie să fie executate periodic la o frecvență ridicată, este necesar ca CPU să fie alocată la un anumit interval de timp. O astfel de execuție strânsă a buclelor de control poate ocupa cea mai mare parte a lățimii de bandă a CPU și poate avea un impact asupra altor funcții critice din punct de vedere al timpului într-o aplicație complexă. Un dezvoltator de aplicații embedded va avea o flexibilitate limitată în ceea ce privește adăugarea unor caracteristici suplimentare, precum comunicație, monitorizare de siguranță, funcții de sistem și de întreținere, care ar putea interfera cu controlul motorului în condiții critice de timp. Provocarea crește în cazul aplicațiilor de putere digitală, unde funcțiile de control în buclă, esențiale din punct de vedere al timpului, trebuie să fie executate la o frecvență și mai mare.
Software complex
Acum, să luăm în considerare următorul obiectiv, determinat de conectivitatea la internet sau la cloud. Cea mai recentă tendință a industriei este ca aplicațiile să fie “inteligente” și “conectate”, oferind inteligență și accesibilitate de oriunde. Aceste cerințe impun ca aplicațiile embedded să includă mai multe stive software, cum ar fi:
- Software-ul funcției principale a aplicației. În exemplul nostru, această funcție implementează operațiunile de control al motorului, de întreținere și de interfață cu utilizatorul, care sunt necesare în mod obișnuit în majoritatea aplicațiilor
- Software-ul de comunicație care execută protocoalele de aplicație de rețea necesare pentru conectivitate
- Software-ul de securitate pentru protecția IP, confidențialitatea, integritatea datelor, autenticitatea, controlul accesului și contracararea oricăror posibilități de piraterie informatică
- În cazul în care aplicațiile implică operațiuni umane și pot provoca vătămări corporale din cauza unei funcționări defectuoase, atunci chiar și software-ul de siguranță funcțională trebuie să facă parte din aceste aplicații critice pentru siguranță
- Unele dintre aplicațiile finale pot avea, de asemenea, cerințe de personalizare, unde anumite caracteristici vor fi unice în cazul unor soluții specifice, care țintesc diferite segmente de piață
Toate aceste cerințe funcționale necesită implicarea mai multor echipe de experți în domeniu pentru dezvoltarea stivelor software respective și pentru a le putea integra în mod optim și rapid într-o aplicație finală. Specialiști din mai multe domenii vor trebui să se coordoneze foarte strâns pentru a proiecta și implementa o aplicație finală. Acest scenariu se complică și mai mult în cazul companiilor multinaționale, unde echipele de experți vor fi răspândite pe tot globul.
Reducerea costurilor
Optimizarea costurilor este un obiectiv important și comun tuturor aplicațiilor finale. Adesea, proiectanții de aplicații embedded nu dispun de bugetul necesar pentru a lua în considerare un proiect cu mai multe microcontrolere, în care o stivă software individuală poate fi executată pe diferite microcontrolere cu o coordonare foarte redusă. Cea mai optimă soluție va fi să se opteze pentru un proiect cu un singur microcontroler cu o integrare foarte ridicată. Acest lucru permite, de asemenea, reducerea costurilor datorită unei proiectări compacte a plăcii de circuit imprimat și a unui număr redus de componente externe, cum ar fi oscilatoarele de cristal și componentele pasive.
Care sunt provocările în materie de dezvoltare?
Pentru a implementa algoritmi sofisticați și pentru a executa mai multe stive software, proiectanții de sisteme embedded aleg adesea un microcontroler cu performanțe superioare. Este posibil, însă, ca aceasta să nu fie cea mai bună alegere din cauza provocărilor asociate cu execuția în timp critic, dezvoltarea, integrarea și testarea mai multor stive software. Un simplu planificator sau un sistem de operare în timp real (RTOS) poate servi scopului de a programa și executa mai multe sarcini din diferite stive pe un procesor de înaltă performanță, într-o manieră decalată în timp. Însă, un planificator sau un RTOS adaugă sarcini suplimentare care consumă lățimea de bandă a procesorului, memoria și alte resurse ale microcontrolerului. Intercalarea în timp crește, de asemenea, volumul de comutare, reducând utilizarea eficientă a CPU. Scenariul se complică și mai mult atunci când două bucle de control complexe, critice din punct de vedere temporal, trebuie să fie executate periodic la un interval de timp precis și suprapus sau atunci când două funcții asincrone critice din punct de vedere al siguranței trebuie să fie executate simultan în timp real. În astfel de cazuri, luarea în considerare a unui microcontroler și mai performant nu va satisface întotdeauna cerințele sistemului.
Chiar dacă un microcontroler de înaltă performanță cu un singur nucleu are suficientă lățime de bandă CPU pentru a găzdui mai multe stive software, poate împreună cu un RTOS, există multe alte complicații de proiectare care trebuie luate în considerare. Dezvoltarea, integrarea și testarea mai multor stive software necesită o cantitate considerabilă de coordonare între experții în domeniu. Aceasta necesită proiectarea unei arhitecturi software compatibile și modulare care să partajeze în mod dinamic resursele și să facă schimb de informații. Complicațiile cresc și mai mult în cazul în care există stive moștenite care nu au o arhitectură compatibilă.
- Stivele moștenite pot avea diverse arhitecturi bazate fie pe modul de interogare, fie pe modul de întrerupere.
- Stivele vechi pot utiliza aceleași resurse ale microcontrolerului, care acum trebuie să fie partajate fără conflicte.
- Stivele pot avea mai multe variabile și funcții globale comune cu aceleași nume.
- Fiecare stivă poate funcționa perfect atunci când este executată individual, dar poate funcționa defectuos după integrare. Depanarea unei astfel de soluții integrate va fi un coșmar care va crește timpul de dezvoltare.
O stivă autonomă deja disponibilă poate să nu ajute întotdeauna la reducerea timpului de dezvoltare atunci când este implementată pe un microcontroler cu un singur nucleu. Toate aceste provocări reprezintă un risc de dezvoltare semnificativ și măresc timpul de lansare pe piață.
Controler cu două nuclee
Un controler ‘dual-core’ ajută la îmbunătățirea eficienței, la simplificarea eforturilor de dezvoltare și la reducerea costurilor.
- Acesta oferă performanțe mai mari decât un controler similar cu un singur nucleu care funcționează la o viteză dublă și este ideal pentru aplicații în care există două sau mai multe funcții cu timp critic
- Simplifică dezvoltarea de software cu două nuclee independente care permit:
- Dezvoltarea de software localizată oriunde în lume
- Integrare perfectă cu o coordonare foarte redusă
- Personalizarea ușoară a funcțiilor pentru variantele multiple ale unei linii de produse
Controler cu două nuclee – performanță mai bună
Un controler cu două nuclee facilitează o integrare mai mare a software-ului, permițând ca diferite funcții să se execute pe două nuclee independente. Este deosebit de util în cazul în care o aplicație necesită executarea a două funcții critice din punct de vedere al timpului, periodic, la un moment precis sau ca răspuns la evenimente asincrone. În cazul în care fiecare funcție critică din punct de vedere al timpului se execută pe două nuclee independente diferite, nu va exista niciun conflict între acestea. Unele dintre controlerele ‘dual-core’ dispun de o memorie RAM rapidă dedicată pentru programe (PRAM) cuplată la unul dintre nuclee, de obicei la nucleul ‘slave’, ceea ce îmbunătățește și mai mult performanța. Astfel, un controler dual-core oferă performanțe mai mari decât un controler similar cu un singur nucleu care funcționează la o viteză dublă.
Controler cu două nuclee – Dezvoltare simplificată
Multe controlere ‘dual-core’ oferă memorie dedicată, periferice și suport de depanare pe fiecare nucleu. O schemă flexibilă de gestionare a resurselor permite, de asemenea, alocarea de resurse partajate pentru oricare dintre nuclee, în funcție de cerințele unei aplicații.
Un controler cu două nuclee simplifică mult integrarea a două stive software care se bazează pe arhitecturi diferite sau care necesită resurse similare ale microcontrolerului, acestea putând fi rulate acum pe două nuclee independente. Acest lucru este similar cu dezvoltarea stivei pentru a fi executate pe două controlere diferite, dar cu avantajele unei performanțe îmbunătățite, ale unei utilizări optime a resurselor și ale unui cost redus. Astfel, se elimină orice complicații asociate cu integrarea stivei, partajarea resurselor în funcție de timp și condițiile de risc asociate. Un controler cu două nuclee permite, de asemenea, o depanare ușoară după integrare, deoarece fiecare nucleu vine cu propriile interfețe de depanare. Oferind atât de multe avantaje, un controler dual-core reduce semnificativ riscul de dezvoltare și timpul de lansare pe piață.
În plus, un controler cu două nuclee permite o personalizare ușoară, fără a modifica funcționalitatea principală. Prin proiectarea funcționalității principale pentru a rula pe un nucleu, caracteristicile personalizate pot fi implementate pe un alt nucleu.
Controler cu două nuclee – Reducerea costurilor
Oferind performanțe mai mari, un controler ‘dual-core’ permite unui proiectant de aplicații embedded să realizeze aplicații complexe folosind un singur microcontroler.
Pentru a realiza, practic, toate avantajele de mai sus ale unui controler ‘dual-core’, a fost realizat un mic experiment. În această demonstrație, unul dintre nuclee (de obicei nucleul secundar) implementează controlul motorului executând algoritmul FOC pentru a controla un motor BLDC. Pentru a oferi o interfață grafică pentru utilizator, celălalt nucleu (nucleul principal) execută stiva grafică pentru a interfața un afișaj OLED și implementează funcția de sistem pentru a interfața potențiometrul și butoanele care controlează viteza și starea motorului. Pentru a demonstra simplitatea de proiectare pe care o oferă un dispozitiv cu două nuclee, stiva grafică și software-ul de control al motorului au fost dezvoltate de două echipe diferite care erau separate geografic. Având flexibilitatea de a menține o arhitectură software independentă, a fost nevoie de foarte puțină coordonare între cele două echipe. Una dintre echipele care deținea expertiza în materie de control al motoarelor a putut implementa foarte rapid algoritmul FOC pentru a controla un motor BLDC. Întrucât cealaltă echipă deținea expertiză în dezvoltarea interfeței grafice cu utilizatorul, ambele echipe puteau să-și valorifice experiența în domeniile respective și să finalizeze rapid proiectul. A fost nevoie de o coordonare foarte redusă pentru a stabili un acord privind gestionarea butoanelor și a stării potențiometrului între cele două nuclee. Pe parcursul experimentului, ambele echipe au folosit biblioteci software deja disponibile pentru a implementa controlul motorului și interfața grafică. Acest lucru a dus la finalizarea proiectului în scurt timp, cu un efort foarte mic depus pentru integrarea a două stive moștenite diferite. Datorită performanței ridicate a nucleului, a rămas disponibilă o mare lățime de bandă a CPU-ului pe ambele nuclee. Pentru a împinge limitele, a fost adăugată și o interfață de afișare OLED pe nucleul ‘slave’ pentru a prezenta parametrii dinamici ai motorului fără a afecta performanța acestuia. Iată demonstrația live a aplicației de control al motorului cu interfața grafică de utilizator care rulează pe un controler de semnal digital cu două nuclee.
Un exemplu de controler dual-core care oferă toate aceste avantaje este cel mai recent controler de semnal digital (DSC) dual-core dsPIC33CH128MP508 de la Microchip. DSPIC33CH dual-core oferă performanțe ridicate grație memoriei dedicate și perifericelor specifice aplicației, ceea ce îl face ideal pentru aplicații embedded de înaltă performanță, de control al motoarelor și de conversie a puterii digitale. Datorită nucleului dual-core din această familie, proiectanții pot dezvolta firmware, separat, pentru diferite funcții de sistem, care apoi să fie îmbinate perfect fără ca blocurile de cod să interfereze între ele.
Autor: Harsha Jagadish, Product Marketing Manager, MCU16, Microchip Technology
Harsha Jagadish este director de marketing de produs în cadrul diviziei de microcontrolere pe 16-biți a Microchip Technology. El are opt ani de experiență în industria semiconductorilor și, în prezent, se ocupă pe soluții embedded de înaltă performanță.
Social Media:
Twitter: https://twitter.com/microchiptech
Facebook: https://www.facebook.com/microchiptechnology/
Microchip Technology | https://www.microchip.com