《运动控制系统课程设计 三相电压型SPWM逆变器设计.doc》由会员分享,可在线阅读,更多相关《运动控制系统课程设计 三相电压型SPWM逆变器设计.doc(25页珍藏版)》请在三一办公上搜索。
1、三相电压型SPWM逆变器设计摘要: 本设计选用EsayARM1138开发板,以LM3S1138为控制核心,辅以扩展的键盘及显示电路和SPWM逆变电路组成完整的系统。根据采样控制理论,由LM3S1138输出一系列周期性变化的等幅不等宽脉冲,控制IGBT功率开关管的导通和截止,使逆变器输出端获得一系列宽度不等的矩形脉冲波。输出的信号经低通滤波器滤波后,即可得到所需要的正弦波。改变调制脉冲的宽度可以控制输出电压的幅值,改变调制周期可以控制输出电压的频率,从而达到使逆变器的输出电压和幅值同时可调的目的。同时,利用matlab进行了系统仿真,给出了仿真框图和仿真结果。关键词: 三相电压型 逆变器 LM3
2、S1138 SPWM 目录1 设计内容- 3 -1.1 设计目的及意义- 3 -1.2 设计任务及步骤- 3 -1.3 内容要求- 3 -2 设计方案- 4 -2.1 方案选择- 4 -2.2 方案论证- 4 -3 系统的硬件设计- 5 -3.1 整体方案设计- 5 -3.2 主电路- 5 -3.3 驱动电路- 7 -3.4 逆变电路- 8 -3.5 抗干扰电路- 8 -4 软件设计- 9 -4.1 编程思路- 9 -4.2 流程图- 11 -5 仿真- 13 -6心得体会- 16 -附录- 18 -1 程序清单- 18 -2 原理图- 24 -1 设计内容1.1 设计目的及意义(1)训练学生
3、正确地应用运动控制系统,培养解决工业控制、工业检测等领域具体问题的能力;(2)学生通过课程设计,熟悉运动控制系统应用系统开发、研制的过程,软、硬件设计的工作方法、工作内容、工作步骤;(3)对学生进行基本技能训练,例如组成系统、编程、调试、绘图等,使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。1.2 设计任务及步骤(1)分析并测定系统各环节的输入输出特性及其参数,调试各单元电路;(2)根据测定参数计算速度调节器参数;(3)系统开环调试并测定其开环机械特性;(4)系统闭环调试并测试系统闭环静态、动态性能。1.3 内容要求(1)画出控制电路和主电路原理图;(2)画出程序流程图;(3)写
4、课程设计论文,附有原理图、流程图、程序清单,内容要正确,概念要清楚,文字要通顺。2 设计方案21 方案选择本设计选用EsayARM1138开发板,以LM3S1138为控制核心,辅以扩展的键盘及显示电路和SPWM逆变电路组成完整的系统。根据采样控制理论,由LM3S1138输出一系列周期性变化的等幅不等宽脉冲,控制IGBT功率开关管的导通和截止,使逆变器输出端获得一系列宽度不等的矩形脉冲波。输出的信号经低通滤波器滤波后,即可得到所需要的正弦波。改变调制脉冲的宽度可以控制输出电压的幅值,改变调制周期可以控制输出电压的频率,从而达到使逆变器的输出电压和幅值同时可调的目的。2.2方案论证在逆变器电路的设
5、计中,控制方法是核心技术。早期的控制方法使得输出为矩形波,谐波含量较高,滤波困难,而SPWM技术较好地克服了这些缺点。目前SPWM的产生方法大致可分为以下4种: 利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进; 由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制; 基于CPLD或FPGA设计,实现数字式SPWM发生器。此方法需重新学习可编程逻辑器件的相关知识及硬件描述语言,项目组成员在此方面的知识积累较少,开发周期长; 基于单片机实现SPWM,此方法控制电路简单可靠,
6、利用软件产生SPWM波,减轻了对硬件的要求,且成本低,受外界干扰小。本课题选用此方案。3 系统的硬件设计3.1整体方案设计本系统由电源模块、控制模块、逆变模块、键盘和显示模块、输出及保护电路等5大部分组成,设计系统的总体结构框图如图3.1所示。其基本工作原理是:LM3S1138内部产生基波脉宽调制信号,经两个驱动集成块(IR2110)隔离放大后,送全桥逆变电路,控制两组绝缘栅双极晶体管(IGBT)的通断,并决定IGBT管输出脉冲信号的宽度。逆变电路输出信号送低通滤波器,经低通滤波器滤波后得到正弦基波信号送输出电路输出。低通滤波的另一路输出将当前的输出电压反馈回LM3S1138进行A/D转换,L
7、M3S1138对A/D转换的结果进行运算和处理,并根据处理结果对当前输出电压的幅值和频率进行控制和显示。全桥逆变低通滤波LM3S1138最小系统驱动输出电压采样正弦波输出LCD显示键盘直流供电图3.1系统总体结构框图32 主电路图3.2是SPWM逆变器的主电路,图中VlV6是逆变器的六个功率开关器件,各由一个续流二极管反并联,整个逆变器由恒值直流电压U供电。一组三相对称的正弦参考电压信号由参考信号发生器提供,其频率决定逆变器输出的基波频率,应在所要求的输出频率范围内可调。参考信号的幅值也可在一定范围内变化,决定输出电压的大小。三角载波信号Uc是共用的,分别与每相参考电压比较后,给出“正”或“零
8、”的饱和输出,产生SPWM脉冲序列波 Uda,Udb,Udc作为逆变器功率开关器件的驱动控制信号。当UruUc时,给V1导通信号,给V4关断信号,Uun =-Ud/2。Uuv的波形可由Uun- Uvn得出,当1和6通时,Uuv=Ud,当3和4通时,Uuv=-Ud,当1和3或4和6通时,Uuv=0。输出线电压PWM波由Ud和0三种电平构成负载相电压PWM波由(2/3)Ud,(1/3) Ud和0共5种电平组成。3.2电源电路防直通的死区时间同一相上下两臂的驱动信号互补,为防止上下臂直通而造成短路,留一小段上下臂都施加关断信号的死区时间。死区时间的长短主要由开关器件的关断时间决定。死区时间会给输出的
9、PWM波带来影响,使其稍稍偏离正弦波。3.3 驱动电路由于LM3S1138产生的SPWM信号不能直接驱动IGBT,故逆变桥的驱动采用专用芯片IR2110。IR2110是一种双通道、栅极驱动、高压高速、单片式集成功率驱动模块,具有体积小(DIP14)、集成度高(可驱动同一桥臂两路)、响应快(典型ton/toff=120/94 ns)、偏置电压高(600 V)、驱动能力强等特点,同时还具有外部保护封锁端口12。IR2110采用CMOS工艺制作,逻辑电源电压范围为5 V20 V,适应TTL或CMOS逻辑信号输入,具有独立的高端和低端2个输出通道。由于逻辑信号均通过电平耦合电路连接到各自的通道上,容许
10、逻辑电路参考地(VSS)与功率电路参考地(COM)之间有-5 V+5 V的偏移量,并且能屏蔽小于50 ns的脉冲,这些特点使得IR2110具有较理想的抗噪声效果。采用CMOS施密特触发输入,可以进一步提高电路抗干扰能力13。IR2110自身的保护功能非常完善:对于低压侧通道,当VCC低于规定值(如8.6 V)时,其欠压锁定将会阻断任何一个通道工作;而对于高压侧通道,当VS和VB之间的电压低于限定值(如8.7 V)时,欠压自锁也会关断栅极驱动。利用2片IR2110驱动全桥逆变电路的电路图如图3.4所示 图3.4 全桥驱动电路为改善PWM控制脉冲的前后沿陡度并防止振荡,减小IGBT集电极的电压尖脉
11、冲,一般应在栅极串联十几欧到几百欧的限流电阻。IR2110的最大不足是不能产生负偏压,由于密勒效应的作用,在开通与关断时,集电极与栅极间电容上的充放电电流很容易在栅极上产生干扰。针对这一点,本文在驱动电路中的功率管栅极限流电阻R1、R2上反向并联了二极管D4、D5。3.4 逆变电路逆变电路由4个IGBT管(VT1、VT2、VT3、VT4)组成的全桥式逆变电路组成,如图3.3所示。桥臂VT1、4和VT2、3以中频频率交替导通时,可将直流电压转换成梯形脉冲波,经低通滤波器滤波后,负载上得到的实际电压为正弦波11。逆变桥的SPWM控制信号由主控芯片LM3S1138产生。 图3.3 逆变电路35抗干扰
12、电路由于主回路为强电,而控制回路为弱点,为将其结合起来,因此需要强弱电隔离。本设计采用光电隔离器,可以很简单的隔离强电与弱电部分,光电隔离器的电路示意图如图3.5所示。 图3.5 光电隔离器 4软件设计软件设计是逆变控制电路设计的重要组成部分,它决定了逆变器输出的特性,如电压调节范围及稳定程度,理想的正弦波输出电压、保护功能的完善、可靠性等等。逆变器程序主要分为SPWM脉宽调制部分,LCD12864显示部分(即人机交互部分),ADC转换部分,看门狗程序部分。41编程思路本设计将一个周期T的信号分成720个点(按X轴等分),两点间的时间间隔由EasyRAM1138通过定时器中断产生。因此,首先需
13、建立正弦脉宽数据表,由EasyARM1138初始化时算好,将其按一定的格式(即考虑相序及同一相中的脉宽次序等)存入片内的FLASH中,建立好数据指针,以便按一定的寻址方式查询。SPWM实际上就是用一组经过调制的幅值相等、宽度不等的脉冲信号代替调制信号,用开关量代替模拟量。调制后的信号中除了含有调制信号外,还含有频率很高的载波频率及载波倍频附近的频率分量,但几乎不含其他谐波,特别是接近基波的低次谐波。因此载波频率也即SPWM的开关频率越高,谐波含量越少。这从SPWM的原理可以直观地看出。当载波频率高时,半周期内开关次数越多,把期望的正弦波分段也越多,SPWM的基波就越接近期望的正弦波14。但是,
14、SPWM的载波频率除了受功率器件的允许开关频率制约外,SPWM的开关频率也不宜过高,这是因为开关器件工作频率提高,开关损耗和换流损耗会随之增加。另外,开关瞬间电压或电流的急剧变化形成很大的du/dt或di/dt,会产生强的电磁干扰;高du/dt、di/dt还会在线路和器件的分布电容和电感上引起冲击电流和尖峰电压;这些也会因频率提高而变得严重。 综上所述,SPWM的开关频率的选择应综合考虑各个方面的因素,本设计实际采用的SPWM开关频率,也即IGBT的开关频率为18MHz,这是一个折中的选择。设置EasyARM的频率为6MHz,分频后为20MHz。0-180度由定时器TIMER0的TIMA(对应
15、的为CPP1)输出0有效,180-360由TIMER1的TIMB(对应的为CPP3)输出0有效,两脚轮流输出脉宽调制的正弦半波。图4.1 正弦波脉冲宽度调制波形示意图关于载波频率和调制波频率的计算:EasyARM的时钟频率20MHz,一个机器周期为0.5us,载波频率为8KHz90KHz之间,将一个输出周期T的信号分成1440个点(按X轴等分),两点间的时间间隔由EasyARM的定时器通过计数中断实现,由于EasyARM的内部定时器有PWM的设置,通过在程序中设置定时器的计数值来控制频率,同过设置占空的的计数值来调整脉冲的占空比,这样就保证了输出方波的脉冲宽度按正弦规律变化。逆变后的方波经滤波
16、后可以得到纯正弦波脉冲,调制频率为14.4KHz1440KHz,一个周期分为1440个调制脉宽,每个周期时间为:1440*(1/14.4KHz1/144KHz)=0.1 s0.01(s),使输出频率为10100Hz。表4-1 正弦脉冲的度数与计数值之间的一个换算表(部分)42流程图首先对程序进行初始化,初始化之后程序就进入了中断,连续读取720个PWM的匹配值产生0-180度的SPWM。之后关闭此定时器和中断,并打开TIMER0和它的定时中断,同样的连续读取720个PWM的匹配值产生180-360度的SPWM。主程序中,在while(1)中不断的扫描按键。通过判断是KEY1还是KEY2按下来提
17、高和降低频率。正弦波频率的改变范围是10100Hz。SPWM调制程序流程图如图4.3所示: 开始系统初始化调用默认数据表NKey1按下?YNKey2按下?频率增加Y频率减小图4.3 SPWM调制程序流程图 5 仿真SPWM控制方式下的三相逆变电路主电路如图5.1所示:图5.1 三相逆变电路主电路设置参数,即将调制度m设置为0.9,调制波频率设为50Hz,载波频率设为基波的30倍(载波比N=30),即1500Hz,仿真时间设为0.04s,在powergui中设置为离散仿真模式,采样时间设为1e-006s,运行仿真图形,然后建立m文件,程序如下所示:subplot(3,1,1);plot(inv.
18、time,inv.signals(1).values);title(Uab线电压波形);subplot(3,1,2);plot(inv.time,inv.signals(2).values);title(A相输出电压Ua波形);subplot(3,1,3);plot(inv.time,inv.signals(3).values);axis(0 0.04 -300 300);title(A相输出电流波形);运行此文件后,可得输出交流电压,交流电流和直流电流如图5.2所示:图5.2SPWM方式下的三相逆变电路输出波形分析上图可知,输出线电压PWM波由Ud和0三种电平构成负载相电压PWM波由(2/3
19、)Ud、(1/3)Ud和0共5种电平组成。利用MATLAB提供的powergui模块,对上图中的输出相电压和输出电流进行FFT分析,得图5.3、图5.4所示结果:图5.3SPWM控制方式三相逆变电路输出相电压的FFT分析图5.4SPWM控制方式三相逆变电路输出电流的FFT分析由图5.3可知:在=300V ,m=0.9, =1500Hz, =50Hz,即N=30时,输出相电压的基波电压的基波幅值为=134.7V,谐波分布中最高的为28和32次谐波,考虑最高频率为4500Hz时的THD达到79.74%。由图5.4可知:考虑最高频率为4500Hz时的THD=5.15%,输出电流近似为正弦波。6心得体
20、会两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础通过这次交通灯设计,本人在多方面都有所提高。通过三相电压型
21、SPWM逆变器设计,培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。了解所选择的单片机芯片各个引脚功能,工作方式,相关原理,并巩固学习单片机的相关内容知识。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的何老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次模具设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,
22、帮助我能够很顺利的完成了这次课程设计。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。7参考文献 1 刘凤君.正弦波逆变器M.北京:科学出版社,2002.2 李爱文,张承慧.现代逆变技术及其应用M.北京:科学出版社,2000.3 谢力华,苏彦民.正弦波逆变电源的数字控制技术.电力电子技术J,2001 4 孟元东,娄承芝.基于dsPIC30F1010高频正弦波逆变器的研究,电力电子技术J,20075 罗泠,周永鹏等.DSP控制400Hz中频在线式不间
23、断电源的研究,电力电子技术J,6 苏玉刚等电力电子技术M重庆:重庆大学出版社,20037 张燕宾SPWM变频调速应用技术北京:机械工业出版社,20058 廖东初,聂汉平.电力电子技术.湖北:华中科技大学出版社,20079 王兆安,黄俊.电力电子技术.北京:机械工业出版社,200510 阮毅,陈维均.运动控制技术 北京:清华大学出版社,2006附录1 程序清单 #include Fre.H#include select.h#include /Stellaris系列芯片的内存地址映射表#include /芯片通用类型的宏指令与类型定义#include /芯片系统驱动控制模型定义#include /
24、芯片通用标准输入输出定义#include /芯片启动模数转换的时所用的宏指令#include /芯片用于模数转换驱动时头指令#include /芯片用于中断分配的头指令#include /芯片的终端控制模型定义#include watchdog.h#include hw_watchdog.h#include LED.H#define SysCtlPeriEnable SysCtlPeripheralEnable /外围设备的使能#define SysCtlPeriDisable SysCtlPeripheralDisable/外围设备的不使能#define GPIOPinTypeIn GPIO
25、PinTypeGPIOInput/标准输入输出的针类型#define GPIOPinTypeOut GPIOPinTypeGPIOOutput#define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD#define WdogStallEnableWatchdogStallEnable#define WdogReloadSetWatchdogReloadSet#define WdogIntEnableWatchdogIntEnable#define WdogIntClearWatchdogIntClear#define uchar unsigned charuns
26、igned long TheSysClock = 12000000UL;void ADC_Init() SysCtlPeriEnable(SYSCTL_PERIPH_ADC); / 使能ADC模块 SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); / 设置ADC采样率 ADCSequenceDisable(ADC_BASE , 0); / 禁止采样序列 ADCSequenceConfigure(ADC_BASE , / 采样序列配置 0 , / 采样序列编号 ADC_TRIGGER_PROCESSOR , / 由处理器触发 0); / 设置优先级 ADCS
27、equenceStepConfigure(ADC_BASE , / 采样步进设置 0 , / 采样序列编号 0 , / 设置步进 ADC_CTL_END | ADC_CTL_CH0); / 通道设置 从ADC0口读入数据 ADCSequenceEnable(ADC_BASE , 0); / 使能采样序列void wdogInit ( void )SysCtlPeriEnable( SYSCTL_PERIPH_WDOG ) ;/ 使能看门狗模块WdogStallEnable ( WATCHDOG_BASE ) ;/ 使能调试器暂停看门狗计数WdogReloadSet ( WATCHDOG_BAS
28、E , 3000000UL ) ;/ 设置看门狗值WdogIntEnable ( WATCHDOG_BASE ) ;/使能看门狗中断IntEnable ( INT_WATCHDOG ) ;/使能看门狗模块中断IntMasterEnable ( ) ;/使能处理器中断void Watchdog_Timer_ISR ( void )WdogIntClear ( WATCHDOG_BASE ) ;/ 清除看门狗中断状态LED_Toggle(LED1); / 反转LED 待添加的隐藏文字内容2void SystemInit(void) SysCtlLDOSet(SYSCTL_LDO_2_75V); /
29、 配置PLL前须将LDO电压设置为2.75V AD转换必须的电压设置SysCtlClockSet(SYSCTL_USE_PLL | / 系统时钟设置,采用PLL SYSCTL_OSC_MAIN | / 主振荡器 SYSCTL_XTAL_6MHZ | / 外接6MHz晶振 SYSCTL_SYSDIV_10); / 分频结果为20MHzTheSysClock = SysCtlClockGet(); / 获取系统时钟,单位:Hz GPIOD_Init(); / 通用输入输出端口D的初始化 GPIOG_Init(); / 通用输入输出端口G的初始化 FreInit(); ADC_Init(); / 数
30、模转换模块的初始化 LED_Init(LED1); / 初始化LED1灯 Lcminit(); / 液晶显示初始化 GPIOPinIntEnable(GPIO_PORTD_BASE , GPIO_PIN_1); /使能GPIOD的1号管脚中断 GPIOPinIntEnable(GPIO_PORTG_BASE , GPIO_PIN_5); /使能GPIOG的5号管脚中断 GPIOIntTypeSet(GPIO_PORTD_BASE , GPIO_PIN_1,GPIO_LOW_LEVEL); /GPIOD的1号管脚下降沿时产生中断信号 GPIOIntTypeSet(GPIO_PORTG_BASE
31、, GPIO_PIN_5,GPIO_LOW_LEVEL); /GPIOG的5号管脚下降沿时产生中断信号 IntEnable(INT_GPIOD); /开GPIOD中断 IntEnable(INT_GPIOG); /开GPIOG中断 wdogInit( ); /看门狗初始化 IntMasterEnable ( ); /开处理器中断int main(void) SystemInit(); /系统初始化 select(); unsigned long ulVal = 0x00; /用来保存转换后的数字量 uchar Val; while(1) ADCProcessorTrigger(ADC_BASE
32、 , 0);/触发样本序列 while ( HWREG(ADC_BASE+ADC_O_X_SSFSTAT) & 0x00000100 ); /等待样本序列采集完成 ADCSequenceDataGet(ADC_BASE , 0 , &ulVal); /获取采集的结果 ulVal = (ulVal * 3000) / 1024)/1000;/将结果进行转换单位mV Val=(uchar)ulVal; vWrite8x16String(This is a dis- ,0, 8,0); /写字符串 vWrite8x16String(play program. , 2, 8,0); vWrite8x1
33、6String(The current v-, 4, 8,0); /vWrite8x16String(oltage is : 4, 6, 8,0); if(ulVal=0) vWrite8x16String(oltage is : 0, 6, 8,0); if(ulVal=1) vWrite8x16String(oltage is : 1, 6, 8,0); if(ulVal=2) vWrite8x16String(oltage is : 2, 6, 8,0); if(ulVal=3) vWrite8x16String(oltage is : 3, 6, 8,0); if(ulVal=4) v
34、Write8x16String(oltage is : 4, 6, 8,0); if(ulVal=5) vWrite8x16String(oltage is : 5, 6, 8,0); if(ulVal=6) vWrite8x16String(oltage is : 6, 6, 8,0); if(ulVal=7) vWrite8x16String(oltage is : 7, 6, 8,0); if(ulVal=8) vWrite8x16String(oltage is : 8, 6, 8,0); if(ulVal=9) vWrite8x16String(oltage is : 9, 6, 8,0); if(ulVal=10) vWrite8x16String(oltage is : 10, 6, 8,0); if(ulVal=11) vWrite8x16String(oltage is : 11, 6, 8,0); if(ulVal=12|ulVal0) vWrite8x16String(oltage is : UV , 6, 8,0); /vWrite8x16Character(Val,6,(12*8+8),0); Delay(1000 * (TheSysClock / 4000); Lcmcls(); 2 原理图