PWM的原理: PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。
PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆变电路中的应用,才确定了它在电力电子技术中的重要地位。
1.PWM控制的基本原理
(1)理论基础:
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量指窄脉冲的面积。效果基本相同,是指环节的输出响应波形基本相同。低频段非常接近,仅在高频段略有差异。
(2)面积等效原理:
分别将如图1所示
电压窄脉冲加在一阶惯性环节(R-L电路)上,如图a所示。其输出电流I(t)对不同窄脉冲时的响应波形如图b所示。从波形可以看出,在I(t)的上升段,I(t)的形状也略有不同,但其下降段则几乎完全相同。脉冲越窄,各I(t)响应波形的差异也越小。如果周期性地施加上述脉冲,则响应I(t)也是周期性的。用傅里叶级数分解后将可看出,各i(t)在低频段的特性将非常接近,仅在高频段有所不同。
图2 冲量相同的各种窄脉冲的响应波形
用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。
SPWM波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM波形。
图3 用PWM波代替正弦半波
要改变等效输出正弦波幅值,按同一比例改变各脉冲宽度即可。
PWM电流波: 电流型逆变电路进行PWM控制,得到的就是PWM电流波。
PWM波形可等效的各种波形:
直流斩波电路:等效直流波形
SPWM波:等效正弦波形,还可以等效成其他所需波形,如等效所需非正弦交流波形等,其基本原理和SPWM控制相同,也基于等效面积原理。
2. PWM相关概念
占空比:就是输出的PWM中,高电平保持的时间 与 该PWM的时钟周期的时间 之比
如,一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。
分辨率也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率), 16位的的PWM理论就是1:65535(单斜率)。
频率就是这样的,如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80.......,那么它的分辨率最小就是1:80了,但是,它也快了,也就是说PWM的输出频率高了。
双斜率 / 单斜率
假设一个PWM从0计数到80,之后又从0计数到80....... 这个就是单斜率。
假设一个PWM从0计数到80,之后是从80计数到0....... 这个就是双斜率。
可见,双斜率的计数时间多了一倍,所以输出的PWM频率就慢了一半,但是分辨率却是1:(80+80) =1:160,就是提高了一倍。
假设PWM是单斜率,设定最高计数是80,我们再设定一个比较值是10,那么T/C从0计数到10时(这时计数器还是一直往上计数,直到计数到设定值80),单片机就会根据你的设定,控制某个IO口在这个时候是输出1还是输出0还是端口取反,这样,就是PWM的最基本的原理了。
PWM调速原理
在数控机床的直流伺服系统中,速度调节主要通过改变电枢电压的大小来实现.经常采用晶闸管相控整流调速或大功率晶体管脉宽调制调速两种方法,后者简称PWM,常见于中小功率系统,它采用脉冲宽度调制技术,其工作原理是:通过改变"接通脉冲"的宽度,使直流电机电枢上的电压的"占空比"改变,从而改变电枢电压的平均值,控制电机的转速.
PWM调速系统具有以下特点:
1.主电路简单,所用功率元件少,且工作于开关状态,因此电路的导通损耗小,装置效率比较高;
2.开关频率高,可避开机床的共振区,工作平稳;
3.采用功率较小的低惯量电机时,具有高的定位速度和精度;
4.低速性能好,稳速精度高,调速范围宽;
5.系统频带宽,动态响应好,抗干扰能力强.
常见的PWM驱动系统的主电路(功率放大器)结构有:H型和T型,下面介绍双极式H型PWM驱动的电路工作原理.
图1-2-2-1
图1-2-2-1中,VD1,VD2,VD3,VD4为续流二极管,用来保护VT1,VT2,VT3,VT4三极管,图中Ub1=Ub4=-Ub2=-Ub3.
当Ub1=Ub4为正时,VT1 和VT4导通, VT2和 VT3截止,UAB的电压=US;
当Ub2=Ub3为正时, VT1和 VT4截止,但VT2 和VT3不能立即导通,因为电机的反电势使AB存在续流,续流流经VD3和VD2,保护了四个三极管,若续流在这个过程没有得到很大衰减,而Ub1=Ub4为正的阶段已经来临,则VT2 和VT3没有导通的时候;若续流在这个过程得到很大衰减,则VT2 和VT3导通,UAB的电压=-US.
显然,Ub1=Ub4为正的时间和Ub2=Ub3为正的时间相同时, UAB的平均值=0,电机动态静止;Ub1=Ub4为正的时间长于Ub2=Ub3为正的时间时, UAB的平均值>0,电机正转UAB的值越大,转速越高;Ub1=Ub4为正的时间短于Ub2=Ub3为正的时间时, UAB的平均值<0,电机反转,UAB的值越小,转速越高.
可见,只要控制Ub1,Ub4,Ub2,Ub3的脉冲宽度,就可控制电机的转向和速度,且可以达到动态静止,有利于正反转死区的消除
PWM 直流电机调速程序参考
//***********************************************************************//
//************ L298驱动直流电机 PWM调速,控制正反转 ********************//
//***********************************************************************//
#include #include #define uchar unsigned char #define uint unsigned int sbit enA=P1^2; // A相始能端 sbit in1=P1^1; // sbit in2=P1^0; // 输入端 char zkb=-100; // 设置占空比,范围在(-100~100)占空比的绝对值越大,速度越大 uchar t=0; // 中断计数器 uchar dianji=0; // 电机速度值 uchar SPACH; // 电机当前速度值 //***********************************************************************// //********************** 正反转控制 *************************************// //***********************************************************************// void motor(char speed) { if(speed<=100) { dianji=abs(speed);// 取speed的绝对值 if(speed>0) // 不为负数则正转 { in1=0; in2=1; } if(speed<0) // 否者反转 { in1=1; in2=0; } } } /******************** 延时函数 *******************/ void delay(uint j) { for(j;j>0;j--); } /******************** 主函数 *******/ void main() { TMOD=0x02; //设定T0的工作模式为工作方式2 TH0=0x9B; //装入定时器的初值 TL0=0x9B; EA=1; //开中断 ET0=1; // 定时器0允许中断 TR0=1; //启动定时器0 while(1) { motor(zkb); // delay(1000); //延时 } } //******************* 中断服务子函数 **************** Void timer0() interrupt 1 //T0中断服务程序 { if(t==0) //1个PWM周期完成后才会接受新数值 { SPACH=dianji; } if(t t++; if(t>=100) t=0; //1个PWM信号由100次中断产生 }