单片机产生PWM信号的原因是什么?

控制/MCU

1877人已加入

描述

随着电子技术的飞速发展,PWM控制技术渐趋成熟,主要应用于在电力电子技术行业。采用模拟控制方式生成的脉冲宽度调制(PWM)信号,是根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,实现晶体管或MOS管导通时间的改变,最终实现开关稳压电源输出的改变产生PWM信号,这种方式较复杂,成本也高。而采用单片机产生PWM信号,既简单又方便,成本低,因此,本文就单片机产生PWM信号进行分析。

1 PWM

脉冲宽度调制作为控制技术常采用的控制方式,以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式。随着微机技术在控制领域的广泛应用,单片机控制的PWM技术迅速发展,其突出特点是可以比较容易地选择最佳的脉冲调制频段。但在智能化产品开发中, 许多常用的单片机没有提供脉宽调制(PWM ) 电压信号输出功能, 而在某些特定的场合需要得到PWM信号。因此,基于单片机产生PWM信号的分析就显得非常必要。

脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。可见,PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有,要么完全无。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

2 PWM****信号的产生

脉冲宽度调制信号本质上是由占空比不同的矩形脉冲周期变化来构成的,其占空比与信号的瞬时采样值成一定的比例。根据这种方式可以采用单片机定时中断的方法,使单片机的I/O口输出一定频率的高、低电平信号,通过调节高、低电平的持续时间,即占空比的改变,这样就可以实现一定周期一定占空比的PWM信号,采用这种方式更加有效。比如采用AT89S52单片机来产生的PWM信号控制直流电动机的转速,可以很方便的在电动自行车及相关诸多领域的调速系统中进行使用。

2.1 单片机定时器中断

中断是指当CPU执行主程序时,系统中若出现某些急需处理的异常情况和特殊请求时,CPU会暂时中止程序的运行,去执行中断服务函数,处理完毕后,CPU将自动返回到原来主程序的端点处继续执行。而单片机定时器中断是在定时器工作方式下,根据设定的定时时间进行单片机内部时钟脉冲进行计数,当计满溢出时产生中断请求,即定时器中断。定时中断是单片机技术中经常采用的中断方式,应用非常广泛。

2.2 AT89S52单片机产生PWM信号

采用单片机产生PWM信号是一种非常可靠、有效的控制方式,本文以AT89S52单片机为例来产生PWM信号,通过定时中断程序来确定脉冲周期以及高低电平各自占用时间,从而形成不同的占空比,产生PWM脉冲信号。

如图所示,取AT89S52的I/O口的P3.0和P1.0两个引脚,使用P1.0接一按键开关,作为PWM信号产生的开关使用,按键闭合表示开始产生PWM信号,按键断开表示不产生PWM信号。使用P3.0用来输出PWM信号,通过P3.0输出一定的高电平信号作为脉宽,达到脉宽的设定值时,输出低电平,到达周期的设定值时又重复输出高电平,进行周期循环,从而实现PWM信号的产生。通过单片机产生的PWM信号,可以灵活的改变周期和脉冲宽度参数,从而产生不同周期和占空比的PWM信号。以产生周期为10ms、占空比为60%的PWM信号为例进行分析,采用Proteus对电路进行仿真来产生PWM信号。

PWM控制

图1 AT89S52产生PWM信号Proteus仿真电路图

本例中时钟频率为12MHz,采用定时器T0,工作方式设置为方式2,定时器T0的初值设定为0.1ms,即100us,因此,TH0=-100,TL0=-100。PWM的周期参数PWM_T(周期定义为10ms)参数设定为100,脉冲宽度参数PWM_mk设定为60。源程序如下:

#include

#define uchar unsigned char

#define uint unsigned int

#define PWM_T 100

sbit K1=P1^0;

ucharPWM_mk;

ucharPWM_count;

uchartime_i;

sbitPWM=P3^0;

voiddelay(uint ms)

{ uchar i;

uint j;

for(j=0;j< ms;j++)

for(i=0;i< 125;i++);

}

voidmain()

{ PWM_mk=0;

PWM=0;

TMOD=0x02;

TH0=-100;

TL0=-100;

EA=1;

ET0=0;

TR0=0;

while(1)

{   if(K1==0)

    delay(10);

    if(K1==0)

    {   PWM_mk=60;

        ET0=1;

        TR0=1;  }

}

}

voidtime0(void) interrupt 1 using 0

{ time_i++;

if(time_i >= PWM_T) time_i=0;

if(time_i< PWM_mk) PWM=1;

else PWM=0;

}

采用keil软件编译程序,程序编译成功,采用仿真软件Proteus进行仿真产生需要的PWM信号,如图2所示。

PWM控制

图2占空比为60.%的PWM信号波形

2.3 PWM信号的调节

通过单片机来产生PWM信号灵活方便,如果需要改变占空比,只需要改变程序中的脉冲宽度参数即可,程序中脉冲宽度参数为PWM_mk,如将PWM_mk设为30,则PWM信号的占空比为30%;若要改变PWM的周期,应该改变程序中PWM_T的值即可,此时应注意定时器工作方式2的最大计数,以免溢出无法计数,若超出计数最大值,可以选择工作方式1进行程序编写。

**3 **结语

综合以上分析可以看出,采用单片机产生的PWM信号电路简单,成本低,无需通过对模拟电路个元器件参数进行计算及电路设计。另外,通过单片机的定时器实现PWM信号频率和占空比的灵活调节,信号准确,更加可靠、有效。利用该方法产生的信号可作为各种需要PWM控制的信号源发生器,根据需要还可进行显示及按键控制等处理。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分