pwm控制算法
⑴ PWM里面单边沿和双边沿有什么区别他们用单片机实现步骤是什么
PWM里面单边沿和双边沿的提法,只是LPC176X处理器中的两个PWM控制模式。单边沿模式的起始状态总是高电平。单边沿模式只需要设置两个寄存器,一个决定PWM周期,另一个决定周期中间由高电平翻转到低电平的时间。在一个PWM周期中间只有一个下降沿,所以称为单边沿模式。双边沿模式则需要设置3个寄存器,一个决定PWM周期,另两个寄存器决定在周期中间电平状态翻转的两个时间点。这样在一个PWM周期中间就会出现两个边沿,所以称为双边沿模式。在实现控制算法的时候,双边沿模式有一定的灵活性。
一般用单片机实现PWM并不一定需要考虑这两种模式。
⑵ PWM脉宽调制器原理是什么
脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也可以用同样的方法得到PWM波形。
在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。
根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。
⑶ PWM波如何产生并控制
控制方法
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形.按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率. PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现.直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才真正得到应用.随着电力电子技术,微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论,非线性系统控制思想的应用,PWM控制技术获得了空前的发展.到目前为止,已出现了多种PWM控制技术,根据PWM控制技术的特点,到目前为止主要有以下8类方法.
等脉宽PWM法
VVVF(Variable Voltage Variable Frequency)装置在早期是采用PAM(Pulse Amplitude Molation)控制技术来实现的,其逆变器部分只能输出频率可调的方波电压而不能调压.等脉宽PWM法正是为了克服PAM法的这个缺点发展而来的,是PWM法中最为简单的一种.它是把每一脉冲的宽度均相等的脉冲列作为PWM波,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化.相对于PAM法,该方法的优点是简化了电路结构,提高了输入端的功率因数,但同时也存在输出电压中除基波外,还包含较大的谐波分量.
随机PWM
在上世纪70年代开始至上世纪80年代初,由于当时大功率晶体管主要为双极性达林顿三极管,载波频率一般不超过5kHz,电机绕组的电磁噪音及谐波造成的振动引起了人们的关注.为求得改善,随机PWM方法应运而生.其原理是随机改变开关频率使电机电磁噪音近似为限带白噪声(在线性频率坐标系中,各频率能量分布是均匀的),尽管噪音的总分贝数未变,但以固定开关频率为特征的有色噪音强度大大削弱.正因为如此,即使在IGBT已被广泛应用的今天,对于载波频率必须限制在较低频率的场合,随机PWM仍然有其特殊的价值;另一方面则说明了消除机械和电磁噪音的最佳方法不是盲目地提高工作频率,随机PWM技术正是提供了一个分析,解决这种问题的全新思路.
SPWM法
SPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法.前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值.该方法的实现有以下几种方案.
等面积法
该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的.由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点.
硬件调制法
硬件调制法是为解决等面积法计算繁琐的缺点而提出的,其原理就是把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形.通常采用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形.其实现方法简单,可以用模拟电路构成三角波载波和正弦调制波发生电路,用比较器来确定它们的交点,在交点时刻对开关器件的通断进行控制,就可以生成SPWM波.但是,这种模拟电路结构复杂,难以实现精确的控制.
软件生成法
由于微机技术的发展使得用软件生成SPWM波形变得比较容易,因此,软件生成法也就应运而生.软件生成法其实就是用软件来实现调制的方法,其有两种基本算法,即自然采样法和规则采样法.
自然采样法
以正弦波为调制波,等腰三角波为载波进行比较,在两个波形的自然交点时刻控制开关器件的通断,这就是自然采样法.其优点是所得SPWM波形最接近正弦波,但由于三角波与正弦波交点有任意性,脉冲中心在一个周期内不等距,从而脉宽表达式是一个超越方程,计算繁琐,难以实时控制.
规则采样法
规则采样法是一种应用较广的工程实用方法,一般采用三角波作为载波.其原理就是用三角波对正弦波进行采样得到阶梯波,再以阶梯波与三角波的交点时刻控制开关器件的通断,从而实现SPWM法.当三角波只在其顶点(或底点)位置对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(即采样周期)内的位置是对称的,这种方法称为对称规则采样.当三角波既在其顶点又在底点时刻对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(此时为采样周期的两倍)内的位置一般并不对称,这种方法称为非对称规则采样. 规则采样法是对自然采样法的改进,其主要优点就是是计算简单,便于在线实时运算,其中非对称规则采样法因阶数多而更接近正弦.其缺点是直流电压利用率较低,线性控制范围较小. 以上两种方法均只适用于同步调制方式中.
低次谐波消去法
低次谐波消去法是以消去PWM波形中某些主要的低次谐波为目的的方法.其原理是对输出电压波形按傅氏级数展开,表示为u(ωt)=ansinnωt,首先确定基波分量a1的值,再令两个不同的an=0,就可以建立三个方程,联立求解得a1,a2及a3,这样就可以消去两个频率的谐波. 该方法虽然可以很好地消除所指定的低次谐波,但是,剩余未消去的较低次谐波的幅值可能会相当大,而且同样存在计算复杂的缺点.该方法同样只适用于同步调制方式中.
梯形波与三角波比较法
前面所介绍的各种方法主要是以输出波形尽量接近正弦波为目的,从而忽视了直流电压的利用率,如SPWM法,其直流电压利用率仅为86.6%.因此,为了提高直流电压利用率,提出了一种新的方法--梯形波与三角波比较法.该方法是采用梯形波作为调制信号,三角波为载波,且使两波幅值相等,以两波的交点时刻控制开关器件的通断实现PWM控制. 由于当梯形波幅值和三角波幅值相等时,其所含的基波分量幅值已超过了三角波幅值,从而可以有效地提高直流电压利用率.但由于梯形波本身含有低次谐波,所以输出波形中含有5次,7次等低次谐波.
线电压控制PWM
前面所介绍的各种PWM控制方法用于三相逆变电路时,都是对三相输出相电压分别进行控制的,使其输出接近正弦波,但是,对于像三相异步电动机这样的三相无中线对称负载,逆变器输出不必追求相电压接近正弦,而可着眼于使线电压趋于正弦.因此,提出了线电压控制PWM,主要有以下两种方法.
马鞍形波与三角波比较法
马鞍形波与三角波比较法也就是谐波注入PWM方式(HIPWM),其原理是在正弦波中加入一定比例的三次谐波,调制信号便呈现出马鞍形,而且幅值明显降低,于是在调制信号的幅值不超过载波幅值的情况下,可以使基波幅值超过三角波幅值,提高了直流电压利用率.在三相无中线系统中,由于三次谐波电流无通路,所以三个线电压和线电流中均不含三次谐波[4]. 除了可以注入三次谐波以外,还可以注入其他3倍频于正弦波信号的其他波形,这些信号都不会影响线 电压.这是因为,经过PWM调制后逆变电路输出的相电压也必然包含相应的3倍频于正弦波信号的谐波,但在合成线电压时,各相电压中的这些谐波将互相抵消,从而使线电压仍为正弦波.
单元脉宽调制法
因为,三相对称线电压有Uuv+Uvw+Uwu=0的关系,所以,某一线电压任何时刻都等于另外两个线电压负值之和.现在把一个周期等分为6个区间,每区间60°,对于某一线电压例如Uuv,半个周期两边60°区间用Uuv本身表示,中间60°区间用-(Uvw+Uwu)表示,当将Uvw和Uwu作同样处理时,就可以得到三相线电压波形只有半周内两边60°区间的两种波形形状,并且有正有负.把这样的电压波形作为脉宽调制的参考信号,载波仍用三角波,并把各区间的曲线用直线近似(实践表明,这样做引起的误差不大,完全可行),就可以得到线电压的脉冲波形,该波形是完全对称,且规律性很强,负半周是正半周相应脉冲列的反相,因此,只要半个周期两边60°区间的脉冲列一经确定,线电压的调制脉冲波形就唯一地确定了.这个脉冲并不是开关器件的驱动脉冲信号,但由于已知三相线电压的脉冲工作模式,就可以确定开关器件的驱动脉冲信号了. 该方法不仅能抑制较多的低次谐波,还可减小开关损耗和加宽线性控制区,同时还能带来用微机控制的方便,但该方法只适用于异步电动机,应用范围较小.
电流控制PWM
电流控制PWM的基本思想是把希望输出的电流波形作为指令信号,把实际的电流波形作为反馈信号,通过两者瞬时值的比较来决定各开关器件的通断,使实际输出随指令信号的改变而改变.其实现方案主要有以下3种.
滞环比较法
这是一种带反馈的PWM控制方式,即每相电流反馈回来与电流给定值经滞环比较器,得出相应桥臂开关器件的开关状态,使得实际电流跟踪给定电流的变化.该方法的优点是电路简单,动态性能好,输出电压不含特定频率的谐波分量.其缺点是开关频率不固定造成较为严重的噪音,和其他方法相比,在同一开关频率下输出电流中所含的谐波较多.
三角波比较法
该方法与SPWM法中的三角波比较方式不同,这里是把指令电流与实际输出电流进行比较,求出偏差电流,通过放大器放大后再和三角波进行比较,产生PWM波.此时开关频率一定,因而克服了滞环比较法频率不固定的缺点.但是,这种方式电流响应不如滞环比较法快.
预测电流控制法
预测电流控制是在每个调节周期开始时,根据实际电流误差,负载参数及其它负载变量,来预测电流误差矢量趋势,因此,下一个调节周期由PWM产生的电压矢量必将减小所预测的误差.该方法的优点是,若给调节器除误差外更多的信息,则可获得比较快速,准确的响应.目前,这类调节器的局限性是响应速度及过程模型系数参数的准确性.
空间电压矢量控制PWM
空间电压矢量控制PWM(SVPWM)也叫磁通正弦PWM法.它以三相波形整体生成效果为前提,以逼近电机气隙的理想圆形旋转磁场轨迹为目的,用逆变器不同的开关模式所产生的实际磁通去逼近基准圆磁通,由它们的比较结果决定逆变器的开关,形成PWM波形.此法从电动机的角度出发,把逆变器和电机看作一个整体,以内切多边形逼近圆的方式进行控制,使电机获得幅值恒定的圆形磁场(正弦磁通). 具体方法又分为磁通开环式和磁通闭环式.磁通开环法用两个非零矢量和一个零矢量合成一个等效的电压矢量,若采样时间足够小,可合成任意电压矢量.此法输出电压比正弦波调制时提高15%,谐波电流有效值之和接近最小.磁通闭环式引 入磁通反馈,控制磁通的大小和变化的速度.在比较估算磁通和给定磁通后,根据误差决定产生下一个电压矢量,形成PWM波形.这种方法克服了磁通开环法的不足,解决了电机低速时,定子电阻影响大的问题,减小了电机的脉动和噪音.但由于未引入转矩的调节,系统性能没有得到根本性的改善.
矢量控制PWM
矢量控制也称磁场定向控制,其原理是将异步电动机在三相坐标系下的定子电流Ia,Ib及Ic,通过三相/二相变换,等效成两相静止坐标系下的交流电流Ia1及Ib1,再通过按转子磁场定向旋转变换,等效成同步旋转坐标系下的直流电流Im1及It1(Im1相当于直流电动机的励磁电流;It1相当于与转矩成正比的电枢电流),然后模仿对直流电动机的控制方法,实现对交流电动机的控制.其实质是将交流电动机等效为直流电动机,分别对速度,磁场两个分量进行独立控制.通过控制转子磁链,然后分解定子电流而获得转矩和磁场两个分量,经坐标变换,实现正交或解耦控制. 但是,由于转子磁链难以准确观测,以及矢量变换的复杂性,使得实际控制效果往往难以达到理论分析的效果,这是矢量控制技术在实践上的不足.此外.它必须直接或间接地得到转子磁链在空间上的位置才能实现定子电流解耦控制,在这种矢量控制系统中需要配置转子位置或速度传感器,这显然给许多应用场合带来不便.
直接转矩控制PWM
1985年德国鲁尔大学Depenbrock教授首先提出直接转矩控制理论(Direct Torque Control简称DTC).直接转矩控制与矢量控制不同,它不是通过控制电流,磁链等量来间接控制转矩,而是把转矩直接作为被控量来控制,它也不需要解耦电机模型,而是在静止的坐标系中计算电机磁通和转矩的实际值,然后,经磁链和转矩的Band-Band控制产生PWM信号对逆变器的开关状态进行最佳控制,从而在很大程度上解决了上述矢量控制的不足,能方便地实现无速度传感器化,有很快的转矩响应速度和很高的速度及转矩控制精度,并以新颖的控制思想,简洁明了的系统结构,优良的动静态性能得到了迅速发展. 但直接转矩控制也存在缺点,如逆变器开关频率的提高有限制.
非线性控制PWM
单周控制法[7]又称积分复位控制(Integration Reset Control,简称IRC),是一种新型非线性控制技术,其基本思想是控制开关占空比,在每个周期使开关变量的平均值与控制参考电压相等或成一定比例.该技术同时具有调制和控制的双重性,通过复位开关,积分器,触发电路,比较器达到跟踪指令信号的目的.单周控制器由控制器,比较器,积分器及时钟组成,其中控制器可以是RS触发器,其控制原理如图1所示.图中K可以是任何物理开关,也可是其它可转化为开关变量形式的抽象信号. 单周控制在控制电路中不需要误差综合,它能在一个周期内自动消除稳态,瞬态误差,使前一周期的误差不会带到下一周期.虽然硬件电路较复杂,但其克服了传统的PWM控制方法的不足,适用于各种脉宽调制软开关逆变器,具有反应快,开关频率恒定,鲁棒性强等优点,此外,单周控制还能优化系统响应,减小畸变和抑制电源干扰,是一种很有前途的控制方法.
谐振软开关PWM
传统的PWM逆变电路中,电力电子开关器件硬开关的工作方式,大的开关电压电流应力以及高的/dt和di/dt限制了开关器件工作频率的提高,而高频化是电力电子主要发展趋势之一,它能使变换器体积减小,重量减轻,成本下降,性能提高,特别当开关频率在18kHz以上时,噪声将已超过人类听觉范围,使无噪声传动系统成为可能. 谐振软开关PWM的基本思想是在常规PWM变换器拓扑的基础上,附加一个谐振网络,谐振网络一般由谐振电感,谐振电容和功率开关组成.开关转换时,谐振网络工作使电力电子器件在开关点上实现软开关过程,谐振过程极短,基本不影响PWM技术的实现.从而既保持了PWM技术的特点,又实现了软开关技术.但由于谐振网络在电路中的存在必然会产生谐振损耗,并使电路受固有问题的影响,从而限制了该方法的应用。
⑷ PWM技术的几种PWM控制方法
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形.按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。
PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现.直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才真正得到应用.随着电力电子技术,微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论,非线性系统控制思想的应用,PWM控制技术获得了空前的发展.到目前为止,已出现了多种PWM控制技术,根据PWM控制技术的特点,到目前为止主要有以下方法。 在上世纪70年代开始至上世纪80年代初,由于当时大功率晶体管主要为双极性达林顿三极管,载波频率一般不超过5kHz,电机绕组的电磁噪音及谐波造成的振动引起了人们的关注。为求得改善,随机PWM方法应运而生。
其原理是随机改变开关频率使电机电磁噪音近似为限带白噪声(在线性频率坐标系中,各频率能量分布是均匀的),尽管噪音的总分贝数未变,但以固定开关频率为特征的有色噪音强度大大削弱。
正因为如此,即使在IGBT已被广泛应用的今天,对于载波频率必须限制在较低频率的场合,随机PWM仍然有其特殊的价值;另一方面则说明了消除机械和电磁噪音的最佳方法不是盲目地提高工作频率,随机PWM技术正是提供了一个分析,解决这种问题的全新思路。 SPWM(Sinusoidal PWM)法是一种比较成熟的,目前使用较广泛的PWM法。
前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值。该方法的实现有以下几种方案。 等面积法
该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的。由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点。 硬件调制法
硬件调制法是为解决等面积法计算繁琐的缺点而提出的,其原理就是把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形.通常采用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形.其实现方法简单,可以用模拟电路构成三角波载波和正弦调制波发生电路,用比较器来确定它们的交点,在交点时刻对开关器件的通断进行控制,就可以生成SPWM波.但是,这种模拟电路结构复杂,难以实现精确的控制。 软件生成法
由于微机技术的发展使得用软件生成SPWM波形变得比较容易,因此,软件生成法也就应运而生.软件生成法其实就是用软件来实现调制的方法,其有两种基本算法,即自然采样法和规则采样法。 自然采样法
以正弦波为调制波,等腰三角波为载波进行比较,在两个波形的自然交点时刻控制开关器件的通断,这就是自然采样法。其优点是所得SPWM波形最接近正弦波,但由于三角波与正弦波交点有任意性,脉冲中心在一个周期内不等距,从而脉宽表达式是一个超越方程,计算繁琐,难以实时控制。 规则采样法
规则采样法是一种应用较广的工程实用方法,一般采用三角波作为载波。其原理就是用三角波对正弦波进行采样得到阶梯波,再以阶梯波与三角波的交点时刻控制开关器件的通断,从而实现SPWM法。 当三角波只在其顶点(或底点)位置对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(即采样周期)内的位置是对称的,这种方法称为对称规则采样。 当三角波既在其顶点又在底点时刻对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(此时为采样周期的两倍)内的位置一般并不对称,这种方法称为非对称规则采样。
规则采样法是对自然采样法的改进,其主要优点就是是计算简单,便于在线实时运算,其中非对称规则采样法因阶数多而更接近正弦.其缺点是直流电压利用率较低,线性控制范围较小。
以上两种方法均只适用于同步调制方式中。 低次谐波消去法是以消去PWM波形中某些主要的低次谐波为目的的方法。其原理是对输出电压波形按傅氏级数展开,表示为u(ωt)=ansinnωt,首先确定基波分量a1的值,再令两个不同的an=0,就可以建立三个方程,联立求解得a1、a2及a3,这样就可以消去两个频率的谐波。
该方法虽然可以很好地消除所指定的低次谐波,但是,剩余未消去的较低次谐波的幅值可能会相当大,而且同样存在计算复杂的缺点。该方法同样只适用于同步调制方式中。 前面所介绍的各种方法主要是以输出波形尽量接近正弦波为目的,从而忽视了直流电压的利用率,如SPWM法,其直流电压利用率仅为86.6%。因此,为了提高直流电压利用率,提出了一种新的方法——梯形波与三角波比较法。该方法是采用梯形波作为调制信号,三角波为载波,且使两波幅值相等,以两波的交点时刻控制开关器件的通断实现PWM控制。
由于当梯形波幅值和三角波幅值相等时,其所含的基波分量幅值已超过了三角波幅值,从而可以有效地提高直流电压利用率.但由于梯形波本身含有低次谐波,所以输出波形中含有5次,7次等低次谐波。 前面所介绍的各种PWM控制方法用于三相逆变电路时,都是对三相输出相电压分别进行控制的,使其输出接近正弦波,但是,对于像三相异步电动机这样的三相无中线对称负载,逆变器输出不必追求相电压接近正弦,而可着眼于使线电压趋于正弦。因此,提出了线电压控制PWM,主要有以下两种方法: 马鞍形波与三角波比较法
马鞍形波与三角波比较法也就是谐波注入PWM方式(HIPWM),其原理是在正弦波中加入一定比例的三次谐波,调制信号便呈现出马鞍形,而且幅值明显降低,于是在调制信号的幅值不超过载波幅值的情况下,可以使基波幅值超过三角波幅值,提高了直流电压利用率。在三相无中线系统中,由于三次谐波电流无通路,所以三个线电压和线电流中均不含三次谐波[4]。
除了可以注入三次谐波以外,还可以注入其他3倍频于正弦波信号的其他波形,这些信号都不会影响线
电压.这是因为,经过PWM调制后逆变电路输出的相电压也必然包含相应的3倍频于正弦波信号的谐波,但在合成线电压时,各相电压中的这些谐波将互相抵消,从而使线电压仍为正弦波。 单元脉宽调制法
因为,三相对称线电压有Uuv+Uvw+Uwu=0的关系,所以,某一线电压任何时刻都等于另外两个线电压负值之和。现在把一个周期等分为6个区间,每区间60°,对于某一线电压例如Uuv,半个周期两边60°区间用Uuv本身表示,中间60°区间用-(Uvw+Uwu)表示,当将Uvw和Uwu作同样处理时,就可以得到三相线电压波形只有半周内两边60°区间的两种波形形状,并且有正有负.把这样的电压波形作为脉宽调制的参考信号,载波仍用三角波,并把各区间的曲线用直线近似(实践表明,这样做引起的误差不大,完全可行),就可以得到线电压的脉冲波形,该波形是完全对称,且规律性很强,负半周是正半周相应脉冲列的反相,因此,只要半个周期两边60°区间的脉冲列一经确定,线电压的调制脉冲波形就唯一地确定了.这个脉冲并不是开关器件的驱动脉冲信号,但由于已知三相线电压的脉冲工作模式,就可以确定开关器件的驱动脉冲信号了。
该方法不仅能抑制较多的低次谐波,还可减小开关损耗和加宽线性控制区,同时还能带来用微机控制的方便,但该方法只适用于异步电动机,应用范围较小。 电流控制PWM的基本思想是把希望输出的电流波形作为指令信号,把实际的电流波形作为反馈信号,通过两者瞬时值的比较来决定各开关器件的通断,使实际输出随指令信号的改变而改变。其实现方案主要有以下3种。 滞环比较法
这是一种带反馈的PWM控制方式,即每相电流反馈回来与电流给定值经滞环比较器,得出相应桥臂开关器件的开关状态,使得实际电流跟踪给定电流的变化。该方法的优点是电路简单,动态性能好,输出电压不含特定频率的谐波分量。其缺点是开关频率不固定造成较为严重的噪音,和其他方法相比,在同一开关频率下输出电流中所含的谐波较多。 三角波比较法
该方法与SPWM中的三角波比较方式不同,这里是把指令电流与实际输出电流进行比较,求出偏差电流,通过放大器放大后再和三角波进行比较,产生PWM波。此时开关频率一定,因而克服了滞环比较法频率不固定的缺点。但是,这种方式电流响应不如滞环比较法快。 预测电流控制法
预测电流控制是在每个调节周期开始时,根据实际电流误差、负载参数及其它负载变量,来预测电流误差矢量趋势,因此,下一个调节周期由PWM产生的电压矢量必将减小所预测的误差。该方法的优点是,若给调节器除误差外更多的信息,则可获得比较快速、准确的响应。这类调节器的局限性在于响应速度及过程模型系数参数的准确性。 空间电压矢量控制PWM(SVPWM)也叫磁通正弦PWM。它以三相波形整体生成效果为前提,以逼近电机气隙的理想圆形旋转磁场轨迹为目的,用逆变器不同的开关模式所产生的实际磁通去逼近基准圆磁通,由它们的比较结果决定逆变器的开关,形成PWM波形。此法从电动机的角度出发,把逆变器和电机看作一个整体,以内切多边形逼近圆的方式进行控制,使电机获得幅值恒定的圆形磁场(正弦磁通)。
具体方法又分为磁通开环式和磁通闭环式。 磁通开环法用两个非零矢量和一个零矢量合成一个等效的电压矢量,若采样时间足够小,可合成任意电压矢量。此法输出电压比正弦波调制时提高15%,谐波电流有效值之和接近最小。 磁通闭环式引入磁通反馈,控制磁通的大小和变化的速度。在比较估算磁通和给定磁通后,根据误差决定产生下一个电压矢量,形成PWM波形。这种方法克服了磁通开环法的不足,解决了电机低速时,定子电阻影响大的问题,减小了电机的脉动和噪音。但由于未引入转矩的调节,系统性能没有得到根本性的改善。 矢量控制也称磁场定向控制,其原理是将异步电动机在三相坐标系下的定子电流Ia、Ib及Ic,通过三相/二相变换,等效成两相静止坐标系下的交流电流Ia1及Ib1,再通过按转子磁场定向旋转变换,等效成同步旋转坐标系下的直流电流Im1及It1(Im1相当于直流电动机的励磁电流;It1相当于与转矩成正比的电枢电流),然后模仿对直流电动机的控制方法,实现对交流电动机的控制。其实质是将交流电动机等效为直流电动机,分别对速度、磁场两个分量进行独立控制。通过控制转子磁链,然后分解定子电流而获得转矩和磁场两个分量,经坐标变换,实现正交或解耦控制。
但是,由于转子磁链难以准确观测,以及矢量变换的复杂性,使得实际控制效果往往难以达到理论分析的效果,这是矢量控制技术在实践上的不足。此外,它必须直接或间接地得到转子磁链在空间上的位置才能实现定子电流解耦控制,在这种矢量控制系统中需要配置转子位置或速度传感器,这显然给许多应用场合带来不便。 1985年德国鲁尔大学Depenbrock教授首先提出直接转矩控制理论(Direct Torque Control,简称DTC)。直接转矩控制与矢量控制不同,它不是通过控制电流、磁链等量来间接控制转矩,而是把转矩直接作为被控量来控制,它也不需要解耦电机模型,而是在静止的坐标系中计算电机磁通和转矩的实际值,然后,经磁链和转矩的Band-Band控制产生PWM信号对逆变器的开关状态进行最佳控制,从而在很大程度上解决了上述矢量控制的不足,能方便地实现无速度传感器化,有很快的转矩响应速度和很高的速度及转矩控制精度,并以新颖的控制思想,简洁明了的系统结构,优良的动静态性能得到了迅速发展。
但直接转矩控制也存在缺点,如逆变器开关频率的提高有限制。 单周控制法[7]又称积分复位控制(Integration Reset Control,简称IRC),是一种新型非线性控制技术,其基本思想是控制开关占空比,在每个周期使开关变量的平均值与控制参考电压相等或成一定比例。该技术同时具有调制和控制的双重性,通过复位开关、积分器、触发电路、比较器达到跟踪指令信号的目的。单周控制器由控制器、比较器、积分器及时钟组成,其中控制器可以是RS触发器,开关是任何物理开关,也可是其它可转化为开关变量形式的抽象信号。
单周控制在控制电路中不需要误差综合,它能在一个周期内自动消除稳态、瞬态误差,使前一周期的误差不会带到下一周期。虽然硬件电路较复杂,但其克服了传统的PWM控制方法的不足,适用于各种脉宽调制软开关逆变器,具有反应快、开关频率恒定、鲁棒性强等优点。此外,单周控制还能优化系统响应、减小畸变和抑制电源干扰。 传统的PWM逆变电路中,电力电子开关器件硬开关的工作方式,大的开关电压电流应力以及高的/dt和di/dt限制了开关器件工作频率的提高,而高频化是电力电子主要发展趋势之一,它能使变换器体积减小,重量减轻,成本下降,性能提高,特别当开关频率在18kHz以上时,噪声将已超过人类听觉范围,使无噪声传动系统成为可能。
谐振软开关PWM的基本思想是在常规PWM变换器拓扑的基础上,附加一个谐振网络,谐振网络一般由谐振电感、谐振电容和功率开关组成。开关转换时,谐振网络工作使电力电子器件在开关点上实现软开关过程,谐振过程极短,基本不影响PWM技术的实现。从而既保持了PWM技术的特点,又实现了软开关技术。但由于谐振网络在电路中的存在必然会产生谐振损耗,并使电路受固有问题的影响,从而限制了该方法的应用。
⑸ CCS软件C语言编程输出SPWM脉宽调制波控制感应电机转速程序算法解读
1、PWM波是控制直流电机的
通俗的说,5V直流电机在5V的情况下肯定速度最快,在0V的情况下肯定不转了
这样电源0~5V就对应了不同的速度
问题是怎么才能实现0~5V的变化呢?
于是就用PWM波控制mos管来给直流电机供电。PWM就是一个矩形波,通过控制高电平和低电平的时间来控制MOS管导通的时间。MOS管在高电平的时候导通,就相当于5V电源直接加到电机上;MOS管在低电平的时候截止,就相当于0V电源加到电机上。
PWM又叫脉宽调制,就是控制高电平占一个周期的比例。而这个PWM波就是控制5V电源加到电机上的时间,从而控制了电机。
2、例程:
#include <reg52.h>
sbit KEY1 = P3^4;
sbit PWM = P1^5;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON ;//定义高电平时间
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
unsigned char PWM_Num;//定义档位
TMOD |=0x01;//定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
IE= 0x82; //打开中断
TR0=1;
CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
while(1)
{
if(!KEY1)
{
delay(10000);
if(!KEY1)
{
PWM_Num++;
if(PWM_Num==4)PWM_Num=0;
switch(PWM_Num){
case 0:P0=0x06;PWM_ON=0;break;//高电平时长
case 1:P0=0x5B;PWM_ON=4;break;
case 2:P0=0x4F;PWM_ON=6;break;
case 3:P0=0x66;PWM_ON=8;break;
default:break;
}
}
}
}
}
/********************************/
/* 定时中断 */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
{
PWM = 1; //灯灭
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
PWM = 0;//灯亮
}
⑹ 步进电机的控制算法是否和伺服差不多,给到控制器的都是pwm信号
步进电机
的控制算法和
伺服电机
差不多,只不过伺服电机有反馈信号。给到控制器不是
pwm信号
,而是符合
相序
的
脉冲信号
。也就是说,pwm信号通过调整
占空比
,改变
总能量
供应控制普通电机转速,而步进电机和伺服电机靠调整相位角控制转速。
⑺ 怎么用单片机产生PWM波形
单片机产生PWM波形波形的方法:
主要是采用软件控制,控制2个时间。
具体就是由单片机的引脚输出PWM波形;单片机引脚
如P1.7
控制其输出高电平的时间T1
和输出低电平的时间T2。
PWM波形的周期T=T1+T2
PWM波形的占空比=(100T1/T)%
PWM波形实现的算法:
1
根据PWM波形的频率f,计算出PWM波形的周期T=1/f;
2
根据PWM波形的占空比
计算出高电平时间
T1=占空比×T
3
计算出低电平时间
T2=T-T1
4
按上述时间去控制
单片机引脚高低电平的时间就可以了。
呵呵
赶快自己写程序吧
别忘了给俺加分呀
⑻ 51单片机pwm输出频率算法,谁有公式,怎么算的
单片机是独立 pwm硬件产生,还是靠定时器中断产生
普通51单片机没有硬件pwm功能,只能靠 定时器中断来产生,而多数增强型 51单 片机是有硬件pwm功能,一般PWM频率是晶振频率/分频系数/256
如晶振频率12M,分频系数设为2,则PWM频率为12000000/2/256=23.4 KHZ
⑼ 8位单片机PID控制PWM的算法如何实现,C语言计算
PID控制在8位单片机中仍然有广泛的应用,比如温度控制,利用比例、积分、微分补偿来做恒温补偿控制,当然由于有这些数学处理,用C语言相对方便一些,以下是一个具体的实例。
#include<reg51.h>
#include<intrins.h>
#include<math.h>
#include<string.h>
struct PID {
unsigned int SetPoint; // 设定目标 Desired Value
unsigned int Proportion; // 比例常数 Proportional Const
unsigned int Integral; // 积分常数 Integral Const
unsigned int Derivative; // 微分常数 Derivative Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
unsigned int SumError; // Sums of Errors
};
struct PID spid; // PID Control Structure
unsigned int rout; // PID Response (Output)
unsigned int rin; // PID Feedback (Input)
sbit data1=P1^0;
sbit clk=P1^1;
sbit plus=P2^0;
sbit subs=P2^1;
sbit stop=P2^2;
sbit output=P3^4;
sbit DQ=P3^3;
unsigned char flag,flag_1=0;
unsigned char high_time,low_time,count=0;//占空比调节参数
unsigned char set_temper=35;
unsigned char temper;
unsigned char i;
unsigned char j=0;
unsigned int s;
/***********************************************************
延时子程序,延时时间以12M晶振为准,延时时间为30us×time
***********************************************************/
void delay(unsigned char time)
{
unsigned char m,n;
for(n=0;n<time;n++)
for(m=0;m<2;m++){}
}
/***********************************************************
写一位数据子程序
***********************************************************/
void write_bit(unsigned char bitval)
{
EA=0;
DQ=0; /*拉低DQ以开始一个写时序*/
if(bitval==1)
{
_nop_();
DQ=1; /*如要写1,则将总线置高*/
}
delay(5); /*延时90us供DA18B20采样*/
DQ=1; /*释放DQ总线*/
_nop_();
_nop_();
EA=1;
}
/***********************************************************
写一字节数据子程序
***********************************************************/
void write_byte(unsigned char val)
{
unsigned char i;
unsigned char temp;
EA=0;
TR0=0;
for(i=0;i<8;i++) /*写一字节数据,一次写一位*/
{
temp=val>>i; /*移位操作,将本次要写的位移到最低位*/
temp=temp&1;
write_bit(temp); /*向总线写该位*/
}
delay(7); /*延时120us后*/
// TR0=1;
EA=1;
}
/***********************************************************
读一位数据子程序
***********************************************************/
unsigned char read_bit()
{
unsigned char i,value_bit;
EA=0;
DQ=0; /*拉低DQ,开始读时序*/
_nop_();
_nop_();
DQ=1; /*释放总线*/
for(i=0;i<2;i++){}
value_bit=DQ;
EA=1;
return(value_bit);
}
/***********************************************************
读一字节数据子程序
***********************************************************/
unsigned char read_byte()
{
unsigned char i,value=0;
EA=0;
for(i=0;i<8;i++)
{
if(read_bit()) /*读一字节数据,一个时序中读一次,并作移位处理*/
value|=0x01<<i;
delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/
}
EA=1;
return(value);
}
/***********************************************************
复位子程序
***********************************************************/
unsigned char reset()
{
unsigned char presence;
EA=0;
DQ=0; /*拉低DQ总线开始复位*/
delay(30); /*保持低电平480us*/
DQ=1; /*释放总线*/
delay(3);
presence=DQ; /*获取应答信号*/
delay(28); /*延时以完成整个时序*/
EA=1;
return(presence); /*返回应答信号,有芯片应答返回0,无芯片则返回1*/
}
/***********************************************************
获取温度子程序
***********************************************************/
void get_temper()
{
unsigned char i,j;
do
{
i=reset(); /*复位*/
} while(i!=0); /*1为无反馈信号*/
i=0xcc; /*发送设备定位命令*/
write_byte(i);
i=0x44; /*发送开始转换命令*/
write_byte(i);
delay(180); /*延时*/
do
{
i=reset(); /*复位*/
} while(i!=0);
i=0xcc; /*设备定位*/
write_byte(i);
i=0xbe; /*读出缓冲区内容*/
write_byte(i);
j=read_byte();
i=read_byte();
i=(i<<4)&0x7f;
s=(unsigned int)(j&0x0f); //得到小数部分
s=(s*100)/16;
j=j>>4;
temper=i|j; /*获取的温度放在temper中*/
}
/*====================================================================================================
Initialize PID Structure
=====================================================================================================*/
void PIDInit (struct PID *pp)
{
memset ( pp,0,sizeof(struct PID)); //全部初始化为0
}
/*====================================================================================================
PID计算部分
=====================================================================================================*/
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
{
unsigned int dError,Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError); // 微分项
}
/***********************************************************
温度比较处理子程序
***********************************************************/
void compare_temper()
{
unsigned char i;
if(set_temper>temper) //是否设置的温度大于实际温度
{
if(set_temper-temper>1) //设置的温度比实际的温度是否是大于1度
{
high_time=100; //如果是,则全速加热
low_time=0;
}
else //如果是在1度范围内,则运行PID计算
{
for(i=0;i<10;i++)
{
get_temper(); //获取温度
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation
}
if (high_time<=100)
high_time=(unsigned char)(rout/800);
else
high_time=100;
low_time= (100-high_time);
}
}
else if(set_temper<=temper)
{
if(temper-set_temper>0)
{
high_time=0;
low_time=100;
}
else
{
for(i=0;i<10;i++)
{
get_temper();
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation
}
if (high_time<100)
high_time=(unsigned char)(rout/10000);
else
high_time=0;
low_time= (100-high_time);
}
}
// else
// {}
}
/*****************************************************
T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期
******************************************************/
void serve_T0() interrupt 1 using 1
{
if(++count<=(high_time))
output=1;
else if(count<=100)
{
output=0;
}
else
count=0;
TH0=0x2f;
TL0=0xe0;
}
/*****************************************************
串行口中断服务程序,用于上位机通讯
******************************************************/
void serve_sio() interrupt 4 using 2
{
/* EA=0;
RI=0;
i=SBUF;
if(i==2)
{
while(RI==0){}
RI=0;
set_temper=SBUF;
SBUF=0x02;
while(TI==0){}
TI=0;
}
else if(i==3)
{
TI=0;
SBUF=temper;
while(TI==0){}
TI=0;
}
EA=1; */
}
void disp_1(unsigned char disp_num1[6])
{
unsigned char n,a,m;
for(n=0;n<6;n++)
{
// k=disp_num1[n];
for(a=0;a<8;a++)
{
clk=0;
m=(disp_num1[n]&1);
disp_num1[n]=disp_num1[n]>>1;
if(m==1)
data1=1;
else
data1=0;
_nop_();
clk=1;
_nop_();
}
}
}
/*****************************************************
显示子程序
功能:将占空比温度转化为单个字符,显示占空比和测得到的温度
******************************************************/
void display()
{
unsigned char code number[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
unsigned char disp_num[6];
unsigned int k,k1;
k=high_time;
k=k%1000;
k1=k/100;
if(k1==0)
disp_num[0]=0;
else
disp_num[0]=0x60;
k=k%100;
disp_num[1]=number[k/10];
disp_num[2]=number[k%10];
k=temper;
k=k%100;
disp_num[3]=number[k/10];
disp_num[4]=number[k%10]+1;
disp_num[5]=number[s/10];
disp_1(disp_num);
}
/***********************************************************
主程序
***********************************************************/
void main()
{
unsigned char z;
unsigned char a,b,flag_2=1,count1=0;
unsigned char phil[]={2,0xce,0x6e,0x60,0x1c,2};
TMOD=0x21;
TH0=0x2f;
TL0=0x40;
SCON=0x50;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
PS=1;
EA=1;
EX1=0;
ET0=1;
ES=1;
TR0=1;
TR1=1;
high_time=50;
low_time=50;
PIDInit ( &spid ); // Initialize Structure
spid.Proportion = 10; // Set PID Coefficients 比例常数 Proportional Const
spid.Integral = 8; //积分常数 Integral Const
spid.Derivative =6; //微分常数 Derivative Const
spid.SetPoint = 100; // Set PID Setpoint 设定目标 Desired Value
while(1)
{
if(plus==0)
{
EA=0;
for(a=0;a<5;a++)
for(b=0;b<102;b++){}
if(plus==0)
{
set_temper++;
flag=0;
}
}
else if(subs==0)
{
for(a=0;a<5;a++)
for(b=0;a<102;b++){}
if(subs==0)
{
set_temper--;
flag=0;
}
}
else if(stop==0)
{
for(a=0;a<5;a++)
for(b=0;b<102;b++){}
if(stop==0)
{
flag=0;
break;
}
EA=1;
}
get_temper();
b=temper;
if(flag_2==1)
a=b;
if((abs(a-b))>5)
temper=a;
else
temper=b;
a=temper;
flag_2=0;
if(++count1>30)
{
display();
count1=0;
}
compare_temper();
}
TR0=0;
z=1;
while(1)
{
EA=0;
if(stop==0)
{
for(a=0;a<5;a++)
for(b=0;b<102;b++){}
if(stop==0)
disp_1(phil);
// break;
}
EA=1;
}
}
⑽ pid_PWM 温控pwm 利用pid算法
PID算法本身是很简单的,你随便找本讲PID的书,大胆的把公式抄上,肯定就能用。
至于好用不好用的问题,在于另外两点,
第一是你用的参数的精度问题,如果你全部用浮点数来计算,当然不会出错,但程序可能会很大,可能大到你无法接受(看你用的什么芯片了),如果你用短整,或者长整来做,那么小数点后面的精度会被丢弃,严重的时候,你有算法无法正常运行。一般是用定点数来做,说白了就是用整数做,但整数1不要代表1度,而是代表0.1度,0.01度,或者16分之一度,具体的你自己来约定。
第二,是关于PID的几个参数的整定问题,这个需要经验,网上可以找到一些口诀,但具体操作还是要经验的。整定好的PID才是能用的PID,整定不好,温度就会失控。
回到你的问题,你需要先决定你的输出的精度,比如你的PWM输出是几位精度的,可能是8位,也可能是10位,假设是10位,那么输出是大值就是1023,最小值是0。你套上公式计算,像这样,以浮点数为例
EK_1 = EK;
Ek = settemp - runtemp;
Up = Ek * KP; // KP 是设定的比例系数,需要整定
Ui = Ui + Ek * Ki;
Ud = ( EK - EK_1 ) * Kd;
Upid = Uk + Ui + Ud;
整定KP, Ki, Kd,使Upid 的范围在+/-1.0范围,
最后
PWM_Out( Upid * 1024 );