交流异步矢量程序.docx
- 文档编号:7624197
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:24
- 大小:25.69KB
交流异步矢量程序.docx
《交流异步矢量程序.docx》由会员分享,可在线阅读,更多相关《交流异步矢量程序.docx(24页珍藏版)》请在冰豆网上搜索。
交流异步矢量程序
《三相交流异步电动机矢量控制程序》
.INCLUDE"240X.H"
;-----------------------以下定义变量和常数-------------------------------------------------------------
.DATA
KSPEED.SET3415;将脉冲数转换成速度系数,13.34的Q8格式
;速度基值1500rpm,速度采样周期3ms
SPEEDSTEP.SET30;速度采样周期30个中断
.BSST1_PERIODS,1;T1周期值的Q5格式
.BSSKCURRENT,1;电流ipuQ12的转换系数,Q8格式
.BSSKI,1;电流积分系数,Q12格式
.BSSKP,1;电流比例系数,Q12格式
.BSSKC,1;电流积分修正系数,Q12格式
.BSSKIN,1;速度积分系数,Q12格式
.BSSKPN,1;速度比例系数,Q12格式
.BSSKCN,1;速度积分修正系数,Q12
.BSSVMIN,1;电压最小极限-1.25pu,Q12
.BSSVMAX,1;电压最大极限1.25pu,Q12
.BSSIMAX,1;相电流最大极限,Q12
.BSSTMP,1;临时变量
.BSSIA,1;相电流IA
.BSSIB,1;相电流IB
.BSSIC,1;相电流IC
.BSSSIN,1;SIN值Q12
.BSSCOS,1;COS值Q12
.BSSDEC_MS,24;6个逆阵,Q14格式
.BSSCMP_1,1;第1基本矢量,Q0格式
.BSSCMP_2,1;第2基本矢量,Q0格式
.BSSCMP_0,1;0基本矢量/2,Q0格式
.BSSFIRST_TOG,1;存放第一次比较匹配的比较器地址
.BSSSEC_TOG,1;存放第二次比较匹配的比较器地址
.BSSTETA_E,1;转子电角度[0;1000H],对应[0;360]Q12格式
.BSSIALFA,1;ALFA轴电流
.BSSIBETA,1;BETA轴电流
.BSSVALF_REF,1;ALFA轴参考电压
.BSSVBET_REF,1;BETA轴参考电压
.BSSIMREF,1;M轴参考电流
.BSSITREF,1;T轴参考电流
.BSSIM,1;M轴电流
.BSSIT,1;T轴电流
.BSSVMREF,1;M轴参考电压
.BSSVTREF,1;T轴参考电压
.BSSEPIT,1;T轴电流调节偏差
.BSSEPIM,1;M轴电流调节偏差
.BSSXIT,1;T轴电流调节器积分累计量
.BSSXIM,1;M轴电流调节器积分累计量
.BSSN,1;速度
.BSSN_REF,1;速度参考值
.BSSEPISPEED,1;速度偏差
.BSSXISPEED,1;速度调节器积分累计量
.BSSP,1;SVPWM扇区索引
.BSSITREFMIN,1;T轴电流最小极限
.BSSITREFMAX,1;T轴电流最大极限
.BSSSECTOR,1;SVPWM扇区数
.BSSINDEX,1;查SIN表索引
.BSSUPI,1;PI调节器输出
.BSSELPI,1;PI调节器极限偏差
.BSSENCODEROLD,1;前一个采样周期时编码脉冲数
.BSSENCINCR,1;编码脉冲增量
.BSSSPEEDTMP,1;编码脉冲增量累计值
.BSSSPEEDSTEP,1;速度采样周期减计数器
.BSSKR,1;常数,见式(4-36)
.BSSKT,1;常数,见式(4-37)
.BSSK,1;转换常数,见式(4-39)
.BSSIDK,1;转子励磁电流,Q12
.BSSFS,1;转子磁链角频率与额定角频率之比
.BSSTETAINCR,1;TETA转角增量
.BSSTMP1,1;临时变量
;-----------------------以下是程序-----------------------------------------------------------------------------
.TEXT
;-----------------------初始化程序-----------------------------------------------------------------------------
CLRCCNF;B0
SETCOVM
SPM0
SETCSXM;扩展符号
LARAR0,#DEC_MS;传送逆阵数据
LARAR1,#(24-1);24个
LACC#ANGLES_;指向源
LARPAR0
INIT_TBL
TBLR*+,AR1;下一个
ADD#1;下一个地址
BANZINIT_TBL,AR0;AR1=0结束
LARAR4,#79H;用于堆栈保存现场,B2(60H-80H)
LDP#0E0H
SPLK#68H,WDCR;不用看门狗
SPLK#0284H,SCSR1;CLKIN10MHZ,CLKOUT20MHZ
LDP#0E1H
SPLK#0900H,ADCTRL1;ADC预分频10,1MHZ
SPLK#0001H,MAXCONV;两个通道
SPLK#0010H,CHSELSEQ1;选择ADCIN0和ADCIN1通道
LACCMCRA
OR#0FD8H;设置PWM1-6,QEP1-2
SACLMCRA
;-----------------------变量初始化-----------------------------------------------------
LDP#0
SPLK#32000,T1_PERIODS;T1周期值的Q5格式,1000*32
SPLK#KI,KI;给电流积分系数赋值,Q12
SPLK#KP,KP;给电流比例系数赋值,Q12
SPLK#KC,KC;给电流积分修正系数赋值,Q12
SPLK#KIN,KIN;给速度积分系数赋值,Q12
SPLK#KPN,KPN;给速度比例系数赋值,Q12
SPLK#KCN,KCN;给速度积分修正系数赋值,Q12
SPLK#VMIN,VMIN;给电压最小极限赋值-1.25pu,Q12
SPLK#VMAX,VMAX;给电压最大极限赋值1.25pu,Q12
SPLK#IMAX,IMAX;给相电流最大极限赋值,Q12
SPLK#1383H,KCURRENT;电流ipuQ12的转换系数19.5的Q8格式
SPLK#39,KR;(Lr=0.169,Rr=2.011,T=0.0001)Q15格式
SPLK#156,KT;(Lr=0.169,Rr=2.011)Q12格式
SPLK#328,K;转换系数,采样周期100微秒,Q0
SPLK#0,IDK
SPLK#0,FS
SPLK#0,TETAINCR
SPLK#0,TMP
SPLK#0,TMP1
LACCIMAX
SACLITREFMAX
NEG
SACLITREFMIN
LACC#0
SACLITREF
SACLIMREF
SACLN_REF
SACLINDEX
SACLXIM
SACLXIT
SACLXISPEED
SACLUPI
SACLELPI
SACLENCODEROLD
SACLN
SACLSPEEDTMP
LACC#SPEEDSTEP;SPEEDSTEP=30
SACLSPEEDSTEP
;-----------------------事件管理器A初始化-------------------------------------------------------------------
LDP#0E8H
SPLK#0666H,ACTRA;引脚PWM1,3,5高有效,2,4,6低有效
SPLK#300,CMPR1;占空比初值为0
SPLK#300,CMPR2
SPLK#300,CMPR3
SPLK#01F4H,DBTCONA;死区时间1.6us
SPLK#8200H,COMCONA;定时器下溢比较器重载,允许比较
SPLK#1000,T1PR;周期寄存器值1000
SPLK#0,T1CNT
SPLK#0840H,T1CON;连续增减计数方式,预分频为1,允许T1
SPLK#0,T2CNT;编码脉冲计数器
SPLK#0FFFFH,T2PR
SPLK#9870H,T2CON;定向增减,允许编码接口
;-----------------------中断初始化--------------------------------------------------------------------
SPLK#0FFFH,EVAIFRA;清事件管理器A所有中断标志
SPLK#000FH,EVAIFRB
SPLK#000FH,EVAIFRC
SPLK#0200H,EVAIMRA;开T1下溢中断
SPLK#0000H,EVAIMRB
SPLK#0000H,EVAIMRC
LDP#0H
LACC#0FFH
SACLIFR;清所有系统中断标志
LACC#0000010B
SACLIMR;开INT2中断
CLRCINTM;开总中断
;-----------------------初始化结束-------------------------------------------------------------------
;-----------------------T1下溢中断处理子程序-----------------------------------------------------
_C_INT2
;-----------------------保存现场------------------------------------------------------------------------
MAR*,AR4;AR4作为堆栈指针
MAR*-
SST#1,*-;保存状态寄存器1
SST#0,*-;保存状态寄存器0
SACH*-;保存ACC高位
SACL*-;保存ACC低位
LDP#0E0H
LACCPIVR;读中断向量
LDP#0E8H
SPLK#0200H,EVAIFRA;清中断标志位
;-----------------------电流采样和AD转换------------------------------------------------------
LDP#0E1H
SPLK#2000H,ADCTRL2;启动AD转换,IA-ADCIN0,IB-ADCIN1
CONVERSION
BITADCTRL2,3;将忙状态位复制到TC
BCNDCONVERSION,TC;等待
LACCRESULT0,10
LDP#0
SACHIA
LDP#0E1H
LACCRESULT1,10
LDP#0
SACHIB
;-----------------------读编码器脉冲数,计算转角增量------------------------------------------------
LDP#0E8H
LACCT2CNT;读编码脉冲
;NEG;编码器反接线时
LDP#0
SACLTMP
SUBENCODEROLD;减去前一个周期测的脉冲数
SACLENCINCR;得到编码增量
LACCTMP
SACLENCODEROLD;更新ENCODEROLD
;-----------------------计算转速---------------------------------------------------------------------------
LACCSPEEDSTEP;检测是否该采样速度
SUB#1
SACLSPEEDSTEP
BCNDNOCALC,GT;没到采样时刻,退出
LTSPEEDTMP;到采样时刻,计算编码器增量累计值
MPY#KSPEED;Q8格式
PAC
SFL
SACHN,7;相当于右移8位,Q12格式的PU值
LACC#0
SACLSPEEDTMP;SPEEDTMP清零
LACC#SPEEDSTEP;SPEEDSTEP=30
SACLSPEEDSTEP;SPEEDSTEP重新赋初值
;-----------------------转速PI调节,输出ITREF----------------------------------------------------------
LACCN_REF;转速给定值,外部输入,已转化成Q12格式
SUBN
SACLEPISPEED;转速偏差
LACCXISPEED,12;转速调节器积分累计量
LTEPISPEED
MPYKPN;乘比例系数,Q12格式
APAC;累加
SACHUPI,4;相当于右移12位
BITUPI,0;检测调节器输出的正负
BCNDUPIMAGZEROS,NTC;如果正,跳转
LACCITREFMIN;否则是负,检测是否超过电流下限
SUBUPI
BCNDNEG_SAT,GT;超过下限进入饱和区则跳转
LACCUPI;否则正常调整
BLIMITERS
NEG_SAT
LACCITREFMIN;ACC=下限值
BLIMITERS
UPIMAGZEROS
LACCITREFMAX;检测是否超过电流上限
SUBUPI
BCNDPOS_SAT,LT;超过上限进入饱和区则跳转
LACCUPI;否则正常调整
BLIMITERS
POS_SAT
LACCITREFMAX;ACC=上限值
LIMITERS
SACLITREF;输出ITREF
SUBUPI
SACLELPI;求极限偏差
LTELPI
MPYKCN;积分修正系数,Q12
PAC
LTEPISPEED
MPYKIN;积分系数,Q12
APAC
ADDXISPEED,12
SACHXISPEED,4;更新调节器积分累计量
;-----------------------计算编码增量累计值------------------------------------------------------------------
NOCALC
LACCSPEEDTMP
ADDENCINCR
SACLSPEEDTMP
;-----------------------将IA,IB,IC转换成IPUQ12格式---------------------------------------------------------
LDP#0
LACCIA
AND#3FFH;屏蔽高位
SUB#512;向下平移,产生正负电流值
SACLTMP
LTTMP
MPYKCURRENT;转换系数,Q8格式
PAC
SFL
SACHIA,7;IA,Q12格式
LACCIB
AND#3FFH
SUB#512
SACLTMP
LTTMP
MPYKCURRENT
PAC
SFL
SACHIB,7;IB,Q12格式
LACCIB
ADDIA
NEG
SACLIC;IC=-(IB+IA)
;-----------------------CLARKE变换--------------------------------------------------------------------------------
LDP#0
LTIA
MPY#5018;乘
=5018,Q12格式
PAC
SACHIALFA,4;保存IALFA
LACCIB,1;ACC=2*IB
ADDIA;ACC=IA+2*IB
SACLTMP;暂存
LTIALFA
MPY#2896;乘
=2896,Q12格式
PAC
SACHIBETA,4;保存IBETA
;-----------------------根据TETA_E查SIN,COS表------------------------------------------------------------
LACCTETA_E;TETA_E范围[0;1000H],[0;360]的Q12格式
RPT#3;右移4位,范围变为[0;255],
SFR
AND#0FFH;屏蔽高位
SACLINDEX;生成查表指针
ADD#SINTAB;加上表的首地址
TBLRSIN;保存SIN值
LACLINDEX;COS(TETA)=SIN(TETA+90°)
ADD#040H;90°=40H
AND#0FFH
ADD#SINTAB
TBLRCOS;保存COS值
;--------------------------------------PARK变换-------------------------------------------------------------
LACC#0;累加器清零
LTIBETA
MPYSIN;Q12格式
LTAIALFA;ACC=IBETA*SIN(TETA),T=IALFA
MPYCOS;Q12格式
MPYASIN;ACC=IBETA*SIN(TETA)+IALFA*COS(TETA),
;P=IALFA*SIN(TETA)
SACHIM,4;保存IM
LACC#0;累加器清零
LTIBETA
MPYSCOS;ACC=-IALFA*SIN(TETA),P=IBETA*COS(TETA)
APAC;ACC=-IALFA*SIN(TETA)+IBETA*COS(TETA)
SACHIT,4;保存IT
;--------------------------------------转子磁链位置的计算-----------------------------------
LACCIM;Q12
SUBIDK;Q12
SACLTMP
LTTMP
MPYKR;Q15
PAC
SACHTMP,1
LACCTMP
ADDIDK
SACLIDK;IDK=IDK+KR*(IM-IDK),Q12格式
BCNDIDKNOTZERO,NEQ;如果IDK≠0跳转
LACC#0
SACLTMP;如果IDK=0,则TMP=IT/IDK=0
BITPOS
IDKNOTZERO
SACLTMP1;暂存IDK,Q12
LACCIT
ABS;取绝对值
SACLTMP;暂存IT
LACCTMP,12;右移12位成Q24格式
RPT#15
SUBCTMP1;除法
SACLTMP;TMP=IT/IDK,Q12格式
LACCIT;根据IT的正负调整商的符号
BCNDITPOS,GT;IT>0跳转
LACCTMP;否则求补
NEG
SACLTMP
ITPOS
LTTMP
MPYKT;Q12格式
PAC
SACHTMP,4;TMP=TMP*KT,Q12格式
LACCTMP
ADDN;Q12
SFR;除2(2对磁极),变成机械转速比
SACLFS;FS=N+KT*(IT/IDK),Q12格式
LACCFS
ABS
SACLTMP
LTTMP
MPYK;Q0
PAC;计算TETA_E=TETA_E+K*FS
;=TETA_E+TETAINCR
;(0-360)->(0-65535)
SACHTETAINCR,4;Q0格式
BITFS,0;根据FS的正负调整
BCNDFS_NEG,TC;为负则跳转
LACLTETAINCR;否则为正
ADDSTETA_E
SACLTETA_E
BFS_POS
FS_NEG
LACLTETA_E
SUBSTETAINCR
SACLTETA_E
FS_POS
LACCTETA_E,12;除24,变成0-4096范围
SACHTETA_E;保存TETA_E
;-----------------------T轴电流PI调节,输出VTREF-----------------------------
LACCITREF
SUBIT
SACLEPIT;T轴电流偏差
LACCXIT,12;电流调节器积分累计量
LTEPIT
MPYKP;比例系数,Q12
APAC
SACHUPI,4
BITUPI,0;检测调节器输出的正负
BCNDUPIMAGZEROT,NTC;如果正,跳转
LACCVMIN;否则是负,检测是否超过电压下限
SUBUPI
BCNDNEG_SATT,GT;超过下限进入饱和区则跳转
LACCUPI;否则正常调整
BLIMITERT
NEG_SATT
LACCVMIN;ACC=下限值
BLIMITERT
UPIMAGZEROT
LACCVMAX;检测是否超过电压上限
SUBUPI
BCNDPOS_SATT,LT;超过上限进入饱和区则跳转
LACCUPI;否则正常调整
BLIMITERT
POS_SATT
LACCVMAX;ACC=上限值
LIMITERT
SACLVTREF;输出VTREF
SUBUPI
SACLELPI;求极限偏差
LT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交流 异步 矢量 程序