PWM 計數器(Timer2)
PML100 內置 1 個 8 位硬件 PWM 計數器(Timer2)。圖1為 Timer2 硬件框圖,Timer2 的時鐘源可以來自系
統時鐘(CLK),內部高頻 RC 振蕩器時鐘(IHRC),內部低頻 RC 振蕩器時鐘(ILRC),外部晶體振蕩器(EOSC),PA0,
PA4 和比較器。寄存器 tm2c 的位[7:4]用來選擇 Timer2 的時鐘。如果 IHRC 作為 Timer2 的時鐘源,當仿真器
停住時,IHRC 時鐘仍然會送到 Timer2,所以 Timer2 仍然會計數。
根據 tm2c 寄存器位[3:2]的設定,Timer2 的
輸出可以是 PA5,PA3 或 PA4 引腳。利用軟件編程寄存器 tm2s 位[6:5],時鐘預分頻模塊提供÷1,÷4,÷16
和÷64 的選擇,另外,利用軟件編程寄存器 tm2s 位[4:0],時鐘分頻器的模塊提供了÷1~÷31 的功能。在結合預
分頻器以及分頻器,Timer2 時鐘(TM2_CLK)頻率可以廣泛和靈活,以提供不同產品應用。
Timer2 的 8 位計數器只能執行上升計數操作,經由寄存器 tm2ct,計數器的值可以設置或讀取。當 8 位計數
器計數值達到上限寄存器設定的范圍時,定時器將自動清除為零,上限寄存器用來定義定時器產生波形的周期或
PWM 占空比。8 位 PWM 定時器有兩個工作模式:周期模式和 PWM 模式;周期模式用于輸出固定周期波形或中
斷事件;PWM 模式是用來產生 PWM 輸出波形,PWM 分辨率可以為 6 位、7 位或 8 位。圖 11 顯示出 Timer2 周
期模式和 PWM 模式的時序圖。
Timer2 硬件框圖
Timer2 周期模式和 PWM 模式的時序圖(tm2c.1=1)
程序選項” GPC_PWM “是指根據需求由比較器結果控制生成 PWM 波形的功能。如果程序選項“GPC_PWM”被選
中后,此時當比較器輸出是 1 時,PWM 停止輸出;而比較器輸出是 0 時,PWM 恢復輸出,如圖
比較器可控制 PWM 波形的輸出波形
使用 Timer2 產生周期波形
如果選擇周期模式的輸出,輸出波形的占空比總是 50%,其輸出頻率與寄存器設定,可以概括如下:
輸出頻率= Y ÷ [2 × (K+1) × S1 × (S2+1) ]
Y = tm2c[7:4]:Timer2 所選擇的時鐘源頻率
K = tm2b[7:0]:上限寄存器設定的值(十進制)
S1 = tm2s[6:5]:預分頻器設定值 (S1= 1,4,16,64)
S2 = tm2s[4:0]:分頻器值(十進制,S2= 0 ~ 31)
例 1:
tm2c = 0b0001_1000,Y=8MHz
tm2b = 0b0111_1111,K=127
tm2s = 0b0000_00000,S1=1,S2=0
輸出頻率 = 8MHz ÷ [ 2 × (127+1) × 1 × (0+1) ] = 31.25KHz
例 2:
tm2c = 0b0001_1000,Y=8MHz
tm2b = 0b0111_1111,K=127
tm2s[7:0] = 0b0111_11111,S1=64,S2 = 31
輸出頻率 = 8MHz ÷ ( 2 × (127+1) × 64 × (31+1) ) =15.25Hz
例 3:
tm2c = 0b0001_1000,Y=8MHz
tm2b = 0b0000_1111,K=15
tm2s = 0b0000_00000,S1=1,S2=0
輸出頻率 = 8MHz ÷ ( 2 × (15+1) × 1 × (0+1) ) = 250KHz
例 4:
tm2c = 0b0001_1000,Y=8MHz
tm2b = 0b0000_0001,K=1
tm2s = 0b0000_00000,S1=1,S2=0
輸出頻率 = 8MHz ÷ ( 2 × (1+1) × 1 × (0+1) ) =2MHz
使用 Timer2 定時器從 PA3 引腳產生周期波形的示例程序如下所示:
Void FPPA0 (void)
{
. ADJUST_IC SYSCLK=IHRC/2
, IHRC=16MHz
, VDD =5V
…
tm2ct = 0x00;
tm2b = 0x7f;
tm2s = 0b0_00_00001; // 8-bit PWM
,預分頻 = 1
,分頻 = 2
tm2c = 0b0001_10_0_0; //
系統時鐘,輸出=PA3
,周期模式
while(1)
{
nop;
}
}
使用 Timer2 產生 8 位 PWM 波形
如果選擇 8 位 PWM 的模式,應設立 tm2c [1] = 1,tm2s [7] = 0,輸出波形的頻率和占空比可以概括如下:
輸出頻率 = Y ÷ [256 × S1 × (S2+1) ]
輸出占空比 = [( K+1 ) ÷ 256]×100%
Y = tm2c[7:4]:Timer2 所選擇的時鐘源頻率
K = tm2b[7:0]:上限寄存器設定的值 ( 十進制)
S1= tm2s[6:5]:預分頻器設定值 (S1= 1,4,16,64)
S2 = tm2s[4:0]:分頻器值 (十進制,S2= 0 ~ 31)
例 1:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0111_1111,K=127
tm2s = 0b0000_00000,S1=1,S2=0
輸出頻率 = 8MHz ÷ ( 256 × 1 × (0+1) ) = 31.25kHz
輸出占空比 = [(127+1) ÷ 256] × 100% = 50%
例 2:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0111_1111,K=127
tm2s = 0b0111_11111,S1=64,S2=31
輸出頻率 = 8MHz ÷ ( 256 × 64 × (31+1) ) = 15.25Hz
輸出占空比 = [(127+1) ÷ 256] × 100% = 50%
例 3:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b1111_1111,K=255
tm2s = 0b0000_00000,S1=1,S2=0
PWM 輸出是高電平
輸出占空比 = [(255+1) ÷ 256] × 100% = 100%
例 4:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0000_1001,K = 9
tm2s = 0b0000_00000,S1=1,S2=0
輸出頻率 = 8MHz ÷ ( 256 × 1 × (0+1) ) = 31.25kHz
輸出占空比 = [(9+1) ÷ 256] × 100% = 3.9%
使用 Timer2 定時器從 PA3 產生 PWM 波形的示例程序如下所示:
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/2
,IHRC=16MHz
,VDD =5V
wdreset;
tm2ct = 0x00;
tm2b = 0x7f;
tm2s = 0b0_00_00001; // 8-bit PWM
,預分頻 = 1,
分頻 = 2
tm2c = 0b0001_10_1_0; //
系統時鐘,輸出=PA3,PWM
模式
while(1)
{
nop;
}
}
使用 Timer2 產生 6 位 PWM 波形
如果選擇 6 位 PWM 的模式,應設立 tm2c [1] = 1,tm2s [7] = 1,輸出波形的頻率和占空比可以概括如下:
輸出頻率 = Y ÷ [64 × S1 × (S2+1) ]
輸出占空比 = [( K+1 ) ÷ 64] × 100%
tm2c[7:4] = Y:Timer2 所選擇的時鐘源頻率
tm2b[7:0] = K:上限寄存器設定的值(十進制)
tm2s[6:5] = S1:預分頻器設定值 (S1= 1,4,16,64)
tm2s[4:0] = S2:分頻器值(十進制,S2= 0 ~ 31)
用戶可以通過用 TM2_Bit 這個 code option,選擇 7 位 PWM 模式替代原來的 6 位 PWM 模式。這時在
上述方程式中的計算因子將從原來的 64 變成 128。
例 1:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0001_1111,K=31
tm2s = 0b1000_00000,S1=1,S2=0
輸出頻率 = 8MHz ÷ ( 64 × 1 × (0+1) ) = 125kHz
輸出占空比 = [(31+1) ÷ 64] × 100% = 50%
例 2:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0001_1111,K=31
tm2s = 0b1111_11111,S1=64,S2=31
輸出頻率= 8MHz ÷ ( 64 × 64 × (31+1) ) = 61.03 Hz
輸出占空比 = [(31+1) ÷ 64] × 100% = 50%
例 3:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0011_1111,K=63
tm2s = 0b1000_00000,S1=1,S2=0
PWM 輸出是高電平
輸出占空比 = [(63+1) ÷ 64] × 100% = 100%
例 4:
tm2c = 0b0001_1010,Y=8MHz
tm2b = 0b0000_0000,K=0
tm2s = 0b1000_00000,S1=1,S2=0
輸出頻率= 8MHz ÷ ( 64 × 1 × (0+1) ) = 125kHz
輸出占空比 = [(0+1) ÷ 64] × 100% =1.5%
PWM 波形
PWM 波形(圖 13)有一個時基(T Period =時間周期)和一個周期里輸出高的時間(占空比)。PWM 的頻率
取決于時基(f PWM = 1/T Period )。
PWM 輸出波形
深圳市逐高電子有限公司
我們是一家單片機代理、方案設計、芯片燒錄、配單等一條龍電子元器件服務商。公司擁有強大的資源優勢和完整的產品線, 是臺灣應廣單片機、 臺灣義隆單片機、臺灣九齊單片機一級代理。
主要應用于小家電、消費類電子產品,LED照明控制等領域。
我公司設有專門的研發部門,具有雄厚的單片機開發實力,工程師都是具有多年單片機開發應用經驗,可為您提供較強的技術支援。
有先進的開發能力,完善的售后服務及技術支援,現已成功開發出一系列電子產品方案。