5.5.3 · Coding › Embedded Systems & Real-Time Software
Ek microcontroller timer basically ek counter register hi hota hai jo har clock tick pe increment hota hai. Akele yeh boring lagta hai — lekin magic hai us compare aur capture hardware mein jo iske saath lagi hoti hai:
Output Compare / PWM → timer ka counter cause hota hai; yeh automatically pin ko HIGH/LOW drive karta hai jis waqt count ek target tak pahunchti hai. (Time → Pin )
Input Capture → ek external pin event cause hoti hai; hardware us waqt counter ki value snapshot kar leta hai jis pal edge aati hai. (Pin → Time )
YEH KYU ZAROORI HAI: yeh kaam software mein karna (while loops + delay()) CPU waste karta hai aur jitter bhi aata hai. Timer peripheral yeh sab hardware mein karta hai, toh timing exact hoti hai aur CPU free rehta hai.
Ek free-running up-counter CNT jo f t im frequency ki clock se drive hota hai. Yeh 0 , 1 , 2 , … count karta hai aur wrap (overflow) ho jaata hai — yaani 0 pe wapas aa jaata hai jab yeh apni top value ARR (Auto-Reload Register) tak pahunchta hai.
PRESCALER KYU? Peripheral clock (maano 72 MHz) aksar bahut fast hoti hai. Ek prescaler usse divide karta hai taaki har tick ek usable time tak chale.
hota kya hai
Ek square wave jisme HIGH rehne ka fraction (yaani duty cycle ) ek value encode karta hai. 25% duty pe ek LED dim dikhta hai; 25% duty pe motor dheere chalti hai. Frequency fixed rehti hai; sirf HIGH/LOW split badlti hai.
HARDWARE YEH KAISE BANATA HAI: har tick pe yeh CNT ko Capture/Compare Register CCR se compare karta hai:
Jab tak CNT < CCR → pin HIGH hai
Jab CNT ≥ CCR → pin LOW hai
Wrap pe (CNT = ARR+1 → 0) → pin wapas HIGH ho jaati hai.
Toh CCR set karta hai ki HIGH kitni der raha, ARR set karta hai pura period .
Worked example 72 MHz MCU pe 1 kHz PWM at 50% banana
Goal: f P W M = 1000 Hz, D = 50% .
PSC chunno taaki ticks convenient hon. Maano PSC=71 ⇒ f t im = 72 MHz /72 = 1 MHz .
Yeh step kyun? 1 µs ticks milti hain — mental math aasaan ho jaata hai.
Period chahiye T = 1 ms = 1000 ticks ⇒ A R R + 1 = 1000 ⇒ ARR=999.
Kyun? f P W M = f t im / ( A R R + 1 ) se ⇒ A R R + 1 = 1 0 6 /1 0 3 = 1000 .
D = 50% ⇒ C C R = 0.5 × ( A R R + 1 ) = 500 .
Kyun? D = C C R / ( A R R + 1 ) se.
Worked example Servo control — 50 Hz, 1.5 ms pulse (center)
PSC=71 ⇒ 1 µs ticks (wahi trick reuse karo).
T = 20 ms = 20000 ticks ⇒ ARR=19999.
Pulse = 1.5 ms = 1500 ticks ⇒ CCR=1500. Kyun? Servo pulse width padhta hai, duty % nahi, isliye hum CCR directly desired µs pe set karte hain.
Definition Output Compare
Jab CNT == CCR, hardware ek pin pe action karta hai (set / clear / toggle) aur/ya ek interrupt fire karta hai. PWM is ka "PWM mode" hai; "toggle mode" compare rate ki aadhi frequency pe ek square wave deta hai.
Worked example Toggle mode mein precise 500 kHz square wave generate karo
Toggle har match pe pin flip karta hai, toh ek full wave = do matches.
Chahiye f o u t = 500 kHz on a 72 MHz clock, PSC=0 ⇒ f t im = 72 MHz.
Match har f t im / ( 2 f o u t ) = 72 M /1 M = 72 ticks pe hona chahiye ⇒ ARR=71, toggle on overflow.
/2 kyun? Kyunki do toggles se ek period banta hai.
Ab pin timer ki memory drive karta hai . Ek chosen edge (rising/falling) pe, hardware CNT ko CCR mein instantly copy karta hai — koi software latency nahi. Do captures subtract karo aur pulse width ya period ko tick-level precision se measure karo.
Worked example Unknown frequency measure karo
f t im = 1 MHz (1 µs ticks), ARR=65535. Rising edge captures: c 1 = 200 , c 2 = 1200 (no wrap).
Δ = 1000 ticks = 1000 μ s = 1 ms ⇒ f s i g na l = 1/1 ms = 1 kHz.
µs kyun? Har tick 1 µs hai, toh Δ ticks = directly Δ µs.
Worked example Overflow ke paas capture
c 1 = 65000 , c 2 = 500 , ARR=65535. Naive c 2 − c 1 = − 64500 (galat, negative!).
Sahi: ( 500 − 65000 ) mod 65536 = 65536 − 64500 = 1036 ticks. Kyun? Counter ek baar wrap hua; mod real elapsed time restore karta hai.
Common mistake "Period mein ARR use hota hai, ARR+1 nahi."
Kyun sahi lagta hai: ARR literally "top value" kehlata hai, toh lagta hai count length yahi hai.
Fix: counting mein 0 bhi shamil hai, toh har cycle mein A R R + 1 distinct ticks hote hain. + 1 bhoolne se PWM frequency thodi zyada ho jaati hai — scope pe dikh jaata hai.
Common mistake "Prescaler PSC se divide karta hai."
Kyun sahi lagta hai: "prescaler = 72 → divide by 72" intuitive lagta hai.
Fix: register ( P S C + 1 ) se divide karta hai taaki PSC=0 matlab divide-by-1 ho. 72 se divide karne ke liye PSC=71 likhte hain.
Common mistake "Input capture overflow ko ignore kar sakte hain."
Kyun sahi lagta hai: subtraction "bas kaam karta hai" short pulses ke liye.
Fix: agar counter wrap hua, toh raw subtraction negative ho jaata hai. Hamesha ( c 2 − c 1 ) mod ( A R R + 1 ) lo ya overflow interrupts count karo.
Common mistake "PWM duty CCR/ARR hai."
Kyun sahi lagta hai: ARR top hai, CCR threshold hai — ratio jaisa lagta hai.
Fix: yeh C C R / ( A R R + 1 ) hai. C C R = A R R + 1 pe true 100% milta hai.
Timer period ( P S C + 1 ) ( A R R + 1 ) / f c l k kyun hai aur P S C ⋅ A R R / f c l k kyun nahi?
Output compare vs input capture: data kis direction mein flow karta hai (pin↔timer)?
Toggle mode mein output frequency pane ke liye 2 se kyun divide karte hain?
Recall Feynman: ek 12-saal ke bachche ko samjhao
Socho ek ghadi ki sui baar baar ek circle mein ghoom rahi hai. PWM : tum ek bulb ko bolte ho "jab tak sui pehli quarter mein hai, jali rehna, baaki off" — sui ko tez ghuma do aur bulb bas half-bright dikhega; "off line" ko move karo dimming ke liye. Input capture : ek dost table thapta hai, aur tum exactly likh lete ho us waqt ghadi ki sui kahan thi. Do baar thapo, dono positions dekho, aur tumhe pata chal jaata hai gap kitna tha — bina khud stopwatch ghurte. Ghadi (timer) dekh rahi hai; tum bas notes padhte ho.
Mnemonic +1's aur direction yaad rakho
"PA-1, AR-1: Pat the dog, Add a Run."
P SC ko +1 chahiye, AR R ko +1 chahiye.
C ompare = C ontrol the pin (Time→Pin). C apture = C opy the time (Pin→Time). Same pehla letter, ulta arrow.
GPIO and Alternate Functions — PWM/compare pins ko AF mode enable karna padta hai.
Interrupts and NVIC — capture/compare events ISRs fire karte hain; overflow tracking.
Clock Tree and Prescalers — f c l k kahan se aata hai.
Motor Control and H-Bridges — PWM speed drive karta hai; dead-time gaps insert karta hai.
Servo and ESC Control — PWM ki pulse-width interpretation.
Encoder Mode — timer quadrature count karta hai; input capture ka cousin.
Timer period formula in terms of PSC, ARR, f_clk T = f c l k ( P S C + 1 ) ( A R R + 1 )
PSC pe +1 kyun? Taaki PSC=0 clock ko 1 se divide kare, 0 se nahi (divider hai PSC+1).
ARR pe +1 kyun? Counter count 0 ko include karta hai, toh ARR+1 ticks per cycle hoti hain.
PWM duty cycle formula D = A R R + 1 C C R × 100% .
PWM period aur duty kaun set karta hai? ARR period set karta hai; CCR HIGH duration (duty) set karta hai.
Output compare data direction Timer → Pin (CNT, CCR tak pahunchta hai, hardware pin pe act karta hai).
Input capture data direction Pin → Timer (edge event CNT ko CCR mein copy karta hai).
Do captures se period (overflow ke saath) T = f t im ( c 2 − c 1 ) mod ( A R R + 1 ) .
Toggle-mode output frequency vs match rate Output freq = match-rate / 2 (do toggles per period).
72 MHz pe 1 kHz 50% PWM ke liye settings PSC=71 (1 MHz), ARR=999, CCR=500.
50 Hz pe servo 1.5 ms center pulse, 1 µs ticks ARR=19999, CCR=1500.
Negative capture difference ka fix (c2−c1) modulo (ARR+1) lo counter wrap account karne ke liye.