pytanie o pwm

Feb 27, 2005 4 Replies

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


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 ;

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.

Dziwne. Przeciez to sie kompiluje do gora 30 bajtow programu. No i 2 bajty pamieci [h,l]

Na procesorku zrealizowac ? Czy CPLD/FPGA :-)

J.

Ano :) 2*33.333

Oczywiscie algorytm tylko pogladowy dalem, twoj wyglada o wiele lepiej...

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 ?

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...

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

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..

Nie - jak bedziesz mial przerwania 3600Hz, zliczal je do 20, to efektywna czestotliwosc wyjdzie 180Hz

ale po co 51 - tu cie moze NIOS zainteresowac :-) Ewentualnie to co chcesz w hardware wpisac, bez procesora zadnego.

J.

Takie jak w pecetach, 12V bez widocznej elektroniki, dwa przewody, bez elektrolita. Dziwne mnie sie wydawalo ze bez stosunkowo wysokiej czestotliwosci sie nie obejdzie...

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 ?

Tak mala czestotliwosc dzialac bedzie normalnie :) wiatrak bedzie chodzil na przemian raz tak, raz nie...

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%) ?

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 :)

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required