Jak efektywnie zaimplementować PWM na AT89S8252 z wykorzystaniem Timer1 lub Timer2?

pytanie o pwm





Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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.

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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.

Poprzedni Następny
Wiadomość
Spis treści
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