Divider (PSC+1) hai, na kiPSC. 8 se divide karne ke liye: PSC+1=8⇒PSC=7.
Recall Solution 1.2
Output Compare / PWM: Timer → Pin (count CCR tak pahunchta hai, hardware pin drive karta hai).
Input Capture: Pin → Timer (pin par edge aati hai aur CNT ko CCR mein copy karti hai).
Mnemonic: Compare = Control the pin; Capture = Copy the time.
Recall Solution 1.3
ARRperiod set karta hai (poori saw-tooth length). CCRHIGH duration set karta hai (plum line kitni upar baithi hai). Frequency fixed rehti hai jab tum duty change karte ho — sirf orange split move hoti hai.
(a) ftim=71+172MHz=7272×106=1MHz → har tick 1μs ka hai.
(b) Counter 0→999 sweep karta hai, yaani ARR+1=1000 ticks per period, toh fPWM=ARR+1ftim=1000106=1000Hz=1kHz.
(c) D=ARR+1CCR×100%=1000250×100%=25%.
Recall Solution 2.2
1μs ticks rakho ⇒ ftim=1MHz ⇒ PSC=71.
Period T=2000Hz1=500μs=500 ticks. Kyunki sweep (ARR+1) ticks leta hai, ARR+1=500⇒ARR=499.
Duty: CCR=0.75×(ARR+1)=0.75×500=375.
Recall Solution 2.3
1μs ticks ⇒ PSC=71. Frame T=20ms=20000 ticks =(ARR+1) ⇒ ARR=19999.
Servos pulse width directly read karte hain, toh CCR=2.0ms=2000 ticks. → CCR=2000.
(Dekho Servo and ESC Control kyun width, duty % nahi, woh hai jo servo decode karta hai.)
Scope sahi hai; student ne galat number se divide kiya. Duty hai ARR+1CCR=1000500=50.0%, CCR/ARR nahi. Counter ke paas per period ARR+1=1000 distinct tick-slots hain (woh 0…999 mein se har ek par ek tick spend karta hai), aur HIGH CCR=500 slots occupy karta hai → exactly half. ARR (=999) ko denominator mein use karna ek phantom 0.05% error invent karta hai jo hardware mein kabhi tha hi nahi.
Recall Solution 3.2
Counter dono edges ke beech ek baar wrap hua (woh 65535 hit kiya, 0 par reset hua, phir count karta raha). Raw subtraction negative jaati hai kyunki yeh wrap ignore karti hai.
Yahan mod(ARR+1) ka matlab hai "(ARR+1)=65536 length ke poore counter cycles hatane ke baad non-negative remainder" — yeh ek negative difference mein ek full cycle wapas jodhta hai. Toh:
Δ=(c2−c1)mod65536=(1500−60000)mod65536=−58500+65536=7036 ticks.1μs/tick par: T=7036μs≈7.036ms, toh fsignal=7.036ms1≈142.1Hz.
Recall Solution 3.3
ftim=72 MHz, toh overflows har ARR+1=100 ticks par hote hain → overflow rate =72×106/100=720 kHz. Lekin toggle har overflow par pin flip karta hai, aur ek poori wave ke liye do flips chahiye (HIGH→LOW→HIGH). Toh fout=720kHz/2=360kHz.
1μs ticks use karo → PSC=71, ftim=1 MHz.
Frame T=400Hz1=2.5ms=2500 ticks =(ARR+1) ⇒ ARR=2499.
Idle pulse 1.0ms=1000 ticks ⇒ CCRidle=1000.
Full pulse 2.0ms=2000 ticks ⇒ CCRfull=2000.
Fit hoti hai? Longest pulse (2000) frame (2500) se kaafi kam hai → haan, comfortable margin. (Dekho Servo and ESC Control.)
Recall Solution 4.2
PSC=71 ke saath (ftim=1 MHz), 1 Hz period ke liye ARR+1=106 chahiye ⇒ ARR=999999 — 16-bit ceiling 65535 se bahut upar. Impossible.Divisor choose kaise karein: total division hai (PSC+1)(ARR+1)=fclk/fPWM=72×106. Humein is product ko do factors mein split karna hai jo dono 16 bits mein fit hon (≤65536). Ek clean split ftim ko round number banana hai: PSC=7199 lo ⇒ ftim=720072×106=10kHz (tick =100μs), chhod ke ARR+1=10000 (ARR=9999) — dono comfortably 65536 se neeche. (Kai splits kaam karenge; yeh wala tick ko ek clean 100μs rakhta hai.)
Period 1 Hz =1s=10000 ticks ⇒ ARR=9999 (fits!).
Duty 10 %: CCR=0.10×10000=1000.
Check: fPWM=7200×1000072×106=7.2×10772×106=1Hz. ✓
HIGH hold karta hai jab CNT<CCR, CNT=0…999 (ARR+1=1000 slots) across.
0 %:CCR=0 → condition CNT<0 kabhi true nahi → pin kabhi HIGH nahi.
100 %: saare 1000 slots ke liye HIGH chahiye → CCR=ARR+1=1000.
Ruko — kya CCRARR se zyada ho sakta hai? Haan. Compare register ARR tak clamped nahi hai; yeh sirf ek 16-bit value hai jise hardware compare karta hai. Agar CCR>ARR, counter kabhi 0…ARR sweep ke dauran CCR tak nahi pahunchta ya cross nahi karta, toh "go LOW" condition kabhi fire nahi hoti aur pin poore cycle ke liye HIGH rehta hai — exactly woh 100 % jo hum chahte hain. Tab CNT<1000 har count 0…999 ke liye true hai.
CCR=999 single slot CNT=999 LOW chhod deta hai → duty =999/1000=99.9%, 100 % nahi. Missing tick classic "almost-but-not-quite full brightness" bug hai.
Recall Solution 5.2
Maano k = dono edges ke beech poore counter overflows ki sankhya; yahan k=3. Har full cycle ARR+1=65536 ticks ki hai, toh true gap raw difference mein k poore cycles jodhta hai:
Δ=k(ARR+1)+(c2−c1)=3×65536+(10000−40000)=196608−30000=166608 ticks.1μs/tick par: T=166608μs≈166.6ms, toh fsignal=0.166608s1≈6.002Hz.
Single-wrap modulo 2×65536 ticks under-count karta — multi-cycle gaps ke liye tumhe overflow count kzaroor track karna chahiye.
Recall Solution 5.3
Counter ek baar wrap hua. Yaad karo mod65536 ka matlab hai "ek negative difference mein ek full cycle wapas jodho":
Δ=(cf−cr)mod65536=(200−64000)mod65536=−63800+65536=1736 ticks.1μs/tick par HIGH pulse 1736μs=1.736ms hai. (Bilkul aise hi H-bridge current-sense timing measure hoti hai.)
Recall Solution 5.4
Resolution = ek tick =72MHz1≈13.9ns.
Longest single-cycle span = ARR+1=65536 ticks =72×10665536≈910μs≈0.91ms. Isse longer kuch bhi wrap karta hai aur overflow bookkeeping demand karta hai — trade-off hai fine resolution vs short unambiguous range.