论坛首页 > 初学者园地 > 学学单片机 > 利用51单片机输出pwm
查看:137  |  回复:6
利用51单片机输出pwm
小小宅138
11
主题
6
回复
发表于Mon Oct 22 20:17:23 CST 2018   |  只看该作者 1# 电梯直达

单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。


用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。


下面重点介绍用一个定时器的实现PWM的方法。以周期为1ms(1kHZ)为例,要产生其它频率的PWM波,程序中只需作简单修改即可。用一个定时器时(如定时器T0),首先要确定PWM的周期T和占空比D,确定了这些以后,就可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n。


因为这里我们是产生周期为1ms(1kHZ)的PWM,所以可设置中断的时间基准为0.01ms,,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:

1、当time>=100时,time清零(此语句保证频率为1kHZ);

2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出低电平;

3、当time<=n时,让单片相应的I/O口输出高电平,此时占空比就为%n。

下面程序产生30%占空比的pwm:



  1. #include<reg51.h>  

  2. #define uint unsigned int  

  3. #define uchar unsigned char  

  4.   

  5. sbit PWM=P2^0;//  P2.0输出pwm  

  6. uchar time;  // 定义占空比的变量  

  7.   

  8. void main()  

  9. {  

  10.     TMOD=0x01;//定时器0工作方式1  

  11.     TH0=0xff;//(65536-10)/256;//赋初值定时  

  12.     TL0=0xf7;//(65536-10)%256;//0.01ms  

  13.     EA=1;//开总中断  

  14.     ET0=1;//开定时器0中断  

  15.     TR0=1;//启动定时器0   

  16.     while(1)  

  17.     {             

  18.     }             

  19. }  

  20.   

  21. void tim0() interrupt 1  

  22. {  

  23.     TR0=0;//赋初值时,关闭定时器  

  24.     TH0=0xff;//(65536-10)/256;//赋初值定时  

  25.     TL0=0xf7;//(65536-10)%256;//0.01ms  

  26.     TR0=1;//打开定时器  

  27.   

  28.     time++;  

  29.     if(time>=100)  <span style="font-family:'KaiTi_GB2312';">//1khz</span>  

  30.       time=0;     

  31.     if(time<=30)   <span style="font-family:'KaiTi_GB2312';">//占空比%30,可改</span>  

  32.       PWM=1;    

  33.     else PWM=0;  

  34. }  


最后的到波形,在示波器上显示如下图所示:

 

如果想修改占空比,直接在程序里面修改下面这句即可。

if(time<=30)//占空比%30,可改占空比

 
单片机小白
回复 收藏
  举报
叮当
1
主题
47
回复
发表于Mon Oct 22 22:53:05 CST 2018   |  只看该作者 2#

那么多便宜又大碗的增强型8051不用,哪个不带硬件PWM?

现在两三毛钱的单片机很多也带PWM啊。

小小宅138
11
主题
6
回复
发表于Wed Oct 24 00:55:13 CST 2018   |  只看该作者 3#
叮当 发表于 Mon Oct 22 22:53:05 CST 2018  2# 那么多便宜又大碗的增强型8051不用,哪个不带硬件PWM? 现在两...
有可以输出pwm的51吗?
单片机小白
GZFeng
0
主题
2
回复
发表于Wed Oct 24 08:13:46 CST 2018   |  只看该作者 4#
小小宅138 发表于 Wed Oct 24 00:55:13 CST 2018  3# 有可以输出pwm的51吗?
好像除了古董级AT89CXX系列的51,其它51都带PWM吧?
该回复已删除! 5#
WCHCN
24
主题
194
回复
发表于Wed Oct 24 13:46:41 CST 2018   |  只看该作者 6#

CH549系列,8位增强型51单片机,8路PWM输出,带USB主从/触摸按键/ADC/PD快充等功能。

资料下载:CH549DS1.PDF   咨询QQ:1258305301

 

小小宅138
11
主题
6
回复
发表于Wed Oct 24 14:50:45 CST 2018   |  只看该作者 7#
WCHCN 发表于 Wed Oct 24 13:46:41 CST 2018  6# CH549系列,8位增强型51单片机,8路PWM输出,带USB主从/触摸按...
长见识了
单片机小白
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部