Genererar 50Hz PWM med PIC16F877A (1 / 4 steg)
Steg 1: PIC PWM modulen och timers
Vi kommer att erbjuda denna PIC @ 20MHz oscillator. Denna tutorial är för dem som har sådana mycket hög oscillatorer som är det vanliga sättet att använda microcontrollers. Du kan dock använda det enkelt sättet (CCP som PWM) om du har en mycket långsam oscillator som 32 KHz, eftersom då timer2 kan uppnå 50 Hz direkt utan behov av vad vi kommer att förklara här.
PIC MCU har något som kallas KKP modul som är Capture-jämför-PWM modulen, vilket innebär att du kan konfigurera det att fungera som en av dessa 3. För ansökan om typiska bör vi alltid konfigurera det vara PWM (detta är det enkla sättet som vi måste använda som standard).
När den är konfigurerad som PWM, används Timer2 som timing modul för att beräkna dess Ton och fičuru. Så hur kan vi avgöra alla nödvändiga värden att uppnå våra egna krävs frekvens?
Timer ekvationer:
[1] F_timer = F_crystal / (4 * prescaler * upplösning)
[2] Period_timer = 1 / F_timer
[3] N = (t * F_crystal) / (4 * prescaler)
Ekvation 1 beräknar timer frekvens. Vi kommer att använda den för att fastställa den lägsta möjliga frekvens som timern kan producera. Om det är mindre än 50Hz, då vi kan generera 50Hz eller vi kommer att hitta ett annat sätt.
Ekvation 2 är uppenbara, som är perioden av det frekvensen.
Ekvation 3 är antalet "fästingar" som timern kommer kryssa tills den når den tid "t" som vi vill, vi enligt inställningarna anges som prescaler och crystal frekvens.
CCP1 modul brukas som PWM använder timer2, och denna timer2 är en 8-bitars timer. Mening, dess upplösning är 2 ^ 8 = 256. Det erbjuder prescaler värden upp till 16 och detta prescaler är en funktion i timers som tillåter dem att dela in frekvens matas in i dem för att uppnå lägre frekvenser.
Så det lägsta någonsin frekvens timer2 kan hantera (under förutsättning att 20MHz kristalloscillator) = 20000000 / (4 * 16 * 256) = 1220.7 Hz (ca 81,9 oss period). Således kan vi inte få 50 Hz signal att vi ville med denna timer med CCP1 som PWM.
Vad sägs om timer1? den har en maximal prescaler värdet 8 och 16-bitar upplösning = 65536 eftersom det är en 16-bitars timer.
Lägsta timer1 frekvens = 20000000 / (4 * 8 * 65536) = 9.53 Hz. (ca 104.9 ms period)
Så drar vi slutsatsen att timer1 kan användas för att generera 50 Hz signal eftersom det kan generera låga frekvenser upp till är 9.53 Hz och våra 50 bara så mycket möjligt!
Q: Ok! ansluta den till KKP modul i dess PWM mode!!!
S: Nej, CCP som PWM bara använder timer2 modul... måste du hitta ett annat sätt.
Vad är det?!