美文网首页
51输出PWM

51输出PWM

作者: 飞向深空 | 来源:发表于2019-01-20 09:09 被阅读0次

51单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。
用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。

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

当然我们可以加入其它的手段来动态改变占空比,比如按键,上位机等。
按键动态调节占空比可参考我另一篇博客:http://blog.csdn.net/dmfylb/article/details/72605221


作者:大漠飞鹰lb
来源:CSDN
原文:https://blog.csdn.net/dmfylb/article/details/72465762
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

  • 51输出PWM

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

  • 51单片机按键控制输出pwm的占空比 物联网开发找上海捌跃网络科

    人分类:物联网 之前说到利用51单片机输出pwm,但是输出的pwm是固定占空比的,如果想要改变占空比,还得回过头来...

  • 异相方波

    要想输出异相方波,就得先明白翻转的方式进行输出PWM波的方式是什么。Toggle(翻转)输出pwm的原理是:在计数...

  • 12.11

    AD,DA转换,PWM输出,Timer定时器分配通道channel,转换成PWM模式输出,通过调节占空比实现,观察...

  • mBlock & Arduino(5)可变电阻、ADC

    在〈mBlock & Arduino(4)利用 PWM 模拟类比讯号〉中,我们试着使用 PWM 来模拟类比讯号输出...

  • PWM输出笔记

    一、简介     脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽...

  • Arduino PWM输出

    以下代码每隔100毫秒向PD3口发送PWM(0 ~ 255)的递增脉冲值 LED会从暗到亮 无限循环并将每次递增的...

  • 嵌入式学习笔记19.12.20

    PWM输出 定时器复用功能: 1. 有效电平 2. PWM1 PWM2 区别在于有效电平在前在后 占空比 Prel...

  • PWM输出控制LED亮灭(通用定时器TIMx)

    PWM即脉冲宽度调试,通过对周期内高低点平的所占时间长短(占空比)来调节GPIO的输出。 PWM的输出需要用到定时...

  • PWM输出学习笔记

    脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器...

网友评论

      本文标题:51输出PWM

      本文链接:https://www.haomeiwen.com/subject/mftxjqtx.html