TIPS ‘N TRICKS – Cum să generaţi un PWM suplimentar

25 NOIEMBRIE 2008

Cum se poate obţine o ieşire suplimentară PWM
Una dintre problemele întâlnite uneori este aceea de a comanda două motoare cu un singur MCU, utilizând două semnale PWM. Microcontrolerul Microchip PIC16F616 cu 14-pini este un dispozitiv ideal pentru controlul motoarelor, dar dispune doar de o singură ieşire PWM. Deci, cum se pot genera două semnale PWM atunci când dispunem doar de un singur modul CCP?
Soluţia constă dintr-o tehnică numită “pulse swallowing”. Acelaşi semnal PWM este aplicat ambelor circuite de comandă pentru motoare. Pulsurile PWM uniforme sunt apoi “înghiţite” (scurtate) de circuitul de comandă care lucrează la o viteză mai mică. Figura 1 arată un exemplu de tren de pulsuri, iar Figura 2 prezintă un exemplu de circuit.
În acest exemplu, motorul B pierde iniţial toate pulsurile. Acest lucru se obţine cu ajutorul RC3, care este gândit să scoată la ieşire un semnal în stare LOW pe durata pulsului ce trebuie “înghiţit”. Când pulsul este trimis motorului B, RC3 este “tri-stated” şi pulsul trece prin driverul MOSFET către ieşire. Datorită faptului că inerţia motorului se comportă ca un filtru trece jos, pulsurile lipsă sunt mecanic mediate cu pulsurile prezente, reducând efectiv factorul de umplere mediu. În acest exemplu, factorul de umplere pentru motorul A este de două ori mai mare decât pentru motorul B.
Soluţia este aceea de a scurta pulsurile specifice de la PWM. Se începe cu semnalul de întrerupere al Temporizatorului 2, ce se lansează la începutul fiecărui puls generat de CCP. Pe durata semnalului de întrerupere se va lua decizia de “înghiţire” sau nu a pulsului, iar ieşirea este comandată în stare logică inferioară sau “tri-stated”. Cu toate acestea, întârzierea semnalului de întrerupere şi natura variabilă a funcţiei determinate face imposibilă eliminarea pulsului cu precizie înainte ca el să înceapă.
Pentru a rezolva această problemă, secvenţa de întrerupere utilizează un marcaj (flag), care trece de la o întrerupere la următoarea. Dacă marcajul este stabilit, secvenţa scurtează următorul puls. Dacă nu, pulsului îi este permis să treacă. Prin scurtarea pulsului prin utilizarea informaţiilor de la întreruperea anterioară pentru a porni “înghiţirea”, şi apoi luând decizia pentru următoarea întrerupere, timpul de întârziere este minimizat şi, mult mai important, menţinut consecvent.
Chiar şi atunci când este utilizat acest sistem de marcare de la o întrerupere la alta, unele porţiuni ale pulsului vor fi generate înainte ca secvenţa de întrerupere să-l poată “înghiţi”. Din fericire, orice porţiune a pulsului generată accidental va fi scăzută din următorul puls în timpul aceleiaşi întreruperi.
Până acum a fost prezentată modalitatea de scurtare a pulsurilor şi de reducere a mediei factorului de umplere, dar se poate pune problema care pulsuri să fie scurtate. Acest lucru se poate obţine cu uşurinţă prin adăugarea unui registru de acumulare la fiecare întrerupere. Atunci când registrul intră în depăşire, următoarea întrerupere “înghite” un puls. Dacă valoarea de offset este mare, registrul de acumulare intră în depăşire mai des, rezultând un număr mai mare de pulsuri de “înghiţit”. Dacă valoarea de offset este mică, durata până când registrul de acumulare intră în depăşire este mai mare, iar numărul de pulsuri “înghiţite” este mai mic. Figura 3 prezintă un exemplu de pseudo cod care arată cum poate fi implementat acest lucru.
Ceea ce mai rămâne este de a determina valoarea utilizată pentru offset.
Ea este calculată cu relaţia:
Offset = Full_duty_cycle (factor de umplere complet) – slow_duty_cycle (factor de umplere lent)
Astfel, dacă perioada este de 200 de cicluri (0-199) şi factorul de umplere complet este de 50 (0-49), cu un ciclu complet de 45 (0-44), offset-ul este de 5. Dacă în registrul de acumulare se adaugă 5 la fiecare puls, el intră în depăşire la fiecare 40 de pulsuri.
De aceea din semnalul PWM al motorului mai lent lipsesc 5 pulsuri din 200, oferind practic două canale PWM cu un singur CCP.
www.microchip.com

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre