Dodatki‎ > ‎

PWM sprzętowy

PWM 'ręczny', realizowany na zwykłym timerze, powinien zadziałać na dowolnym uC. Czy na pewno jednak optymalne jest zmuszanie procesora do obsługi przerwania zegarowego co 50 mikrosekund tylko po to, aby uzyskać płynną regulację jasności świecenia kilku LEDów?

W poważniejszych zastosowaniach PWM służy nie tylko do animacji na LEDach, ale np. także do regulacji prędkości obrotowej lub momentu obrotowego silników i serwomechanizmów. Jeśli akurat jest to serwomechanizm zamontowany w respiratorze, to warto poświęcić nieco więcej uwagi na skonstruowanie rozwiązania jak najbardziej niezawodnego.

Wadą programowych ('ręcznie sterowanych') PWM jest to, że płynność ich działania zależy od tego, czy uC ma wystarczająco dużo wolnych mocy obliczeniowych do realizacji tego monotonnego i prymitywnego zadania.
A co się wydarzy, kiedy przerwanie zegarowe zostanie zablokowane na dłużej niż 50 mikrosekund? Może to być spowodowane np. trwającą transmisją dużej ilości danych z pamięci Flash lub portu szeregowego. Nie jest dobrze - efektem może być chwilowe zablokowanie ('zawieszenie się') przebiegu PWM, a w efekcie nawet zniszczenie sterowanego urządzenia (jeśli to respirator, to problem może mieć też pacjent do niego podłączony).

Zdecydowanie bezpieczniejsze jest w takich zastosowaniach posłużenie się dedykowanym komponentem PWM, który jest niczym innym jak sprzętową realizacją algorytmu przedstawionego wcześniej. W strukturze uC istnieje specjalizowany układ, który starannie zlicza takty zegara PWM i w odpowiednim momencie decyduje o zmianie stanu jednego z wyprowadzeń mikrokontrolera. Układ ten jest zdecydowanie mniej podatny na błędy kodu lub zaangażowanie procesora w inne zadania.

Użyjemy dedykowanego PWM do sterowania diodą RGB - przy odrobinie szczęścia będzie to dioda RGB o mocy 1+1+1 W. W wersji ekonomicznej będzie to dioda nieco mniejszej mocy, ale też RGB i też będzie wystarczająco mocno dawać po oczach.

Zadanie sprowadza się do wyklikania trzech komponentów PWM w ProcessorExpert. Złącze rozszerzeń EXP ma wyprowadzone kilka sygnałów, które mogą być sprzętowo sterowane przez układ PWM. Do kontroli jasności i koloru diody RGB użyjemy 3 z nich. Ponieważ moc diody (a konkretnie: jej prąd przewodzenia) jest na tyle duży, że mikrokontroler nie da rady bezpośrednią nią sterować, jako wzmacniacze zostały użyte tranzystory n-MOSFET. 

Tranzystor MOSFET jest dla programisty bardzo przyjaznym elementem elektronicznym - reaguje na napięcie (w odróżnieniu od tranzystora bipolarnego, reagującego na prąd). Dobrej klasy MOSFET działa prawie jak wyłącznik albo cyfrowo sterowany rezystor - przewodzi bądź nie przewodzi. Dla pewnych egzemplarzy możliwe jest bezpośrednie podłączenie bramki (elektrody sterującej) do wyjścia uC, a w obwód źródło-dren włączenie diody świecącej dużej mocy lub innego urządzenia elektronicznego (cewki przekaźnika, silnika, żarówki, ...).
Dobrej klasy MOSFET w stanie przewodzenia może mieć rezystancję kanału wynoszącą mniej niż 100 mOhm. Co to oznacza w praktyce? Załóżmy, że prąd obciążenia będzie wynosił 350 mA. Moc wydzielana na takim tranzystorze będzie wtedy miała wartość I^2 * R, czyli ok. 0.35^2 * 0.1 = 12mW. Prąd 350 mA dla diody świecącej to właśnie mniej więcej moc diody równa 1W, przy stratach mocy na elemencie sterującym wynoszącym zaledwie ok. 12 mW. Do sterowania całkiem jasną diodą wystarczy maleńki element w obudowie SOT23!

Zamiast diody świecącej dużej mocy, wymagającej dodatkowego zasilacza i radiatora, podobny efekt można osiągnąć używając mniejszej diody RGB w obudowie SMD, zasilanej z bufora HC14.

Przykład 1. Sprzętowy PWM w 32-bitowym ColdFire V1

Przykład 2. Sprzętowy PWM w 8-bitowym MC9S08QE16

c.d.n.