Jak efektywnie zaimplementować PWM na AT89S8252 z wykorzystaniem Timer1 lub Timer2?
pytanie o pwm
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: pytanie o pwm
Date: Sun, 27 Feb 2005 12:48:54 +0100
Witam szanownych grupowiczow. Mam kilka pytan odnosnie sterowania pwm. Wykorzystuje procesor
at89s8252 nie majacy sprzetowego pwm, do tego celu chcialem wykorzystac zegar timer1 lub 2.
I teraz mam pytanie: jak sie to ugryzc ?
Wymyslilem sobie ze bede mial przerywania z tego zegara, w ktorym bede naprzemiennie dekramentowal
dwa bajty odpowiadajace czasowi trwania sygnalu high oraz low.
h l
|----------| |--------
| | |
------| |-----|
unsigned char h,l;
if (--h == 0)
{
if (--l == 0)
{
h = 10;
l = 5;
} else
P1_0 = 0;
} else
P1_0 = 1;
W tym przykladzie wypelnienie bedzie wynosic 75%. Czy to bedzie dzialalo ?
Z jaka czestotliwoscia musi przerywac zegar ? Tzn: jaka czestotliwosc musi miec
sygnal pwm.
Moze istnieja inne sposoby na rozwiazanie tego problemu ? Bo moja wersja jest bardzo ramo/romo
zerna. Prosze o sugestie. Ewentualnie moze ktos zna jakis uklad ktory pozwala na sterowanie pwm (2-3
kanaly) przez spi.
pozdr.
LB
From: "J.F." <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: pytanie o pwm
Date: Sun, 27 Feb 2005 14:58:41 +0100
On Sun, 27 Feb 2005 12:48:54 +0100, drozdu wrote:
Wymyslilem sobie ze bede mial przerywania z tego zegara, w ktorym bede naprzemiennie dekramentowal
dwa bajty odpowiadajace czasowi trwania sygnalu high oraz low.
h l
|----------| |--------
| | |
------| |-----|
unsigned char h,l;
if (--h == 0)
{
if (--l == 0)
{
h = 10;
l = 5;
} else
P1_0 = 0;
} else
P1_0 = 1;
W tym przykladzie wypelnienie bedzie wynosic 75%. Czy to bedzie dzialalo ?
Bedzie, ale wypelnienie wyniesie 67%.
bardziej naturalne moze byc
unsigned char l;
if (l<zadana) P1_0 = 1; else P1_0 = 0;
l++ ;
if (l>okres) l=0 ;
Z jaka czestotliwoscia musi przerywac zegar ? Tzn: jaka czestotliwosc musi miec
sygnal pwm.
A to juz twoja sprawa. Zalozona czestotliwosc PWM moze byc bardzo
rozna, w zaleznosci od zastosowania. Powiedzmy 10Hz do 10MHz.
Jesli chcesz miec regulacje w N krokach, to przerwania potrzebujesz
N razy czesciej.
Jak widac sensowny pwm na procki to jest powiedzmy 200Hz i 100
poziomow.
Bo moja wersja jest bardzo ramo/romozerna.
Dziwne. Przeciez to sie kompiluje do gora 30 bajtow programu.
No i 2 bajty pamieci [h,l]
Prosze o sugestie. Ewentualnie moze ktos zna jakis uklad ktory pozwala na sterowanie pwm (2-3
kanaly) przez spi.
Na procesorku zrealizowac ? Czy CPLD/FPGA :-)
J.
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: pytanie o pwm
Date: Sun, 27 Feb 2005 15:46:11 +0100
Bedzie, ale wypelnienie wyniesie 67%.
Ano :) 2*33.333
if (l<zadana) P1_0 = 1; else P1_0 = 0;
l++ ;
if (l>okres) l=0 ;
Oczywiscie algorytm tylko pogladowy dalem, twoj wyglada o wiele lepiej...
A to juz twoja sprawa. Zalozona czestotliwosc PWM moze byc bardzo
rozna, w zaleznosci od zastosowania. Powiedzmy 10Hz do 10MHz.
Jesli chcesz miec regulacje w N krokach, to przerwania potrzebujesz
N razy czesciej.
Jak widac sensowny pwm na procki to jest powiedzmy 200Hz i 100
poziomow.
Potrzebuje tego do sterowania wiatrakami. 10Hz to chyba bedzie za malo...
A swoja droga co sie stanie ? Sprobuje tak jak sugerujesz ~200Hz chociaz
tylu poziomow chyba nie potrzebuje (wystarczy z 20).
Tutaj mam jeszcze dodatkowe pytanie (tylko prosze sie nie gniewac jestem
poczatkujacy): dla wyz. wym. procesora timer bedzie tykal co jeden cykl czyli
fOSC/12 tak ? Wiec przy kwarcu 11.0592MHz bedzie tykal 921600/s a to daje
nam 3600 przepelnien zegara 8 bitowego (0x00-0xFF) na sekunde tak ?
Czyli 3.6kHz. Dla zegara 16 bitowego czestotliwosc bedzie 14Hz ? Zakladajac ze
zegar bedzie liczyl od poczatku do konca. Wiec dla 200Hz 16 bitowy zegar musi liczyc
od 0-4608 lub od 0xEE00 do 0xFFFF (bo przerywanie przy 0xFFFF) czy tak ?
Dziwne. Przeciez to sie kompiluje do gora 30 bajtow programu.
No i 2 bajty pamieci [h,l]
Nie takie dziwne, zwlaszcza jesli chodzi o ram. At89s8252 ma 256 bajtow
niby to duzo... Ale pwm to 1/10 roboty procesora. Dla 3 kanalow o roznych
wspolczynnikach wypelnienia to bedzie tego troche (conajmniej 9 bajt w przypadku
dynamicznego zmieniania duty), a do tego tzeba zaimplementowac jeszcze HMI - dla
mnie liczy sie kazdy bajt.
Poza pwm procesorek obsluguje: komunikacja rs485, lcd, pomiar temperatury,
sterowanie wyjsciami. W zasadzie to taki inteligenty timer... Mam nadzieje ze sie
wyrobi (procesor) z tym natlokiem roboty...
Na procesorku zrealizowac ? Czy CPLD/FPGA :-)
To moze odrazu rdzen jakiegos pasujacego 8051 :)
Jak sie nazywa taki uklad sterujacy za pomoca pwm ? Line driver ?
Mozna wykorzystac DAC ? To sobie poszukam...
pozdr.
LB
From: "J.F." <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: Odp: pytanie o pwm
Date: Sun, 27 Feb 2005 18:16:09 +0100
On Sun, 27 Feb 2005 15:46:11 +0100, drozdu wrote:
A to juz twoja sprawa. Zalozona czestotliwosc PWM moze byc bardzo
rozna, w zaleznosci od zastosowania. Powiedzmy 10Hz do 10MHz.
Jesli chcesz miec regulacje w N krokach, to przerwania potrzebujesz
N razy czesciej.
Jak widac sensowny pwm na procki to jest powiedzmy 200Hz i 100
poziomow.
Potrzebuje tego do sterowania wiatrakami. 10Hz to chyba bedzie za malo...
Takie w pecetach ? zeby sie nie okazalo ze za duzo.
Pamietaj ze tam w srodku jest tez elektronika - moze roznie zwariowac,
jak jej w czasie jednego obrotu wylaczysz pare razy zasilanie.
No i trzeba by elektrolita wylutowac .. choc chyba zaoszczedzili
i go nie ma.
No chyba ze dasz dlawik i bedziesz w efekcie napiecie regulowal -
ale wtedy by sie ze 20kHz przydalo.
Z drugiej strony 1 czy 2 Hz moze ciekawie pracowac..
Tutaj mam jeszcze dodatkowe pytanie (tylko prosze sie nie gniewac jestem
poczatkujacy): dla wyz. wym. procesora timer bedzie tykal co jeden cykl czyli
fOSC/12 tak ? Wiec przy kwarcu 11.0592MHz bedzie tykal 921600/s a to daje
nam 3600 przepelnien zegara 8 bitowego (0x00-0xFF) na sekunde tak ?
Czyli 3.6kHz. Dla zegara 16 bitowego czestotliwosc bedzie 14Hz ? Zakladajac ze
zegar bedzie liczyl od poczatku do konca. Wiec dla 200Hz 16 bitowy zegar musi liczyc
od 0-4608 lub od 0xEE00 do 0xFFFF (bo przerywanie przy 0xFFFF) czy tak ?
Nie - jak bedziesz mial przerwania 3600Hz, zliczal je do 20, to
efektywna czestotliwosc wyjdzie 180Hz
Na procesorku zrealizowac ? Czy CPLD/FPGA :-)
To moze odrazu rdzen jakiegos pasujacego 8051 :)
ale po co 51 - tu cie moze NIOS zainteresowac :-)
Ewentualnie to co chcesz w hardware wpisac, bez procesora zadnego.
J.
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Odp: Odp: pytanie o pwm
Date: Mon, 28 Feb 2005 10:58:30 +0100
Takie w pecetach ? zeby sie nie okazalo ze za duzo.
Pamietaj ze tam w srodku jest tez elektronika - moze roznie zwariowac,
jak jej w czasie jednego obrotu wylaczysz pare razy zasilanie.
No i trzeba by elektrolita wylutowac .. choc chyba zaoszczedzili
i go nie ma.
Takie jak w pecetach, 12V bez widocznej elektroniki, dwa przewody,
bez elektrolita.
Dziwne mnie sie wydawalo ze bez stosunkowo wysokiej czestotliwosci
sie nie obejdzie...
No chyba ze dasz dlawik i bedziesz w efekcie napiecie regulowal -
ale wtedy by sie ze 20kHz przydalo.
Wydawalo mi sie ze regulowac napiecie bede tak czy tak (to wlasnie
chcialem zrobic)... Bo po to chyba jest pwm ? Moze chodzilo ci o cos
na ksztalt silnikow krokowych ? Wiec jaka czestotliwosc i ile krokow ?
Z drugiej strony 1 czy 2 Hz moze ciekawie pracowac..
Tak mala czestotliwosc dzialac bedzie normalnie :) wiatrak bedzie
chodzil na przemian raz tak, raz nie...
Nie - jak bedziesz mial przerwania 3600Hz, zliczal je do 20, to
efektywna czestotliwosc wyjdzie 180Hz
Nie bardzo rozumiem - "zliczal je do 20" - chodzi ci o to ze "cykl"
pwm ma 20 cykli zegara (czyli np: 10/10 przy wypelnieniu 50%) ?
ale po co 51 - tu cie moze NIOS zainteresowac :-)
Ciekawy jest ten NIOS, faktycznie moglbym w ten sposob
zaimplementowac tylko potrzebne mi funkcje. Jednak stosowac
CPLD tej klasy do takiego projektu ? Wyrobie sie na 8 bitowym
atmelu za 10zl :)
Ewentualnie to co chcesz w hardware wpisac, bez procesora zadnego.
To juz lepsze rozwiazanie, jednak najprosciej zrobic to programowo. Nie mialem
jeszcze stycznosci z programowalna logika (nawet malymi galami). Moglbys
podac przyklad chipu (CPLD/FPGS) ktory pomiescil by logike obslugi pwm i powiedzmy
jakis protokol komunikacyjny z procesorem nadrzednym ?
pozdr.
LB