PWM okres wątpliwości

E

Eraser

Guest
Witaj.

Im ten projekt, ze pic 16f877a,
potrzebuję funkcję PWM, ale z danych formuła maksymalny okres PWM 4MHz OSC.jest 4ms i muszę 20ms, tak ja dont znać jak mogę otrzymać 20ms, jak mogę adjuste dla 20ms ?????

formuła jest następująca:
PWM okres = [(pr2 pl) 1] 4 TOSC (TMR2 prescale wartość)

 
Sprzęt PWM jest słabo nadaje się do prowadzenia serwozawory silnikowych.Czy to w oprogramowaniu.

 
20mS lub 50Hz PWM okres jest bardzo powolny.Zbyt wolno użyć modułu PWM!
Niedawno miał podobny problem i rozwiązać go za pomocą 1ms Minutnik przerwać.

Have a gobal cła i okres zmienna i boolean uruchomiony banderą.

Można go używać w taki sposób:Kod:/*--- Zmiennych globalnych ---*/Bool uruchomiony = True;

unsigned char cła = 10;

unsigned char okres = 20;/*--- 1ms intrrupt ---*/void przerwania ISR (void)

(

statycznych unsigned char pwmclock = 0;if (T0IF == 1)

(

if (uruchomiony)

(

if (pwmclock <cła) (

PWM_OUT = 1;

)

else (

PWM_OUT = 0;

)if (pwmclock <okres) (

pwmclock ;

)

else (

pwmclock = 0;

)

)

else (

PWM_OUT = 0;

)T0IF = 0;

)

)
 
Ok dzięki stoisku.Postaram w oprogramowaniu, a także wszelkie boubt i post.

 
use the PWM module to generate a longer (lower frequency) period by breaking up the period into shorter PWM "frames" and using an interrupt driven software "helper" to load the correct duty cycle value for each upcoming "frame".

Możesz
użyć modułu PWM do wygenerowania dłużej (niższe częstotliwości) okres, przez rozdzielanie na okres krótszy PWM "ramki" i przy użyciu przerwania napędzany oprogramowania "pomocnika", aby załadować poprawne cykl wartość dla każdego nadchodzącego "ramka".Ta metoda może dostarczyć wiele wyższej rozdzielczości niż, co można uzyskać, jeśli nie byli w stanie ustawić PWM moduł na okres 20 ms.

Oto przykład z ISR "pomocnika" kodu do 16 lub 4 MHz zegarem (prescaler 16 lub 4, odpowiednio), który stanowi 1 usec szerokość impulsu rozdzielczości od 0 do 20000 usecs);

Regards, Mike

Kod:

;************************************************* *****************

;

/ / Setup 1000 usec okres PWM z pr2 pl = 249 i prescaler

; / / 16:1 (16 MHz, zegar) na 20 PWM "ramek" na 20 ms Serwonapędy

/ / Okres i szerokość impulsu 1 usec rezolucji

;

; Int serwozawory = 1500; / / 0. .. 20000 w 1 usec kroki

; Int width = 0; / / ISR pracy zmiennej

; Int frame = 1; / / klatka nr 1 .. 20

;

; Nieważne ISR ()

; PIR1bits.TMR2IF = (0; / / jasne Minutnik 2 flagi przerwania

; Ramka - / /

; If (ramka == 0) / / jeśli koniec okresu 20 ms

; (Ramka = 20 / / reset nowych okres 20 ms

; Szerokość = serwozawory / / resetowanie 'szerokość pracy zmiennej

;)

Jeśli ((szerokość> 1000) / / jeśli szerokość> 1000 usecs

; CCPR1L = 250 (/ / do 100% cykl ramki

; CCP1CONbits.CCP1Y = 0; / /

; CCP1CONbits.CCP1X = 0; / /

; Szerokość -= 1000; / / odejmowanie 1000 usecs

;)

; Else

; CCP1CONbits.CCP1Y = ((szerokość & 1);

; CCP1CONbits.CCP1X = (szerokości i 2);

; CCPR1L = (szerokość>> 2); / / 0. .. 249 (0 .. 999 usecs)

; Szerokość = 0; / / życie pozostałych klatek na 0%

;)

;)

;

 

Welcome to EDABoard.com

Sponsor

Back
Top