📄 ac_tvc.asm
字号:
/*三相交流异步电动机矢量控制程序*/
.INCLUDE "240X.H"
;-----------------------以下定义变量和常数-------------------------------------------------------------
.DATA
KSPEED .SET 3415 ;将脉冲数转换成速度系数,13.34的Q8格式
;速度基值1500rpm,速度采样周期3ms
SPEEDSTEP .SET 30 ;速度采样周期30个中断
.BSS T1_PERIODS,1 ;T1周期值的Q5格式
.BSS KCURRENT,1 ;电流ipuQ12的转换系数,Q8格式
.BSS KI,1 ;电流积分系数,Q12格式
.BSS KP,1 ;电流比例系数,Q12格式
.BSS KC,1 ;电流积分修正系数,Q12格式
.BSS KIN,1 ;速度积分系数,Q12格式
.BSS KPN,1 ;速度比例系数,Q12格式
.BSS KCN,1 ;速度积分修正系数,Q12
.BSS VMIN,1 ;电压最小极限-1.25 pu,Q12
.BSS VMAX,1 ;电压最大极限1.25 pu,Q12
.BSS IMAX,1 ;相电流最大极限,Q12
.BSS TMP,1 ;临时变量
.BSS IA,1 ;相电流IA
.BSS IB,1 ;相电流IB
.BSS IC,1 ;相电流IC
.BSS SIN,1 ;SIN值Q12
.BSS COS,1 ;COS值Q12
.BSS DEC_MS,24 ;6个逆阵,Q14格式
.BSS CMP_1,1 ;第1基本矢量,Q0格式
.BSS CMP_2,1 ;第2基本矢量, Q0格式
.BSS CMP_0,1 ;0基本矢量/2, Q0格式
.BSS FIRST_TOG,1 ;存放第一次比较匹配的比较器地址
.BSS SEC_TOG,1 ;存放第二次比较匹配的比较器地址
.BSS TETA_E,1 ;转子电角度[0;1000H],对应[0;360]Q12格式
.BSS IALFA,1 ;ALFA轴电流
.BSS IBETA,1 ;BETA轴电流
.BSS VALF_REF,1 ;ALFA轴参考电压
.BSS VBET_REF,1 ;BETA轴参考电压
.BSS IMREF,1 ;M轴参考电流
.BSS ITREF,1 ;T轴参考电流
.BSS IM,1 ;M轴电流
.BSS IT,1 ;T轴电流
.BSS VMREF,1 ;M轴参考电压
.BSS VTREF,1 ;T轴参考电压
.BSS EPIT,1 ;T轴电流调节偏差
.BSS EPIM,1 ;M轴电流调节偏差
.BSS XIT,1 ;T轴电流调节器积分累计量
.BSS XIM,1 ;M轴电流调节器积分累计量
.BSS N,1 ;速度
.BSS N_REF,1 ;速度参考值
.BSS EPISPEED,1 ;速度偏差
.BSS XISPEED,1 ;速度调节器积分累计量
.BSS P,1 ;SVPWM扇区索引
.BSS ITREFMIN,1 ;T轴电流最小极限
.BSS ITREFMAX,1 ;T轴电流最大极限
.BSS SECTOR,1 ;SVPWM扇区数
.BSS INDEX,1 ;查SIN表索引
.BSS UPI,1 ;PI调节器输出
.BSS ELPI,1 ;PI调节器极限偏差
.BSS ENCODEROLD,1 ;前一个采样周期时编码脉冲数
.BSS ENCINCR,1 ;编码脉冲增量
.BSS SPEEDTMP,1 ;编码脉冲增量累计值
.BSS SPEEDSTEP,1 ;速度采样周期减计数器
.BSS KR,1 ;常数,见式(4-36)
.BSS KT,1 ;常数, 见式(4-37)
.BSS K,1 ;转换常数,见式(4-39)
.BSS IDK,1 ;转子励磁电流,Q12
.BSS FS,1 ;转子磁链角频率与额定角频率之比
.BSS TETAINCR,1 ;TETA转角增量
.BSS TMP1,1 ;临时变量
;-----------------------以下是程序-----------------------------------------------------------------------------
.TEXT
;-----------------------初始化程序-----------------------------------------------------------------------------
CLRC CNF ; B0
SETC OVM
SPM 0
SETC SXM ;扩展符号
LAR AR0,#DEC_MS ;传送逆阵数据
LAR AR1,#(24-1) ; 24个
LACC #ANGLES_ ; 指向源
LARP AR0
INIT_TBL
TBLR *+,AR1 ;下一个
ADD #1 ;下一个地址
BANZ INIT_TBL,AR0 ;AR1=0结束
LAR AR4,#79H ;用于堆栈保存现场,B2(60H-80H)
LDP #0E0H
SPLK #68H, WDCR ;不用看门狗
SPLK #0284H,SCSR1 ;CLKIN 10MHZ,CLKOUT 20MHZ
LDP #0E1H
SPLK #0900H,ADCTRL1 ;ADC预分频10,1MHZ
SPLK #0001H,MAXCONV ;两个通道
SPLK #0010H,CHSELSEQ1 ;选择ADCIN0和ADCIN1通道
LACC MCRA
OR #0FD8H ;设置PWM1-6,QEP1-2
SACL MCRA
;-----------------------变量初始化-----------------------------------------------------
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.25 pu,Q12
SPLK #VMAX, VMAX ;给电压最大极限赋值1.25 pu,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
LACC IMAX
SACL ITREFMAX
NEG
SACL ITREFMIN
LACC #0
SACL ITREF
SACL IMREF
SACL N_REF
SACL INDEX
SACL XIM
SACL XIT
SACL XISPEED
SACL UPI
SACL ELPI
SACL ENCODEROLD
SACL N
SACL SPEEDTMP
LACC #SPEEDSTEP ;SPEEDSTEP=30
SACL SPEEDSTEP
;-----------------------事件管理器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
SACL IFR ;清所有系统中断标志
LACC #0000010B
SACL IMR ;开INT2中断
CLRC INTM ;开总中断
;-----------------------初始化结束-------------------------------------------------------------------
;-----------------------T1下溢中断处理子程序-----------------------------------------------------
_C_INT2
;-----------------------保存现场------------------------------------------------------------------------
MAR *,AR4 ;AR4作为堆栈指针
MAR *-
SST #1,*- ;保存状态寄存器1
SST #0,*- ;保存状态寄存器0
SACH *- ;保存ACC高位
SACL *- ;保存ACC低位
LDP #0E0H
LACC PIVR ;读中断向量
LDP #0E8H
SPLK #0200H,EVAIFRA ;清中断标志位
;-----------------------电流采样和AD转换------------------------------------------------------
LDP #0E1H
SPLK #2000H,ADCTRL2 ;启动AD转换,IA-ADCIN0,IB-ADCIN1
CONVERSION
BIT ADCTRL2,3 ;将忙状态位复制到TC
BCND CONVERSION,TC ;等待
LACC RESULT0,10
LDP #0
SACH IA
LDP #0E1H
LACC RESULT1,10
LDP #0
SACH IB
;-----------------------读编码器脉冲数,计算转角增量------------------------------------------------
LDP #0E8H
LACC T2CNT ;读编码脉冲
;NEG ;编码器反接线时
LDP #0
SACL TMP
SUB ENCODEROLD ;减去前一个周期测的脉冲数
SACL ENCINCR ;得到编码增量
LACC TMP
SACL ENCODEROLD ;更新ENCODEROLD
;-----------------------计算转速---------------------------------------------------------------------------
LACC SPEEDSTEP ;检测是否该采样速度
SUB #1
SACL SPEEDSTEP
BCND NOCALC,GT ;没到采样时刻,退出
LT SPEEDTMP ;到采样时刻,计算编码器增量累计值
MPY #KSPEED ;Q8格式
PAC
SFL
SACH N,7 ;相当于右移8位,Q12格式的PU值
LACC #0
SACL SPEEDTMP ;SPEEDTMP清零
LACC #SPEEDSTEP ;SPEEDSTEP=30
SACL SPEEDSTEP ;SPEEDSTEP重新赋初值
;-----------------------转速PI调节,输出ITREF----------------------------------------------------------
LACC N_REF ;转速给定值,外部输入,已转化成Q12格式
SUB N
SACL EPISPEED ;转速偏差
LACC XISPEED,12 ;转速调节器积分累计量
LT EPISPEED
MPY KPN ;乘比例系数,Q12格式
APAC ;累加
SACH UPI,4 ;相当于右移12位
BIT UPI,0 ;检测调节器输出的正负
BCND UPIMAGZEROS,NTC ;如果正,跳转
LACC ITREFMIN ;否则是负,检测是否超过电流下限
SUB UPI
BCND NEG_SAT,GT ;超过下限进入饱和区则跳转
LACC UPI ;否则正常调整
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -