📄 mcs.asm
字号:
.include "f2407.h"
.include "vector.h"
.include "pvecs.h"
.global i_GET,i_GET_INIT
.global CLARK,CLARK_INIT
.global PARK,PARK_INIT
.global FLUX,FLUX_INIT
.global QEP,QEP_INIT
.global Omiga_PID,Omiga_PID_INIT
.global KesaiR_PID,KesaiR_PID_INIT
.global IST_PID,IST_PID_INIT
.global IPARK
.global SVPWM,SVPWM_INIT
.global PROTECT
.global SINTAB_360,SIN90
.global PDPINTA_INIT
.global FILTER_INIT,FILTER
.global OMIGA_FILTER_INIT,OMIGA_FILTER
.global OMIGAE0_FILTER_INIT,OMIGAE0_FILTER
;=====================================================================
.global TEMP,TEMP1
.global Tpwm
.global IA0,IA1,IA2,IB0,IB1,IB2,Omiga_in ;i_GET function
.global Ialfa0,Ibeta0,CLARK_C1,CLARK_C2 ;CLARK function
.global PARK_Theta,ISM0,IST0,IST1,IST2,ThetaS1,OmigaS1 ;PARK function
.global t_ptr,ip_val,cos_PARK_Theta,sin_PARK_Theta,nxt_entry,delta_angle ;PARK function
.global OmigaS0,OmigaR0,delta_omiga,ThetaS0,KesaiR1,KesaiR0,FLUX_C1,FLUX_C2,FLUX_C3 ;FLUX function
.global POS0,POS1,QEP_dir,QEP_C,OmigaR_temp ;QEP function
.global Omiga_ref,IST_ref1,IST_ref,IST_ref_TEMP,OmigaE0,OmigaE1,OmigaE2 ;Omiga_PID function
.global Omiga_PID_K0,Omiga_PID_K1,Omiga_PID_K2,IST_refmax,IST_refmin;Omiga_PID function
.global KesaiR_ref,USM1,USM_TEMP,USM0,KesaiRE0,KesaiRE1,KesaiRE2;KesaiR_PID function
.global KesaiR_PID_K0,KesaiR_PID_K1,KesaiR_PID_K2,USMmax,USMmin ;KesaiR_PID function
.global IST_ref,IST_PID_K0,IST_PID_K1,IST_PID_K2 ;IST_PID function
.global UST1,UST_TEMP,UST0,USTmax,USTmin,ISTE0,ISTE1,ISTE2,ISTE3;IST_PID function
.global Ualfa0,Ubeta0,cos_ThetaS0,sin_ThetaS0 ;IPARK function
.global SECTOR,A,B,C,SVPWM_C1,SVPWM_C2,CMPR1_BUFF,CMPR2_BUFF,ACTRA_BUFF,TX1,TX2 ;SVPWM function
.global FILTER_Y1,FILTER_Y2,FILTER_Y3,FILTER_Y4,FILTER_Y5,FILTER_Y6 ;FILTER function
.global FILTER_MAX,FILTER_MIN,FILTER_RESULT,FILTER_COUNT ;FILTER function
.global OMIGA_FILTER_Y1,OMIGA_FILTER_Y2,OMIGA_FILTER_Y3,OMIGA_FILTER_Y4
.global OMIGA_FILTER_Y5,OMIGA_FILTER_Y6,OMIGA_FILTER_Y7,OMIGA_FILTER_Y8
.global OMIGA_FILTER_RESULT ;OMIGA_FITER function
.global OMIGAE0_FILTER_Y1,OMIGAE0_FILTER_Y2,OMIGAE0_FILTER_Y3,OMIGAE0_FILTER_Y4
.global OMIGAE0_FILTER_Y5,OMIGAE0_FILTER_Y6,OMIGAE0_FILTER_Y7,OMIGAE0_FILTER_Y8
.global OMIGAE0_FILTER_RESULT
;--------------------------------------------------------------------
.bss TEMP,1
.bss TEMP1,1
.bss Tpwm,1 ;Tpwm=0.2mS=6554(Q15)
;----------------
.bss IA0,1 ;i_GET function output (Q12)
.bss IA1,1
.bss IA2,1
.bss IB0,1 ;(Q12)
.bss IB1,1
.bss IB2,1
.bss Omiga_in,1 ;(7FFFH/mS)
;----------------
.bss Ialfa0,1 ;CLARK function output (Q11)
.bss Ibeta0,1 ;(Q11)
.bss CLARK_C1,1 ;(Q15),CLARK function constant
.bss CLARK_C2,1 ;(Q15)
;----------------
.bss ISM0,1
.bss IST0,1
.bss IST1,1
.bss IST2,1
.bss PARK_Theta,1
.bss ThetaS1,1 ;前一周期的磁链定向角
.bss OmigaS1,1 ;前一周期的磁链旋转角速度
.bss t_ptr,1 ;表指针,指向PARK_Theta的sin值。
.bss ip_val,1 ;存插值
.bss cos_PARK_Theta,1 ;存cos(PARK_Theta)(Q15)
.bss sin_PARK_Theta,1 ;存sin(PARK_Theta)(Q15)
.bss nxt_entry,1 ;表中sin(PARK_Theta)的下一个值,做插值时用。
.bss delta_angle,1 ;表中前后两个值的差值。
;----------------
.bss OmigaS0,1 ;(7FFFH/mS)
.bss OmigaR0,1 ;(7FFFH/mS)
.bss delta_omiga,1 ;(7FFFH/mS)
.bss ThetaS0,1 ;(7FFFH/360)
.bss KesaiR1,1 ;(Q4)
.bss KesaiR0,1 ;(Q4)
.bss FLUX_C1,1 ;(Q15),FLUX function constant
.bss FLUX_C2,1 ;(Q8)
.bss FLUX_C3,1
;----------------
.bss POS0,1 ;Rotator‘s position
.bss POS1,1 ;Rotator‘s position
.bss QEP_dir,1 ;转向
.bss QEP_C,1 ;QEP function constant
;----------------
.bss Omiga_ref,1 ;给定
.bss IST_ref,1 ;输出
.bss IST_ref1,1 ;上一次输出
.bss IST_ref_TEMP,1 ;上一次输出
.bss IST_refmax,1 ;饱和情况下的最值
.bss IST_refmin,1
.bss OmigaE0,1 ;误差值
.bss OmigaE1,1
.bss OmigaE2,1
.bss Omiga_PID_K0,1 ;PID调节系数
.bss Omiga_PID_K1,1
.bss Omiga_PID_K2,1
;----------------
.bss KesaiR_ref,1 ;给定
.bss USM0,1 ;输出
.bss USM1,1 ;上一次输出
.bss USM_TEMP,1 ;上一次输出
.bss USMmax,1 ;饱和情况下的最值
.bss USMmin,1
.bss KesaiRE0,1 ;误差值
.bss KesaiRE1,1
.bss KesaiRE2,1
.bss KesaiR_PID_K0,1 ;PID调节系数
.bss KesaiR_PID_K1,1
.bss KesaiR_PID_K2,1
;----------------
; .bss IST_ref,1 ;给定,前面已经定义
.bss UST0,1 ;输出
.bss UST1,1 ;上一次输出
.bss UST_TEMP,1 ;上一次输出
.bss USTmax,1 ;饱和情况下的最值
.bss USTmin,1
.bss ISTE0,1 ;误差值
.bss ISTE1,1
.bss ISTE2,1
.bss IST_PID_K0,1 ;PID调节系数
.bss IST_PID_K1,1
.bss IST_PID_K2,1
;----------------
.bss Ualfa0,1 ;IPARK output(Q11)
.bss Ubeta0,1 ;(Q11)
.bss cos_ThetaS0,1 ;cos(ThetaS0)(Q15)
.bss sin_ThetaS0,1 ;sin(ThetaS0)(Q15)
;----------------
.bss SECTOR,1
.bss A,1
.bss B,1
.bss C,1
.bss TX1,1
.bss TX2,1
.bss CMPR1_BUFF,1 ;SVPWM function output
.bss CMPR2_BUFF,1
.bss ACTRA_BUFF,1
.bss SVPWM_C1,1
.bss SVPWM_C2,1
;---------------- ;IST0滤波参数
.bss FILTER_Y1,1
.bss FILTER_Y2,1
.bss FILTER_Y3,1
.bss FILTER_Y4,1
.bss FILTER_Y5,1
.bss FILTER_Y6,1
.bss FILTER_Y7,1
.bss FILTER_Y8,1
.bss FILTER_Y9,1
.bss FILTER_Y10,1
.bss FILTER_MAX,1
.bss FILTER_MIN,1
.bss FILTER_RESULT,1
.bss FILTER_COUNT,1
;---------------- ;转速滤波参数
.bss OMIGA_FILTER_Y1,1
.bss OMIGA_FILTER_Y2,1
.bss OMIGA_FILTER_Y3,1
.bss OMIGA_FILTER_Y4,1
.bss OMIGA_FILTER_Y5,1
.bss OMIGA_FILTER_Y6,1
.bss OMIGA_FILTER_Y7,1
.bss OMIGA_FILTER_Y8,1
.bss OMIGA_FILTER_RESULT,1
;---------------- ;转速误差滤波参数
.bss OMIGAE0_FILTER_Y1,1
.bss OMIGAE0_FILTER_Y2,1
.bss OMIGAE0_FILTER_Y3,1
.bss OMIGAE0_FILTER_Y4,1
.bss OMIGAE0_FILTER_Y5,1
.bss OMIGAE0_FILTER_Y6,1
.bss OMIGAE0_FILTER_Y7,1
.bss OMIGAE0_FILTER_Y8,1
.bss OMIGAE0_FILTER_RESULT,1
;----------------
.data
ST0_CON1 .word #0 ;保存ST0结果
ST1_CON1 .word #0 ;保存ST1结果,必须保存在DP=0页!
;TS .word #07D0H
;TS2 .word #03E8H
PRT_A .usect "table",80H ;一页存储单元
PRT_B .usect "table",80H
PRT_C .usect "table",80H
PRT_D .usect "table",80H
PRT_E .usect "table",80H
PRT_F .usect "table",80H
PRT_G .usect "table",80H
PRT_H .usect "table",80H
PRT_I .usect "table",80H
PRT_J .usect "table",80H
PRT_K .usect "table",80H
PRT_L .usect "table",80H
PRT_M .usect "table",80H
PRT_N .usect "table",80H
PRT_O .usect "table",80H
;=====================================================================
.text
START:
NOP
NOP
SETC INTM ;Disable interrupt
SETC SXM
CLRC CNF ;B0作为数据存储区
LDP #0H
SPLK #0023H,IMR ;使能第1级中断1,2,6
LACC IFR
SACL IFR ;Clear IFR
LDP #DP_PF1 ;7000h-707Fh
SPLK #80FEH,SCSR1 ;CLK=10MHz,CLKOUT=40MHz,仿真时CLKOUT脚没有信号。
SPLK #006FH,WDCR ;Disable DOG
LDP #DP_PF2
;SPLK #0F03FH,MCRA
SPLK #0FFFH,MCRA ;配置为特殊功能用途
SPLK #00FAH,MCRB ;使能CAN,SPI特殊功能
SPLK #0001H,MCRC ;CLKOUT引脚输出CPU时钟
LDP #DP_PF1
SPLK #8007H,XINT1CR ;外部中断上升沿中断,低优先级
SPLK #0,XINT2CR
CALL EVA_INIT ;EVA模块初始化
; CALL QEP_INIT
CALL i_GET_INIT
; CALL CLARK_INIT
; CALL PARK_INIT
; CALL FLUX_INIT
; CALL Omiga_PID_INIT
; CALL KesaiR_PID_INIT
; CALL IST_PID_INIT
CALL SVPWM_INIT
; CALL FILTER_INIT
; CALL OMIGAE0_FILTER_INIT
;赋初值
LDP #DP_DATA
SPLK #1000011001100110B,ACTRA_BUFF
SPLK #010H,CMPR1_BUFF
SPLK #030H,CMPR2_BUFF
SPLK #0,IA0
SPLK #0,IA1
SPLK #0,IA2
SPLK #0,IB0
SPLK #0,IB1
SPLK #0,IB2
SPLK #0,IST0
SPLK #0,IST1
SPLK #0,IST2
SPLK #0,OmigaR0
SPLK #340,Omiga_ref ;791*1.831=1450r/min(额定)
SPLK #17000,KesaiR_ref ;225mH*5A=18000
SPLK #5000,IST_ref
SPLK #7000,USM0
SPLK #7000,UST0
SPLK #0,ThetaS0
LAR AR7,#PRT_A ;开始存波形的位置。
LAR AR6,#PRT_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -