Re: 16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
版主
|
是的,一般最簡單 50% Duty 輸出的方法就是將 PR2 的值除二後寫入 CCPR1L 暫存器即可。但如需較精確解的析頻率還是要考慮 b1,b0。
發表於: 2021/7/15 10:10
|
|||
|
Re: 16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
資深會員
|
謝謝 Ryang 大的說明,我發現去改變那 2 位元的 LSB 對輸出影響不大,最簡單的方法就是把 Duty Cycle 當成 8 位元的解析度來做就好,所以就令 CCPR1L = PR2/2,這樣也會產生接近 50% 的方波。
發表於: 2021/7/15 9:25
|
|||
|
Re: 16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
資深會員
|
請問 Ryang 大:
現在 16F819 跑 8MHz,所以指令週期就是 1/(8MHz/4)=0.5us 若想製造一個 PWM 週期 = 1ms(1KHz),Duty Cycle = 50% 的方波。 設 TMR2 的 Prescaler = 4,所以計算 PR2 的值 = PWM 週期 /(Prescaler×指令週期) = 1ms/(4×0.5us) = 500, 所以 PR2 = 500。 再來 Duty Cycle 是放在 CCPR1L(MSB 8位元) 和 CCP1CON 的 bit5~4(LSB 2位元), 請問這 10 位元的值該如何計算以填入 2 個暫存器內?謝謝。
發表於: 2021/7/12 11:30
|
|||
|
Re: 16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
版主
|
Fosc 除四後產生四個機械周期:,這在震盪器的章節裡有解釋。
Q1 指令提取周期 Q2 解碼指令功能 Q3 執行指令 Q4 寫入/讀取記憶
發表於: 2021/7/9 16:27
|
|||
|
Re: 16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
資深會員
|
原來關鍵就是 FIGURE 9-3 裡面 TMR2 右邊的 Note 1 註釋,由於 T2CON 的 prescaler 是 2-bit,所以拿來跟 TMR2 串在一起就變成 10-bit timer,這樣就可以比對了,但是 internal Q clock 是什麼東西還是沒概念,謝謝。
發表於: 2021/7/9 15:24
|
|||
|
Re: 16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
版主
|
Timer2 + CCP1CON [5:4] 的 period 的設定是 10-bits 的長度,比較器也是 10-bits。
會被誤認為只能做 8-bits 的PWM 原因只要是再輸入的頻率。
實際上 Timer2 是看起來是使用 Fcy 輸入的,實際卻是使用 Fosc 的。
因為 Fosc/4 = Fcy 所以這裡面的除 4 就是產生 PWM 10-bits 的關鍵。這除 4 是 Q clock 有兩個位元的計數,所以這可以用 CCP1CON [5:4] 這兩位元的設定,這樣就可以達到 PWM 10-bits 的解析度。
發表於: 2021/7/9 14:28
|
|||
|
16F819 CCP 模組用 PWM 工作模式時週期和 Duty Cycle 解析度不同的疑問
|
||||
---|---|---|---|---|
資深會員
|
使用 PWM 模式時,PWM 的週期值是放在 PR2 暫存器,跟搭配的 TMR2 一樣是 8 位元。
而 Duty Cycle 是 10 位元解析度,放在 CCPR1L(MSB 8位元) 和 CCP1CON 的 bit5~4(LSB 2位元)。 依據這張時序圖,當 TMR2 = PR2 時 PWM 輸出 1,當 TMR2 = Duty Cycle 時 PWM 輸出 0。 TMR2 和 PR2 都是 8 位元,最大就是 FF=255(d),兩者互相比對沒問題,但 Duty Cycle 卻有 10 位元,最大是 3FF=1023(d),就算是 50% 工作週期也有 3FF/2=1FF=511(d)。 那 TMR2 怎麼計數都不可能跟 10 位元的值比較,但為什麼輸出可以正確,是 MCU 裡面會再做一個轉換比較嗎?
發表於: 2021/7/9 10:49
|
|||
|