21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Funktion<br />

• Timer2 räknar tills den når talet i periodregistret PR2, då 0-ställs timern och<br />

samtidigt 1-ställs en SR-låskrets. Detta påbörjar PWM-pulsen på CCP-pinnen.<br />

• Nu laddas de 10 bitarna "DutyTime" från "CCPRL×4 + CCPX×2+ CCPY" till<br />

komparatorn.<br />

• 10-bitars komparatorn upptäcker när Timer2 räknat fram till talet för<br />

DutyTime.<br />

• Då 0-ställs SR-låskretsen och PWM-pulsen avslutas på CCP-pinnen.<br />

• När Timer2 räknat fram till periodvärdet 0-ställs timern på nytt och förloppet<br />

upprepas - allt detta utan medverkan från processorn.<br />

PWM-frekvens, upplösning och DutyCycle<br />

För upplösningen gäller:<br />

För DutyCycle gäller:<br />

Exempel (med PIC16F628)<br />

Antag att vi har en PIC16F628 med 10 MHz klocka. Högst upplösning får man om<br />

Timer2 räknar fullt, dvs PR2 = 255 och prescalern delar med 1/1 ( ställs in med<br />

T2CON ). Prescalern kan ställas in på: 1:1, 1:4, 1:16 {1 4 16}.<br />

f PWM = 10⋅10 6 / (256×4×1) = 9766 Hz<br />

Upplösning = log(10000000/9766) / log(2) = 3/0,3 = 10 bitar<br />

Om denna PWM-frekvens kan accepteras och om man nöjer sig med 8 bitars<br />

upplösning blir <strong>programmering</strong>en av DutyCycle enkel:<br />

37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!