[应用方案] PWM的单片机产生

[复制链接]
1474|4
 楼主| 史迪威将军 发表于 2016-3-23 20:40 | 显示全部楼层 |阅读模式
在上次说的直流电机调速的项目中,用了S52单片机的T2定时器产生PWM波信号,用于控制直流电机的转速,虽然电机的平均速度与占空比不是严格的线性关系,但是在调节占空比可以明显的看出电机转速发生了改变,也算是满足了课题的要求。下面复习一下PWM的知识吧。

        PWM—脉冲宽度调制(Pulse Width Modulation),是一种周期一定而高低电平可调的方波信号。当输出脉冲的频率一定时,输出脉冲的占空比越大,相对应的输出有效电压越大。PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。




图1 PWM波示意图




        如上图所示T1为脉冲宽度(就是导通时间),周期为T,则输出电压的平均值为U=VCC*T1/T=a*VCC,a是占空比,变化范围为0≤a≤1。VCC为电源电压。


        所以当电源电压不变的情况下,输出电压的平均值U取决于占空比a的大小,改变a的大小就可以改变输出电压的平均值,这就是PWM的工作原理。采用T2定时器产生PWM脉冲极其精确,误差只在几个us。


 楼主| 史迪威将军 发表于 2016-3-23 20:41 | 显示全部楼层
上PWM程序
  1. // 文件名: T2PWM.c
  2. // 功能:  用T2定时器产生PWM波,频率实调1khz




  3. // 说明:  单片机AT89S52,晶振12MHZ;
  4. // 日期:   2011年4月6日









  5. #include "reg52.h"




  6. #define uint unsigned int




  7. #define uchar unsigned char









  8. sbit PWM = P1^1;




  9. uchar pluse;  //占空比寄存器









  10. void Timer2() interrupt 5




  11. {




  12.         static uchar time;




  13.         TF2=0;




  14.         if(++time==pluse) PWM=0; //达到脉宽设定值时,输出PWM低电平




  15.         else if(time==40) //PWM的频率为1khz左右




  16. {




  17.          time=0;




  18.          PWM=1;




  19. }









  20. }









  21. void InitTimer2(void) //初始化函数




  22. {




  23.         RCAP2H = 0xff ;//定时25us初值




  24.         RCAP2L = 0x0e7;//




  25.          ET2=1;




  26.          EA=1;




  27.          TR2=1;




  28. }




  29. void main(void)




  30. {  




  31.         InitTimer2();




  32.         while(1)




  33. {




  34.         pluse=20;




  35. }




  36. }




我把PWM波的周期定为1ms,占空比分40级可调(即每级差2.5%),这样定时器T2每25us产生一个定时中断,每40次中断后进入下一个PWM波的周期。在程序中,pluse=20,即占空比为50%,输出的平均电压为12*50%=6V。
        PWM产生的过程是这样的,开始时PWM为1,当计时到达pluse时(即到达了设定的脉宽宽度时间)PWM=0,随后到达PWM周期时间后PWM=1,此时下一个PWM周期重新开始。为了便于理解,波形在定时中断的产生时序示意图如下所示。


图2 PWM产生时序图

这是用示波器截下的PWM波形图,波形还不错。






玛尼玛尼哄 发表于 2016-3-23 21:34 | 显示全部楼层
PMW总是要使用到定时器才可以完成,定时器对PWM发生器产生一个周期信号
wahahaheihei 发表于 2016-3-24 22:19 | 显示全部楼层
这种使用定时器实现的IO模拟PWM是非常简单的,而用硬件的,就要操作好多寄存器,还需要计算。
dentsgot 发表于 2016-3-26 23:17 | 显示全部楼层
硬件的PWM和用IO模拟的PWM有什么区别呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

291

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0