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照明控制等领域。
我公司设有专门的研发部门,具有雄厚的单片机开发实力,工程师都是具有多年单片机开发应用经验,可为您提供较强的技术支援。
有先进的开发能力,完善的售后服务及技术支援,现已成功开发出一系列电子产品方案。