发 帖  

[经验] 利用51单片机输出PWM波形程序

2018-6-13 16:14:44  867
收藏 1 收藏 推荐 0 推荐
分享
单片机是可以输出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)   //1khz
  30.       time=0;     
  31.     if(time<=30)    //占空比%30,可改
  32.       PWM=1;   
  33.     else PWM=0;  
  34. }  
复制代码


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

0.png


如果想修改占空比,直接在程序里面修改下面这句即可。
if(time<=30)//占空比%30,可改占空比。

本文出处:        https://blog.csdn.net/dmfylb/article/details/72465762


评分

参与人数 1积分 +5 收起 理由
风吹屁股凉 + 5

查看全部评分

1281788316 2018-6-13 16:28:53
谢谢楼主分享!
回复

举报

小学生炖肉 2018-6-13 19:59:02
版主还是挺6的呀
回复

举报

王栋春 2018-6-13 20:41:01
请教一下楼主  波形图从左到右数第四个为什么有尖峰呀  在一些测量当中也遇到过 还望解释一下
回复

举报

Arive 2018-6-13 22:42:31
谢谢大师的分享。谢谢。
回复

举报

24不可说 2018-6-14 08:28:11
王栋春 发表于 2018-6-13 20:41
请教一下楼主  波形图从左到右数第四个为什么有尖峰呀  在一些测量当中也遇到过 还望解释一下

频率越高,出现毛刺的越多,和设置的定时器计数有关系,
所以驱动电路中对PWM一定要进行滤波
回复

举报

24不可说 2018-6-14 08:29:48
王栋春 发表于 2018-6-13 20:41
请教一下楼主  波形图从左到右数第四个为什么有尖峰呀  在一些测量当中也遇到过 还望解释一下

以前我试过,如果是工频的50HzPWM,毛刺就较少,
如果是几十KHz的 就很多了。
另外还和占空比有关系。
其实无论是DSP还是ARM,输出的PWM波,原理都是计数器生成的高低电平
回复

举报

lzhiaohiua 2018-6-14 08:33:47
谢谢楼主的分享
回复

举报

lee_st 2018-6-14 08:41:30
学习一下
回复

举报

lee_st 2018-6-14 08:41:39
版主大作
回复

举报

24不可说 2018-6-14 11:09:55

不是原创,文末已经标明了转载了
回复

举报

王栋春 2018-6-14 12:52:35
@24不可说   难不成这个同示波器的固有工作原理也有关系
回复

举报

24不可说 2018-6-14 12:58:47
王栋春 发表于 2018-6-14 12:52
@24不可说   难不成这个同示波器的固有工作原理也有关系

和示波器采集的信号深度、带宽、频率可能有一定关系,越好示波器,信号越细腻,示波器里边也是通过模电和数电转换计算再显示出来的,比如用过日本横河的示波器,测同一个板子信号时,比周立功的要细腻很多
回复

举报

王栋春 2018-6-14 13:05:05
分析的不错,改天找个好些的示波器试试看
回复

举报

@曲终人散@ 2018-6-14 18:14:43
波形看着还挺干净,不过有一个毛刺
回复

举报

24不可说 2018-6-15 08:11:50
@曲终人散@ 发表于 2018-6-14 18:14
波形看着还挺干净,不过有一个毛刺

如果是几十到几百KHz的,毛刺会更严重,所以要滤波
回复

举报

lee_st 2018-6-15 08:54:54
哦哦,不是原创啊
回复

举报

lee_st 2018-6-15 08:55:10
我以前也爱转载
回复

举报

lee_st 2018-6-15 08:55:23
最近只发原创和资料了
回复

举报

24不可说 2018-6-15 09:08:49
lee_st 发表于 2018-6-15 08:55
最近只发原创和资料了

可以设置成回复可见内容,也能设置附件下载积分,不过积分少设置点,太多了很多不长逛论坛的坛友积分不够
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

12下一页
发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

电路设计论坛

电子元器件论坛

传感技术

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

-

EDA设计论坛

multisim论坛

PCB设计论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

Orcad论坛

-

综合技术与应用

电机控制

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

物联网技术

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

高校联盟

深圳大学电子协会

西藏民族学院电子设计协会

西安电子科技大学西电实验室

桂林电子科技大学机电工程协会

鉴鹰电子科技协会

广东海洋大学科技创新协会

福建农林大学电子科技创新协会

湖北理工学院电子技术协会

深圳职业技术学院电子精英训练营

浙江科技学院Zuster

湘潭大学电子科技协会

青岛理工大学琴岛学院天宏开发团队

河南理工大学大学生电器开发部

广西科技大学电气信息创新协会

浙江机电职业技术学院电子制作协会

郑州大学西亚斯国际学院爱电工作室

新乡学院电子创新工作室

洛阳理工学院SmartTeam

苏州工业职业技术学院创新工作室

浙江工业大学GC315团队

杭电-微芯大学生科技创新孵化器

西安工业大学电信科协

商洛学院科技创新协会

大连民族学院创新工作室

南京信息工程大学帆木工作室

-

供求信息发布

方案交易

供需广告

芯片求购|供应发布区