duminică, 28 august 2011

Generatorul de semnale PWM

Generalităţi
Semnalele PWM sunt folosite în general pentru a controla viteza unui motor de curent continuu.Aceste motoare permit controlul vitezei prin modificarea tensiunii de alimentare însă viteza se modifică neliniar.Pentru a controla această viteză liniar s-a recurs la metoda de control prin semnale PWM.Semnalele PWM au următoarea formă:
În schema de mai sus observăm că semnalul este de perioadă T.Această perioadă este compusă din timpul în care semnalul este 1 logic(Tplin care se mai numeşte şi factor de umplere) şi timpul în care semnalul este 0 logic(Tgol). De obicei intervalul T este dat de 256 de tacte de ceas astfel TPlin sau TGol putând modifica viteza motorului cu pasul de aproximativ 0.4% la fiecare modificare cu o unitate a registrului de control al factorului de umplere.

Semnale PWM generate de microcontrolerul ATMega8
Microcontrolerul ATMega8 foloseşte pentru generarea semnalelor PWM Timer-ul 1 şi 2 însă momentan ne vom concentra asupra timer-ului 1.

PWM generat de Timer-ul 1
Regiştrii care ne interesează pentru setarea generatorului sunt următorii:
-Reginstrul TCNT1 care se incrementează la apariţia fiecărui impuls de tact, prescalat sau nu,intern sau extern.

-Rregiştrii OCR1A şi OCR1B care contrlează factorul de umplere în felul următor:
Observăm că timpul în care semnalul de ieşire este 1 este dat de registrul OCR1x.Dacă folosim de exemplu numai TCNT1L numărătorul va număra de la 0 la 255 şi dacă dorim ca factorul de umplere să fie 50%, atunci valoarea lui OCR1x va fi 128.În schemă mai observăm că numărarea se face în două sesuri,crescător şi descrescător.Setarea modului PWM se face prin biţii WGM13:0 după cum vom vedea mai jos.

-Registrul TCCR1A:
Biţii 4,5,6 şi 7 au următoarea semnificaţie:

COM1A1/COM1B1 COM1A0/COM1B0
0 0 - Comparatoarele sunt oprite
0 1 - Comparatoarele sunt active însă
depind de biţii WGM13:0
10 - TCNT1<=OCR1x-1 logic la ieşire,TCNT1>OCR1x -0
logic la ieşire;
11 - TCNT1<=OCR1x-0 logic la ieşire,TCNT1>OCR1x -1
logic la ieşire;

Biţii FOC1A, FOC1B sunt folosiţi pentru modul rapid aşa că îi vom seta 0.

-Registrul TCCR1B:
Biţii ICNC1 şi ICES1 sunt folosiţi pentru captura la intrare iar bitul 5 este un bit rezervat.Prin biţii 2:0 setăm prescalarea, lucru pe care l-am mai discutat la prezentarea timerului 1.
Biţii WGM13 şi WGM12 din TCCR1B împreună cu biţii WGM11 şi WGM10 din TCCR1A sunt folosiţi pentru alegerea modului de funcţionare a timerului:
Totuşi cele mai folosite moduri PWM sunt primele 3 care permit numărarea pe 8,9 sau 10 biţi.

Un lucru important pe care trebuie să îl cunoaşteţi când folosiţi generatoarele PWM sunt pinii de ieşire PWM notaţi cu OC1A şi OC1B în cazul microcontrolerului ATMega8.Atunci când sunt folosiţi pentru acest scop ei trebuiesc setaţi ca pini de ieşire ai portului.
În următorul exemplu vom dori ca la pinul OC1A să avem 50% din perioada T, 1 logic, iar la pinul OC1B dorim să avem doar 25% din interval 1 logic.Pentru uşurinţă vom folosi modul pe 8 biţi iar perioada T se va lua suficient de mare astfel încât să se poată observa comutarea.Codul programului îl puteţi descărca de la secţiunea Download -PWM -Aplicaţie 1.
Schema electrică este următoarea:
Observăm că la pinii OC1A şi OC1B avem legate 2 LED-uri iar în paralel cu ele un oşciloscop prin care vom vizualiza semnalele.Acest osciloscop se găseşte în Poteus la secţiunea de unelte(Virtual Instruments Mode) şi are numele OSCILLOSCOPE.Pentru ca efectul să poată fi urmărit vizual vom prescala ceasul cu 1024.Vom alege ca semnalul să fie 1 logic când TCNT1<=OCR1x şi 0 altfel iar modul de operare să fie primul, modul PWM pe 8 biţi.Valoarea lui OCR1A este 50% din valoarea perioadei, adică 128 iar valoarea lui OCR1B este 25% adică 64. Configurarea regiştrilor va fi următoarea:

TCCR1A=0b10100001;
TCCR1B=0b00000101;
OCR1A =125;
OCR1B =64;

Configurarea în Code Vision AVR a timerului este următoarea:
Foarte important este să nu uitaţi să setaţi pinii 1 şi 2 ai portului B ca pini de ieşire.După generare şi compilare programul funcţionează exact cum am dorit,perioada semnalului putând fi urmărită pe oşciloscopul simulării:

PWM generat de Timer-ul 2
Timer-ul 2 este asemănător cu timer-ul 1 diferenţa majoră fiind că el este doar pe 8 biţi şi că avem doar un singur canal de comparare la ieşire(OC2).Configurarea şi funcţionarea generatorului PWM este asemănătoare cu cea din Timer-ul 1 regiştrii având formă şi nume diferit.Regiştrii pe care îi vom folosi sunt următorii:

-Registrul TCNT2 ,registrul care numără fiecare impuls de ceas şi care joacă rolul de numărător liber central al timerului.

-Registrul TCCR2 care are rolul de a controla modul de funcţoinare a timerului 2:
Bitul 7 nu îl vom folosi pentru setarea generatorului aşa că îl vom seta 0.
Bitul 6 şi 3 (WGM20 şi WGM21) sunt folosiţi la setarea modului de funcţionare a timerului:

WGM21 WGM20
0 0 – Funcţionare normală;
0 1 – Funcţionare ca PWM,numărarea se face în două sensuri;
1 0 – Funcţionare ca CTC;
1 1 – Funcţionare ca PWM rapid,TCNT2-ul numără într-un singur sens;

Biţii 5 şi 4 setează modul de funcţionare al comparatorului:
COM21 COM20 –Modul PWM
00-Comparatorul dezactivat;
0 1-Combinaţie rezervată;
10-TCNT2<=OCR2-1 logic la ieşire,TCNT2>OCR2 -0 logic la ieşire;
11-TCNT2<=OCR2-0 logic la ieşire,TCNT2>OCR2 -1 logic la ieşire;

Biţii 2,1 şi 0 sunt folosiţi la prescalare timerului:
CS22 CS21 CS20
000-Timer oprit;
001-Frecvenţa ceasului intern;
010- Frecvenţa ceasului intern prescalată cu 8;
011- Frecvenţa ceasului intern prescalată cu 32;
100- Frecvenţa ceasului intern prescalată cu 64;
101- Frecvenţa ceasului intern prescalată cu 128;
110- Frecvenţa ceasului intern prescalată cu 256;
111- Frecvenţa ceasului intern prescalată cu 1024;
-Registrul OCR2, este registrul prin care setăm factorul de umplere al semnalului generat.

Pinul prin care preluăm semnalul PWM este plasat pe portul B la pinul 3:
Următorul exemplu are ca scop modificara factorului de umplere a semnalului în funcţie de anumite semnale de intrare.Pentru reglare vom folosi 3 butoane legate la primi 3 pini ai portului C în felul acesta având 8 trepte de reglare a factorului de umplere.Valoarea maximă pe care o poate avea POTRC-ul este 7 iar dacă împărţim 256 la 7 obţinem aproximativ 36 deci valoarea lui OCR2 va fi PORTC*36.Vom folosi al doilea mod, modul PWM de numărare în ambele sensuri ,vom prescala ceasul 1024 şi vom alege următoarea regulă : TCNT2<=OCR2- 1 logic la ieşire,TCNT2>OCR2 -0 logic la ieşire.Regiştrii vor avea următoarele valori:

TCCR2 = 0b01100111;
OCR2 = 0;

Codul programului şi simularea o puteţi downloada de la secţiunea Download -PWM -Aplicaţie 2.
Schema electrică este următoarea:
Când configuraţi proiectul în Code Vision AVR trebuie să aveţi grijă ca primii 3 pini ai PORTC-ului să fie configuraţi ca pini de intrare iar pinul 3 al PORTB-ului să fie configurat ca pin de ieşire.Pe lângă acestea trebuie să configuraţi şi timerul 2 în felul următor:
Dacă rulaţi simularea veţi putea modifica factorul de umplere în funcţie de combinaţia celor 3 butoane.

După informaţiile prezentate mai sus observăm că microcontrolerul ATMega 8 poate genera 3 canale PWM în felul acesta putând controla vitezele în mod diferit a 3 motoare de curent continuu. Cam atât momentan despre generatorul PWM.

0 comentarii:

Trimiteți un comentariu

Twitter Delicious Facebook Digg Stumbleupon Favorites More