Perifericele independente de nucleu (CIP – Core Independent Peripheral) sunt periferice autonome, interconectate și inteligente. Cu ajutorul lor, microcontrolerul nu trebuie să interacționeze cu unitatea centrală de procesare (CPU) pentru a executa sarcini. Aceasta aduce câteva avantaje pentru aplicație.
În primul rând, CPU nu este necesar pentru comunicație între periferice. Nucleul poate intra în mod de adormire sau rularea software-ului nu are nevoie de a fi întreruptă. Evident, dacă nucleul este în mod de adormire, iar software-ul nu este necesar, atunci consumul de curent al aplicației va fi mai redus. CPU este o parte a microcontrolerului care are cel mai mare consum de curent. De aceea, utilizarea CIP-urilor reduce consumul energetic.
În al doilea rând, CIP-urile nu cauzează întreruperi, ceea ce permite o comunicație globală mult mai rapidă. Dacă pe nucleul CPU rulează software-ul, iar acesta trebuie să fie întrerupt pentru ca perifericul să îndeplinească o acțiune specifică, este nevoie de o mulțime de timp. Întreruperea necesită trei cicluri de ceas + două cicluri de ceas pentru saltul relativ și poate utiliza câteva cicluri pentru schimbarea contextului, pentru a salva date în regiștrii de pe stivă, în funcție de aplicație. CIP permite comunicației să fie mult mai rapidă, față de situația în care nucleul trebuie să asigure o întrerupere.
În al treilea rând, utilizând CIP, înseamnă un timp mai scurt până la lansarea pe piață. Trebuie scris mai puțin software, deoarece hardware-ul poate îndeplini singur sarcina. Acest lucru reduce riscul de erori software, fiind necesare mai puține validări software. De aceea, timpul de dezvoltare al produsului este mai mic decât în cazul în care nu se utilizează CIP.
În cazul microcontrolerelor (MCU) AVR®, toate perifericele independente de nucleu sunt conectate prin Event System (sistem de evenimente). În cadrul acestuia, un multiplexor conectează generatorul de evenimente și utilizatorul evenimentului. Există evenimente sincrone și asincrone.
Evenimentele asincrone necesită mai puțin de un ciclu de ceas, iar evenimentele sincrone necesită două cicluri de ceas.
Numeroase periferice pot fi conectate la sistemul de evenimente pentru a fi CIP-uri. Acestea sunt temporizatoare, numărătoare de timp real (RTC), temporizatoare de întreruperi periodice (PIT – Periodic Interrupt Timer), circuit de logică configurabilă particularizat (CCL – Custom Configurable Logic), comparatoare analogice (AC – Analog Comparator), convertoare analog-digitale (ADC), receptor/ transmițător sincron/asincron universal (USART) și intrări/ieșiri de uz general (GPIO).
Utilizarea perifericelor independente de nucleu (CIP)
Perifericele independente de nucleu trebuie să fie configurate odată, înainte de a fi utilizate. CPU execută instrucțiunea pentru a face inițializarea corectă a sistemului de evenimente și a perifericelor necesare.
Întârziere/Debouncing
Câteva aplicații utilizează și astăzi un buton ca intrare. Pentru fiecare buton este nevoie de o logică de debounce sau o porțiune de software pentru a obține un semnal ne-basculant. Pentru AVR MCU, este o sarcină ușoară să se aplice funcția de debouncing ca software. Ea poate fi făcută prin întârzieri și/sau logică în program. Software-ul nu este complicat, dar utilizează resurse CPU. Verificarea unui buton dacă este apăsat sau nu, se poate face fie prin interogare, fie printr-o întrerupere de la controlerul GPIO. Ambele necesită timp și utilizare CPU pentru a îndeplini o sarcină completă de debouncing.
(Nota trad. – La acționarea unui buton, semnalul trimis către microcontroler nu este unul clar pornit/oprit, ci este o trecere continuă între cele două stări până la stabilizare pe una dintre acestea (bounce). Pentru înlăturarea acestei probleme este nevoie de aplicarea unei tehnici de debounce.)
Debouncing / Întârziere cu filtrul CCL
În cazul perifericelor independente de nucleu, implementarea sarcinii de debouncing poate fi realizată fără vreo încărcare suplimentară a CPU. Tot ce este necesar este logica configurabilă particularizată (CCL). GPIO, unde butonul este conectat, este configurat ca un generator de evenimente asincron. CCL va fi utilizatorul de eveniment. Semnalul de la pinul GPIO la intrarea CCL va fi transferat fără întârziere. Tabela de adevăr din CCL este configurată astfel încât ieșirea este egală cu intrarea. Ieșirea din tabela de adevăr este rutată către filtru. Pentru filtrul CCL, vedeți Figura 1. Este posibilă înlăturarea problemelor de funcționare din semnalul de intrare, iar noi putem stabili întârzierea filtrului de la două, până la cinci cicluri de ceas (ceas periferic sau un ceas alternativ) pentru semnalul de ieșire. Dacă utilizăm un ceas lent de 32 KHz, atunci avem o întârziere de 1.5 ms. Este, de asemenea, posibilă extinderea timpului de întârziere cu un ceas diferit sau cu un temporizator.
Întârziere cu un temporizator
De exemplu, Temporizatorul/Numărătorul B (TCB) este reglat în modul “Single-Shot”. Dacă temporizatorul primește un semnal eveniment el începe să numere până când atinge valoarea maximă pre-programată și se oprește. Ieșirea TCB este conectată la CCL. În CCL poate fi realizată combinația dorită a semnalului de întârziere. Acest lucru permite o întârziere temporală foarte flexibilă. Fiecare nou eveniment la nivelul temporizatorului TCB, pornește din nou numărătoarea.
Generare de timp mort
Timpul mort este utilizat în aplicații în care dispo–zitivele de comutare (tranzistoare, FET sau IGBT) sunt în serie între alimentarea de putere și masă (GND). Dacă ambele sunt activate în același timp, atunci există un scurt. Un exemplu poate fi o configurație de punte H adesea utilizată pentru comanda motoarelor. În funcție de aplicație, timpul mort va fi ori între comutații, ori între pulsurile PWM (modulare în lățimea pulsurilor). Timpul mort între pulsurile PWM este necesar, de exemplu, în comanda sinusoidală, iar între comutații, în cazul motoarelor fără perii (BLDC) cu 1 pol. Timpul mort între pulsurile PWM poate fi generat cu temporizatorul TCD (Time Code Display).
Pentru a genera timp mort între comutații avem nevoie de două temporizatoare, logica configurabilă particularizată (CCL) și de AC. Figura 2 și Figura 3 prezintă logica tabelei de adevăr a CCL. Temporizatorul TCA generează semnalul de bază PWM pentru controlul motorului. AC este conectat extern la senzorul Hall al motorului și conectat intern prin sistemul de evenimente la temporizatorul TCB. Acesta din urmă generează semnalul de timp mort dacă primește un semnal de la AC. CCL combină TCA (PWM), TCB (timp mort) și semnalul AC.
Semnalele de intrare pot fi selectate direct în configurația CCL și nu este nevoie să utilizeze sistemul de evenimente. Există conexiune hard între aceste module. CCL generează apoi două PWM-uri, vedeți figura 4, care comandă switch-urile pentru motor. Motorul funcționează fără vreo implicare a CPU. Pentru mai multe informații tehnice, vedeți nota de aplicație AVR AVR42778.
Oprirea automată a semnalului PWM
Numeroase aplicații necesită monitorizarea consumului de curent astfel încât să nu depășească un nivel maxim. Acest lucru poate fi făcut cu ușurință cu ajutorul comparatorului analogic AC. Acesta măsoară tensiunea (curent în rezistor) printr-un registru de șunt. Dacă ea depășește un prag configurat anterior, atunci semnalul PWM ar trebui să se oprească imediat. Ambele exemple de mai jos utilizează periferice independente de nucleu. Ieșirea de semnal PWM poate fi oprită la detectarea unui supracurent fără interacțiunea CPU.
Exemplu de iluminare LED cu TCA și CCL
Temporizatorul/Numărătorul A0 generează PWM pentru LED. AC este utilizat pentru a detecta supracurentul, iar CCL este utilizat pentru a combina aceste semnale, astfel încât dacă este detectat un supracurent, atunci PWM-ul se oprește automat. AC și TCA0 sunt conectate prin sistemul de evenimente la CCL. Semnalul de ieșire AC și PWM-ul sunt configurate în tabelul de adevăr al CCL, vedeți tabelul 1. Semnalul PWM este trimis dacă semnalul de eveniment AC este zero.
Dacă este detectat un supracurent, semnalul de eveniment AC este unu, iar ieșirea este zero atâta vreme cât se păstrează condiția de supracurent.
Exemplu de control motor cu TCD
Un motor BLDC este controlat de către temporizatorul TCD care generează semnale PWM pe două canale + două canale suplimentare pentru a comanda cele patru MOSFET-uri dintr-o punte H. AC este utilizat pentru a detecta supracurentul în motor cu un șunt între motor și GND. AC este conectat prin sistemul de evenimente la Temporizatorul/Numărătorul D0 (TCD). Caracteristicile TCD includ și gestionarea erorilor de funcționare. Dacă pragul AC este depășit (este detectat supracurent), atunci este semnalizat un eveniment către TCD, iar PWM-urile sunt oprite automat.
Măsurarea “timpului de zbor”
Măsurarea “timpului de zbor” este utilizată pentru măsurarea distanței pe care o parcurge un semnal. Măsurarea începe când semnalul părăsește transmițătorul și se oprește atunci când acesta este detectat de către receptor. Distanța poate fi calculată cu ajutorul timpului determinat și a vitezei cunoscute m/s.
În exemplul de mai jos măsurăm distanța cu semnal ultrasonic. Pentru aceasta avem nevoie de perifericele independente de nucleu TCA0, TCB0, TCS0, AC și 2× CCL, timpul de zbor putând să-l calculăm fără utilizarea procesorului (CPU).
Figura 5 prezintă tabelul de căutare Tabel 1 (LUT1) care generează Semnalul Transmis. Ieșirea TCA generează semnalul PWM, iar ieșirea TCD B reprezintă masca de transmisie. Masca de transmisie inversată și PWM sunt combinate printr-un ȘI logic, iar apoi generează semnalul de transmis, care este prezentat de tabela de adevăr LUT1.
LUT 0 generează semnalul reflectat. Ieșirea AC oferă activitatea pe linia de recepție, iar ieșirea TCD A este masca de recepție. Masca de recepție inversată și linia de recepție sunt combinate prin ȘI logic, generând semnalul reflectat, care este prezentat în tabela de adevăr LUT0.
Circuitul latch SR este resetat cu primul semnal transmis și pornește numărătorul în TCD. Cu semnalul primit de la semnalul reflectat și când latch-ul SR este setat, numărătorul TCD este oprit. Timpul de zbor este acum stocat în valoarea numărătorului TCD fără vreo utilizare a CPU. Va fi nevoie și de unitatea centrală doar pentru calcularea distanței, unde timpul de zbor este multiplicat cu viteza semnalului. Pentru mai multe informații tehnice asupra măsurării ultrasonice a distanței, vedeți nota de aplicație AVR, AVR42779.
Concluzie
Noua serie de microcontrolere ATtiny1617/1616 /1614/817/816/814/417 de la Microchip adaugă periferice independente de nucleu (CIP) inovative familiei de microcontrolere tinyAVR®. Cu aceste CIP-uri, o aplicație poate reacționa în timp real, cu mai puțină încărcare a software-ului și un consum mai mic de curent, față de cazul operării fără CIP. Exemplele de mai sus au arătat că perifericele CIP sunt ușor de pregătit, iar performanța de timp real este mai rapidă și necesită un consum energetic mai mic față de soluțiile bazate pe software.
Chiar și cu microcontrolere cu performanțe mult mai mari, acest nivel de performanțe de timp real nu pot fi întotdeauna atinse și, dacă este posibil, consumul energetic va fi de câteva ori mai mare.
Bibliografie (mai multe informații asupra noii familii)
• AVR ATtiny817 webpage
• AVR42778 Application Note: Core Independent Brushless DC Fan Control Using Configurable Custom Logic on ATtiny817
• AVR42779 Application Note: Core Independent Ultrasonic Distance Measurement with ATtiny817
Autor: Gregor Sunderdiek,
EMEA Business Development Manager MCU8
Microchip Technology | https://www.microchip.com