打印

软件实现PWM信号

[复制链接]
1505|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
PWM,脉冲宽度调制,简称脉冲调制,是一种最初用于无线电通信的信号调制技术,后来在控制领域中也得到了很好的应用,于是形成了独特的PWM控制技术。在很多单片机测控系统中,需要PWM控制信号,用于大功率直流控制,信号传输等场合。
但是51单片机没有PWM功能,解决这个问题可以采用软件模拟的办法实现PWM输出。
51单片机普通I/O端口产生PWM脉冲的工作量主要集中在软件设计上,因而电路设计很简单,如下图

程序流程图

程序

****************************************************************************
主程序功能为输出一个高电平宽度逐渐增加的PWM脉冲信号
****************************************************************************
#include <reg51.h>       // 引用标准库的头文件
#define uchar unsigned char
#define uint unsigned int
uchar   cnt1,cnt2,cnt3 cnt4,cnt5
sbit    PWM=P1^0                     PWM脉冲输出端
sbit    RED=P1^1                      红色发光管控制端
uchar  flag  
Void main(void)
{
   TMOD=0x02;                     //定时器T0处于8位重装工作方式
   TH0=0x00;
   TL0=0x00;                       // T0 定时256us
   EA=1;                           //开CPU中断
   ET0=1;                          //开定时器0中断
   PULSE=0;
   RED=0;                        //点亮红色发光管
   FLAG=0x00;                     //标志清零
   TR0=1                          //启动定时器T0
   cnt1=0x00;                     
cnt2=0xff;
cnt3=0xff;
cnt4=0x00;
   while(1)
{
  If(flag=0)                          //PWM脉冲输出控制标志判断
    {;}
  else
{
ET0=0;                           //关闭定时器T0
RED=1;                          //熄灭红色发光管
}
}
}
/* 定时器0中断服务子程序 */
void timer0_int() interrupt 1 using 1
{
      TR0 = 0;      // 关闭T0
      cnt1++;
      if(cnt1>=cnt3)                   //判断65ms定时到否
        {
PULSE=1;                  //PWM端开始输出高电平
cnt4++                     //高电平维持时间片断数增加1
if(cnt4>=(0xff-cnt3)+1)       判断PWM脉冲是否需要跳变,即高电平时间到否
{
PULSE=0;                  //PWM脉冲输出为低
cnt3--;                    //低电平维持时间片断数减1
         cnt2++;                    //PWM脉冲高电平维持时间控制参数加1
         cnt1=0x00;                //恢复65ms定时参数
}
else{;}
}
     else
        {
         cnt1=0x00;                   //恢复65ms定时参数
}
     if(cnt2>=0xff)                    //判断PWM脉冲高电平维持时间最大否
        {
ET0=0;                      //高电平维持时间到最大,关闭定时器T0
}
   TR0 = 1;        // 启动T0
}

相关帖子

沙发
jxmzzr| | 2012-4-19 08:14 | 只看该作者
给出了实现脉冲宽度逐渐增加的程序实现,如何能实现脉宽渐减的PWM脉冲了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝