1. bread88lifa利发国际娱乐论坛/
  2. 嵌入式论坛/
    1. 电子论坛综合区
    2. 嵌入式论坛
    3. 电源技术论坛
    4. 硬件设计论坛
    5. 测试测量论坛
    6. 检测技术与质量
    7. EDA设计论坛
    8. 综合技术与应用
    9. 开源硬件
    10. IC设计论坛
    11. 消费电子论坛
    12. 无线通信论坛
    13. 个人版区
    14. 厂商专区
    15. 论坛服务区
    16. 高校联盟
    17. 供求信息发布
  3. 单片机/MCU论坛
    1. ARM技术论坛
    2. Android论坛
    3. Linux论坛
    4. MSP430技术论坛
    5. FPGA|CPLD|ASIC论坛
    6. STM32/STM8技术论坛
    7. NXP MCU 技术论坛
    8. PIC单片机论坛
    9. DSP论坛
    10. 瑞萨单片机论坛
    11. 嵌入式系统论坛
  4. / 利用51单片机输出PWM波形程序
    关闭提示
12下一页

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

[复制链接]
发表于 5 天前   324 查看 20 回复 只看该作者 倒序浏览
分享
单片机是可以输出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:

  • #include<reg51.h>  
  • #define uint unsigned int  
  • #define uchar unsigned char  
  •   
  • sbit PWM=P2^0;//  P2.0输出pwm  
  • uchar time;  // 定义占空比的变量  
  •   
  • void main()  
  • {  
  •     TMOD=0x01;//定时器0工作方式1  
  •     TH0=0xff;//(65536-10)/256;//赋初值定时  
  •     TL0=0xf7;//(65536-10)%256;//0.01ms  
  •     EA=1;//开总中断  
  •     ET0=1;//开定时器0中断  
  •     TR0=1;//启动定时器0   
  •     while(1)  
  •     {            
  •     }            
  • }  
  •   
  • void tim0() interrupt 1  
  • {  
  •     TR0=0;//赋初值时,关闭定时器  
  •     TH0=0xff;//(65536-10)/256;//赋初值定时  
  •     TL0=0xf7;//(65536-10)%256;//0.01ms  
  •     TR0=1;//打开定时器  
  •   
  •     time++;  
  •     if(time>=100)   //1khz
  •       time=0;     
  •     if(time<=30)    //占空比%30,可改
  •       PWM=1;   
  •     else PWM=0;  
  • }  
  • 复制代码


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




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

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


    技术员
    发表于 5 天前  
    谢谢楼主分享!
    回复 点赞 举报
    发表于 5 天前  
    版主还是挺6的呀
    回复 点赞 举报
    版主
    发表于 5 天前  
    请教一下楼主  波形图从左到右数第四个为什么有尖峰呀  在一些测量当中也遇到过 还望解释一下
    回复 点赞 举报
    助理工程师
    发表于 5 天前  
    谢谢大师的分享。谢谢。
    回复 点赞 举报
    发表于 4 天前    楼主|
    王栋春 发表于 2018-6-13 20:41
    请教一下楼主  波形图从左到右数第四个为什么有尖峰呀  在一些测量当中也遇到过 还望解释一下

    频率越高,出现毛刺的越多,和设置的定时器计数有关系,
    所以驱动电路中对PWM一定要进行滤波
    回复 点赞 举报
    发表于 4 天前    楼主|
    王栋春 发表于 2018-6-13 20:41
    请教一下楼主  波形图从左到右数第四个为什么有尖峰呀  在一些测量当中也遇到过 还望解释一下

    以前我试过,如果是工频的50HzPWM,毛刺就较少,
    如果是几十KHz的 就很多了。
    另外还和占空比有关系。
    其实无论是DSP还是ARM,输出的PWM波,原理都是计数器生成的高低电平
    回复 点赞 举报
    技术员
    发表于 4 天前  
    谢谢楼主的分享
    回复 点赞 举报
    版主
    发表于 4 天前  
    学习一下
    回复 点赞 举报
    版主
    发表于 4 天前  
    版主大作
    回复 点赞 举报
    发表于 4 天前    楼主|

    不是原创,文末已经标明了转载了
    回复 点赞 举报
    版主
    发表于 4 天前  
    @24不可说   难不成这个同示波器的固有工作原理也有关系
    回复 点赞 举报
    发表于 4 天前    楼主|
    王栋春 发表于 2018-6-14 12:52
    @24不可说   难不成这个同示波器的固有工作原理也有关系

    和示波器采集的信号深度、带宽、频率可能有一定关系,越好示波器,信号越细腻,示波器里边也是通过模电和数电转换计算再显示出来的,比如用过日本横河的示波器,测同一个板子信号时,比周立功的要细腻很多
    回复 点赞 举报
    版主
    发表于 4 天前  
    分析的不错,改天找个好些的示波器试试看
    回复 点赞 举报
    高级工程师
    发表于 4 天前  
    波形看着还挺干净,不过有一个毛刺
    回复 点赞 举报
    发表于 3 天前    楼主|
    @曲终人散@ 发表于 2018-6-14 18:14
    波形看着还挺干净,不过有一个毛刺

    如果是几十到几百KHz的,毛刺会更严重,所以要滤波
    回复 点赞 举报
    版主
    发表于 3 天前  
    哦哦,不是原创啊
    回复 点赞 举报
    版主
    发表于 3 天前  
    我以前也爱转载
    回复 点赞 举报
    版主
    发表于 3 天前  
    最近只发原创和资料了
    回复 点赞 举报
    发表于 3 天前    楼主|
    lee_st 发表于 2018-6-15 08:55
    最近只发原创和资料了

    可以设置成回复可见内容,也能设置附件下载积分,不过积分少设置点,太多了很多不长逛论坛的坛友积分不够
    回复 点赞 举报
    12下一页
    高级模式
    您需要登录后才可以回帖 登录 | 注册
    关闭

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

    快速回复 返回顶部 返回列表
    1. time最新主题
    2. recommend推荐主题
    3. hot热门主题
    4. post 我的帖子
    -

    推荐专区

    技术干货集中营

    专家问答

    方案交易

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

    工程师杂谈

    项目|工程师创意

    招聘|求职}工程师职场

    论坛电子赛事

    社区活动专版

    发烧友活动

    -

    嵌入式论坛

    ARM技术论坛

    Android论坛

    Linux论坛

    单片机/MCU论坛

    MSP430技术论坛

    FPGA|CPLD|ASIC论坛

    STM32/STM8技术论坛

    NXP MCU 技术论坛

    PIC单片机论坛

    DSP论坛

    瑞萨单片机论坛

    嵌入式系统论坛

    -

    电源技术论坛

    电源技术论坛

    无线充电技术

    -

    硬件设计论坛

    PCB设计论坛

    电路设计论坛

    电子元器件论坛

    控制|传感

    总线技术|接口技术

    -

    测试测量论坛

    LabVIEW论坛

    Matlab论坛

    测试测量技术专区

    仪器仪表技术专区

    -

    EDA设计论坛

    multisim论坛

    PADS技术论坛

    Protel|AD|DXP论坛

    Allegro论坛

    proteus论坛|仿真论坛

    EasyEDA-中国人自已的EDA工具

    Orcad论坛

    -

    综合技术与应用

    电机控制

    智能电网

    光电及显示

    工程资源中心

    汽车电子技术论坛

    医疗电子论坛

    -

    开源硬件

    -

    无线通信论坛

    无线通信技术专区

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

    -

    IC设计论坛

    芯片测试与失效分析

    Mixed Signal/SOC[数模混合芯片设计]

    Analog/RF IC设计

    设计与制造封装测试

    -

    厂商专区

    TI论坛

    TI Deyisupport社区

    -

    检测技术与质量

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

    安规知识论坛

    检测与认证

    -

    消费电子论坛

    手机技术论坛

    平板电脑/mid论坛

    音视/视频/机顶盒论坛

    -

    电子论坛综合区

    聚丰众筹官方社区

    新人报道区

    聚丰供应链

    -

    论坛服务区

    -

    供求信息发布

    供需广告

    电子展览展会专区

    芯片求购|供应发布区

    88lifa利发国际娱乐

    百度360搜索搜狗搜索