PWM原理设计+脉冲调节的仿真+PWM程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PWM原理+程序+仿真设计

1、脉宽调制(PWM)基本原理

脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。

例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。这些脉冲宽度相等,都等于∏/n ,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。可以看出,各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也可以用同样的方法得到PWM波形。

在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,PWM逆变电路输出的脉

冲电压就是直流侧电压的幅值。

根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。

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

多数负载(无论是电感性负载还是电容性负载)需要的调制频率高于10Hz,通常调制频率为1kHz到200kHz之间。

许多微控制器内部都包含有PWM控制器。例如,Microchip公司的PIC16C67内含两个PWM控制器,每一个都可以选择接通时间和周期。占空比是接通时间与周期之比;调制频率为周期的倒数。执行PWM操作之前,这种微处理器要求在软件中完成以下工作:

1、设置提供调制方波的片上定时器/计数器的周期

2、在PWM控制寄存器中设置接通时间

3、设置PWM输出的方向,这个输出是一个通用I/O管脚

4、启动定时器

5、使能PWM控制器

如今几乎所有市售的单片机都有PWM模块功能,若没有(如早期的8051),也可以利用定时器及GPIO口来实现。更为一般的PWM模块控制流程为(笔者使用过TI的2000系列,AVR的Mega系列,TI 的LM系列):

1、使能相关的模块(PWM模块以及对应管脚的GPIO模块)。

2、配置PWM模块的功能,具体有:

①:设置PWM定时器周期,该参数决定PWM波形的频率。

②:设置PWM定时器比较值,该参数决定PWM波形的占空比。

③:设置死区(deadband),为避免桥臂的直通需要设置死区,一般较高档的单片机都有该功能。

④:设置故障处理情况,一般为故障是封锁输出,防止过流损坏功率管,故障一般有比较器或ADC或GPIO检测。

⑤:设定同步功能,该功能在多桥臂,即多PWM模块协调工作时

尤为重要。

3、设置相应的中断,编写ISR,一般用于电压电流采样,计算下一个周期的占空比,更改占空比,这部分也会有PI控制的功能。

4、使能PWM波形发生。

仿真设计淘宝店名:桃宝杂货店

淘宝店链接:

/item.htm?spm=a1z10.1-c.w4004 -9214643764.2.KbNQfW&id=42935755624

2、附录:

/*关于频率和占空比的确定,对于12M 晶振,假定PWM 输出频率为1KHZ,这样定时中断次数设定为C=10,即0.1MS 中断一次,则TH0=FF,TL0=9C;由于设定中断时间为0.1ms,这样可以设定占空比可从1-100 变化。即0.01ms*100=1ms TH0 和TL0 是计数器0 的高8 位和低8 位计数器,计算办法:TL0=(65536-C)%256; TH0=(65536-C)/256,其中C 为所要计数的次数即多长时间产生一次中断; TMOD 是计数器工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时间为1ms*65536=65.536ms */

3、程序:

#include

#define uchar unsigned char

#define V_TH0 0xFF

#define V_TL0 0x9C

#define V_TMOD 0x01

sbit P1_4=P1^4;

sbit P1_3=P1^3;

sbit P1_2=P1^2;

sbit P1_1=P1^1;

void init_sys(void); /*系统初始化函数*/

void Delay5Ms(void);

unsigned char ZKB1,ZKB2;

void main (void)

{

init_sys();

ZKB1=4; /*占空比初始值设定(20%)*/ ZKB2=8; /*占空比初始值设定(70%)*/ while(1)

{

if (!P1_1) //如果按了+键,增加占空比

{

Delay5Ms();

if (!P1_1)

{

ZKB1++;

ZKB2=10-ZKB1;

}

}

if (!P1_2) //如果按了-键,减少占空比

{

Delay5Ms();

if (!P1_2)

{

ZKB1--;

ZKB2=10-ZKB1;

}

}

}

}

/*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/ void init_sys(void) /*系统初始化函数*/

相关文档
最新文档