分类: 嵌入式
2011-09-19 20:09:34
细致看了下手上2440的BSP里的PWM驱动,和GPIO驱动一样,需要知道PWM寄存器的作用才好办事。总结下觉得有用的资料。 对于一个定时器来说,其时钟源输入频率一般不变,即TCFG0(定时器预分频值)和TCFG1(定时器分割值)的值设定后就不需要改变,这样对于PWM提供了一个稳定的时钟源。的转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比成正比,因此电机的速度与占空比成比例,占空比越大,电机转得越快。系统中PWM脉冲频率就由TCNTBn决定,PWM脉冲宽度值则由TCMPBn的值来决定,而占空比即为TCMPn/TCNTn。如果要使电机转速下降,即得到一个比较低的PWM脉宽输出值,可以减少TCMPBn的值;要使电机转速增加,即得到一个更高的PWM的输出值,可以增加TCMPBn的值。由于双缓冲器的特性,下一个PWM周期的TCMPBn值可以通过ISR(中断服务程序)或其他手段在当前PWM周期中低电平时的任何一点写入,即在程序中可以通过中断重新设定TCMPBn的值来改变电机的转速。缓冲区TCMPBn、TCNTBn的值不一定等于这个周期的TCMPn、TCNTn的值,但一定是TCMPn、TCNTn的下一个周期的值。
定时器的工作原理 1、设定TCMPBn、TCNTBn两个寄存器,它们表示定时器n的比较值,初始计数值; 2、启动定时器n,通过设置TCON,TCMPBn、TCNTBn的值被装入TCMPn、TCNTn中,在定时器n的工作频率下,TCNTn开始减1计数,其值可以通过TCNTOn寄存器读取; 3、当TCNTn的值等于TCMPn的值时,定时器n的输出管脚TOUTn反转;TCNTn继续减1计数; 4、当TCNTn的值到达0时,其输出管脚TOUTn再次反转,并触发定时器n的中断(如果中断使能); 5、如果在TCON寄存器中将定时器n设为“自动加载”,则TCMPB0和TCNTB0寄存器的值被自动装入TCMP0和TCNT0中,开始下一个计数流程。 定时器n的输出管脚TOUTn初始状态为高电平,当TCNTn的值等于TCMPn的值、TCNTn的值等于0时都会发生反转, 也可以通过TCON寄存器设置其初始电平,这样TOUTn的输出就完全反相了, 通过设置TCMPBn与TCNTBn的值可以设置管脚TOUT输出信号的占空比,这就是所谓的可调制脉冲(PWM),所以这些定时器又被称为PWM定时器。
TCON TCON有4个作用: (1)第一次启动定时器时,将TCNTBn、TCMPBn的值装入TCNTn、TCMPn中; (2)启动、停止定时器; (3)设置自动重载; (4)设置TOUTn是否反转; 【3:0】用于定时器0 【11:8】用于定时器1 【15:12】用于定时器2 【19:16】用于定时器3 【22:20】用于定时器4,没有输出引脚反转位
位1: 1——将TCNTBn、TCMPBn的值装入TCNTn、TCMPn中; 位2: 0——TOUTn不反转, 1——TOUTn反转; 位3: 0——不自动加载, 1——自动加载;
|