第15章 用TMS320LF2407 实现空间矢量PWM(SVPWM).doc_第1页
第15章 用TMS320LF2407 实现空间矢量PWM(SVPWM).doc_第2页
第15章 用TMS320LF2407 实现空间矢量PWM(SVPWM).doc_第3页
第15章 用TMS320LF2407 实现空间矢量PWM(SVPWM).doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章 用TMS320LF2407 实现空间矢量PWM(SVPWM)15.3 利用TMS320LF240x实现SVPWM算法的程序下面给出了利用TMS320LF2407实现SVPWM算法的一个应用程序。在该程序中,我们假设有200个电压矢量Uout 平均分布在电角度为2的范围内,通过改变SVPWM的调制周期T可以改变输出的3相正弦波的频率。源程序代码:(1) 所需的复位和中断矢量定义文件“vectors.asm”请读者参考本书相关章节。(2) 主程序/ 该程序用于简单的SVPWM演示,产生3相互差120度电角度的正弦交流电压,此程序实/ 时计算cmp1和cmp2的值 #include register.h #include float.h #include math.hfloatualfa200,ubeta200; / 存储电压矢量Uout的(,)轴分量ualfa、ubeta的数组 intsector200; / 定义存储扇区数的数组 #define PI22*3.1415926 / 定义2的值 #define DETAPI2/200 / 定义相临两个Uout之间的电角度的差值 #define INIA3.1415926/180 / 定义Uout的初始电角度 #define TP 1200 / t1的周期寄存器的值,其值等于SVPWM调制周期T的一半, / 因为在该程序中2电角度内Uout的点数一定,故改变此值 / 可以改变输出的3相正弦交流电压的频率 #define KP 0.7 / 定义Uout的标幺值,KP的值在0和1之间,改变此值可以 / 改变逆变桥输出电压的幅值 / 屏蔽中断子程序 void inline disable() asm( setc INTM);/ 系统初始化子程序 viod initial()*IFR=0xFFFF; / 清除所有的中断标志 *IMR=0X0; / 屏蔽所有中断 *SCSR1=0x81FE; / CLKIN=6M,CLKOUT=24M *WDCR=0xE8; / 不使能看门狗 *T3PER=TP;/ 通用定时器1的周期=PWM的周期/指令周期/2 *T3CON=0X0802;/ 设置通用定时器1为连续增减模式,以产生对称的PWM, / 且为了便于调试,使仿真一挂起时时钟就停止运行 *ACTRB=0X666;/ PWM7、9、11高有效,PWM8、10、12低有效 *COMCONB=0X9200;/ 使能PWM输出和比较动作 *EVBIMRA=0X00;/ 禁止EVB和时钟及比较有关的中断 *T3CNT=0X00;/ T1的计数器清0 *EVBIFRA=0x0FFFF;/ 清除EVB相应的中断标志 *MCRC=*MCRC|0X7E;/ PWM7-PWM12输出使能,使能IOPE1-IOPE6第二功能 WSGR=0x0000;/ 不使能所有的等待状态 / 根据Uout的标幺值KP计算ualfa,ubeta子程序 void calu()inti;for(i=0;i200;i+)ualfai=KP*cos(INIA+i*DETA);ubetai=KP*sin(INIA+i*DETA);/ 各点的扇区确定子程序 void SECTOR()inti,a,b,c;floatvref1,vref2,vref3;for(i=0;i0)a=1;elsea=0;if(vref20)b=1;elseb=0;if(vref30)c=1;elsec=0;a=4*c+2*b+a;switch(a)case 1:sectori=1;break;case 2:sectori=5;break;case 3:sectori=0;break;case 4:sectori=3;break;case 5:sectori=2;break;case 6:sectori=4;break;default:break;/ 根据相应的关系确定各个Uout所在的扇区 / 主程序 main()intanticlk6=0x1666,0x3666,0x2666,0x6666,0x4666,0x5666;/ 逆时针旋转的6个基本矢量 inti,k=0,cmp1,cmp2;float x,y,z; disable();/ 屏蔽所有中断 initial();/ 系统初始化 calu();/ 计算ualfa,ubeta的值 SECTOR();/ 确定各点的扇区,在实际应用时应该由即时/ 的ualfa和ubeta即时算出 while(1)for(i=0;i200;i+)*ACTRB=anticlksectori;/ 重新装配ACTRA x=ubetai;y=(1.732051*ualfai+ubetai)/2;z=(-1.732051*ualfai+ubetai)/2;/ 以上3句计算3个相应的参考量 switch(sectori)case 0 :cmp1=(int)(-z*TP),cmp2=(int)(x*TP);break;case 1 :cmp1=(int)(y*TP),cmp2=(int)(z*TP);break;case 2 :cmp1=(int)(x*TP),cmp2=(int)(-y*TP);break;case 3 :cmp1=(int)(z*TP),cmp2=(int)(-x*TP);break;case 4 :cmp1=(int)(-y*TP),cmp2=(int)(-z*TP);break;case 5 :cmp1=(int)(-x*TP),cmp2=(int)(y*TP);break; default : break;/ 以上根据uout所处的扇区计算相应的cmp1和cmp2的值 *CMPR4=cmp1;/ 比较寄存器4赋值 *CMPR5=cmp1+cmp2;/ 比较寄存器5赋值 if(i+k)=0)*T3CON=*T3CON|0X040;/ 启动定时器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论