📄 control1.asm
字号:
**************头文件定义***************
**************************************
.include "lf2407a.h"
; .mmregs
; .global _c_int0
.sect "vectors"
b _c_int0 ;系统复位入口地址
b _c_int1 ;_c_int1:功率保护中断入口、高优先级的SCI中断以后再说
b _c_int2 ;_c_int2:pwm中断入口地址
_c_int3 b GISR3
_c_int4 b GISR4
b _c_int5 ;低优先级的接收发送中断
_c_int6 b GISR6
.space 22*16 ;36-2*7=22
b NMIINT ;0024h--->36
.space 26*16 ;003eh--->62,62-36=26
STACK .usect "stack",10 ;现场保护
DATSAVE .usect "datsave",2048
UF_E .usect "datasave" ,2048 ;UF_TX: 8000h-87ffh
ISQQ_E .usect "datasave" ,2048 ;ISQQ_TX:8800h-8fffh
USQ_E .usect "datasave" ,2048 ;USQ_TX: 9000h-97ffh
USD_E .usect "datasave" ,2048 ;USD_TX: 9800h-9fffh
USa_E .usect "datasave" ,2048 ;USa_TX: 0a000h-0a7ffh
USb_E .usect "datasave" ,2048 ;USb_TX: 0a800h-0afffh
ISA_E .usect "datasave" ,2048 ;ISA_TX: 0b000h-0b7ffh
ISB_E .usect "datasave" ,2048 ;ISB_TX: 0b800h-0bfffh
ISD_E .usect "datasave" ,2048 ;ISD_TX: 0c000h-0c7ffh
ISQ_E .usect "datasave" ,2048 ;ISQ_TX: 0c800h-0cfffh
Fa_E .usect "datasave" ,2048 ;Fa_TX : 0d000h-0d7ffh
Fb_E .usect "datasave" ,2048 ;Fb_TX : 0d800h-0dfffh
;N_ref .usect "datasave" , 1 ; 0e000h
;Kf_E .usect "datasave" , 1 ; 0e001h
;Knp_E .usect "datasave" , 1 ; 0e002h
;Kni_E .usect "datasave" , 1 ; 0e003h
;Knd_E .usect "datasave" , 1 ; 0e004h
;Kqp_E .usect "datasave" , 1 ; 0e005h
;Kqi_E .usect "datasave" , 1 ; 0e006h
;Kqd_E .usect "datasave" , 1 ; 0e007h
;Kdp_E .usect "datasave" , 1 ; 0e008h
;Kdi_E .usect "datasave" , 1 ; 0e009h
;Kdd_E .usect "datasave" , 1 ; 0e00ah
.sect "table"
sintab .include "sin.tab.bak"
******************常量初始化及变量的定义***************
******************************************************
.data
SQRT3inv .set 093Ch ;1/SQRT(3)=093Ch,4.12f
SQRT3 .set 1BB6h ;SQRT(3)=01BB6h, 4.12f
SQRT32 .set 0DDBh ;SQRT3/2=0DDBh, 4.12f
inv2 .set 0800h ;1/2=0.5=0800h, 4.12f
Polepairs .set 2 ;磁极对数
;Kvf .set 6333h ;4.12f kvfp=310/50=6.2
Kvf .set 9e8h ;4.12f kvfp=310/500//此处改动//
Kvp .set 0D36h ;8.8f kvp=4096/310=13.2129
v_rep1 .set 0 ;16.0f 0v vf=0
v_rep2 .set 10 ;16.0f 10v vf=1
v_rep3 .set 30 ;16.0f 20v vf=2
v_rep4 .set 50 ;16.0f 50v vf=3
pwmprd .set 2000 ;10MHZ*4(25ns)
;开关周期100us PWMPRD=100us/2/25ns=2000
Kr .set 0eh
Kt .set 275h;0d80h ;Q15,ws=3.2 3.2/50*(0.3/1)
K .set 51E0h ;65536/200,Q6
Wp .set 53e2h ;68ddh 1.15f
;额定时单位hz转过的电角度2*pi*fn/10khz=0.0314rad,因而额定时(50hz)转子磁链位置在一个机械周期中有2*pi/0.0314=200个增量
;程序中用65536(ffffh)个数表示0~360度,所以额定时一个增量对应的正弦表数值65536/200=327.68=328=148h
;在任意转速时(或任意频率时)一个增量对应的正弦表数值327.68/500*f_refbuf=3.28*f_refbuf(16.0f)
;定义Wp=0.65536 53e2h(1.15f)
v_bias .set 1000h ;4.12f,310/310*4096=1000h
v_bias_maan .set 1000h ;4.12,310/310*4096=1000h,270/310*4096=defh
t_trans .set 3e8h ;4.12f,2000/8192*4096=3e8h
t_trans_maan .set 47ch ;2*270/310*t_trans_maan=2000
SPEEDSTEP .set 10
KSPEED .set 68dbh;1062h ;//Q11;8.8f 10个电流采样周期 码盘2500脉冲/转
;.set所赋的初值超过1000h时,此变量不可作为立即数直接参与乘法运算
KCURRENT .set 3198h
Knp .set 2baeh ;PID speed regulators parameters
Kni .set 028h ;4.12f,0.01
Knd .set 0h
Kqp .set 1000h ;PID current regulators parameters
Kqi .set 10h ;4.12f
Kqd .set 0h
Kdp .set 1000h ;PID current regulators parameters
Kdi .set 10h ;4.12f
Kdd .set 0h
i_max_pos .set 1000h;0ccch ;q轴参考电流电流上限,额定电流(5A)的0.8倍,4.12f
v_max_pos .set 1400h ;q、d轴电压上限,额定电压(310v)1.25倍,1.25pu=5120=1400h
i_max_hall .set 31 ;霍尔传感器检测最大电流
i_max_ac .set 5 ;交流电机额定电流
i_lim_np .set 10000 ;过流1S
i_ac_lim .set 2000h ;交流电机电流限制 2倍于额定电流,超过一定时间停机
f_add_np .set 10 ;f_ref每10*100us加减1hz
ctrl_n
.bss n_fed,1 ;feedback speed
.bss flag,1
.bss tx_bit_flag,1
.bss rx_bit_flag,1
.bss bit_flag,1
.bss spi_flag,1
.bss da_flag,1
.bss sci_flag,1
.bss save_flag,1
.bss sta_save_flag,1
.bss option_flag,1
.bss option,1
.bss tmp,1
.bss tmp0,1
.bss tmp1,1
.bss tmp3,1 ;计算转速专用
.bss tmp4,1 ;save专用
.bss tmp5,1 ;save专用
.bss K_vf,1
.bss Umax,1
.bss f_ref,1
.bss v_rep_3,1
.bss va,1
.bss vb,1
.bss vc,1
.bss va_b,1
.bss vb_b,1
.bss vc_b,1
.bss a_pwm,1
.bss b_pwm,1
.bss c_pwm,1
.bss vsalfa,1
.bss vsbeta,1
.bss Kn_p,1 ;速度环PID参数
.bss Kn_i,1
.bss Kq_p,1 ;q轴电流调节器PID参数
.bss Kq_i,1
.bss Kd_p,1 ;d轴电流调节器PID参数
.bss Kd_i,1
.bss isa,1 ;定子电流
.bss isb,1
.bss isc,1
.bss vsal_ref,1 ;alfa-axis referance voltage
.bss vsbe_ref,1
.bss t1,1 ;svpwm t1
.bss t2,1
.bss t1sat,1
.bss t2sat,1
.bss v_ref1,1 ;variable for sector calculation
.bss v_ref2,1
.bss v_ref3,1
.bss taon,1 ;pwm commutation instant phase 1
.bss tbon,1
.bss tcon,1
.bss X,1 ;svpwm variable
.bss Y,1
.bss Z,1
.bss A,1
.bss B,1
.bss C,1
.bss sector,1
.bss VDCinvT,1
.bss PWMPRD,1
.bss fa,1
.bss fb,1
.bss isalfa,1 ;alfa-axis current
.bss isbeta,1
.bss isdref,1 ;d-axis referance current
.bss isqref,1
.bss isd,1 ;d-axis current
.bss isq,1
.bss vsdref,1 ;d-axis referance voltage
.bss vsqref,1
.bss epiq,1 ;q-axis current regulator error
.bss epid,1
.bss xid,1 ;d-axis current regulator intrgral component
.bss xiq,1
.bss Kspeed,1
.bss n_ref,1 ;speed reference
.bss epin,1 ;speed regulator integral error
.bss xin,1
.bss xin_h,1 ;speed regulator integral component
.bss xin_l,1
.bss upi,1
.bss upi_h,1 ;PID regulators output(current and speed)
.bss upi_l,1
.bss elpi,1 ;PID regulators limitation error (current and speed)
.bss ia,1
.bss ib,1
.bss ia1,1 ;结果寄存器暂存变量
.bss ia2,1
.bss ia3,1
.bss ia4,1
.bss ia5,1
.bss ia6,1
.bss ia_min,1
.bss ia_max,1
.bss Kcurrent,1
.bss N_rep,1 ;静态补偿次数32768次
.bss ia_rep,1 ;a相电流静态补偿变量
.bss ia_rep_l,1
.bss ia_rep_h,1
.bss ib_rep,1 ;b相电流静态补偿变量
.bss ib_rep_l,1
.bss ib_rep_h,1
.bss i_lim_n,1 ;过流判断计数值,用于和i_lim_np比较
.bss f_add_n,1
.bss f_refbuf,1
.bss f_refbuf1,1
.bss f_ref_rx,1
.bss f_ref_rx1,1
.bss ref_rx_h,1
.bss ref_rx_l,1
.bss i_mr,1
.bss fs,1
.bss wp,1
.bss theta_cm,1 ;theta_cm(k+1)=theta_cm(k)+theta_w
.bss theta_w,1 ;任意转速时单位hz转过的角度增量,theta_w=Wp*f_refbuf
.bss theta_cm1,1
.bss theta_w1,1
.bss sin_theta_cm,1
.bss cos_theta_cm,1
.bss N_pulse,1
.bss encincr,1 ;encoder pulses between two consecutive sampling periods
.bss speedtmp,1 ;used to accumulate encoder pluses increments
.bss speedstep,1 ;sampling periods down couter used to define speed sampling period
.bss da_buf1,1
.bss da_buf2,1
************以下变量页面地址起始于0380h,引用时ldp #****7h**
.bss k,1 ;闭环计算磁链角查表用
.bss Kn_d,1
.bss Kq_d,1
.bss Kd_d,1
.bss temp,1
.bss n_fed_tx,1
************************************************************
kickdog .macro
ldp #DP_PF1
splk #006Fh,WDCR
splk #5555h,WDKEY
splk #0aaaah,WDKEY
splk #006Fh,WDCR
.endm
fin_tab .macro
clrc SXM ;抑制累加器移位时符号扩展,保证tmp为正数
ldp #6
lacl tmp ;此处的右移除2,因为相限判断时tmp扩大了一倍
sfr
sacl tmp ;tmp范围只能为(0~2000h)
lacc #sintab
add tmp
tblr sin_theta_cm ;返回该角度对应的正弦值
lacl #1fffh
sub tmp
add #sintab
tblr cos_theta_cm ;返回该角度对应的余弦值
setc SXM
.endm
**********主程序*******************************
***********************************************
.text
_c_int0:
setc INTM ;初始化开始时关中断
clrc SXM
clrc OVM
clrc CNF
ldp #DP_PF1 ;系统初始化
splk #0000000011100101b,SCSR1 ;bit0,无效地址检测位,初始化时应清零,若出现无效地址将会发生NMI中断
splk #0000000001001010b,SCSR2
kickdog
lacc #0 ;清所有EVA、EVB、ADC寄存器
ldp #DP_EVA
sacl GPTCONA
sacl T1CNT
sacl T1CMPR
sacl T1PR
sacl T1CON
sacl T2CNT
sacl T2CMPR
sacl T2PR
sacl T2CON
sacl COMCONA
sacl CMPR1
sacl CMPR2
sacl CMPR3
sacl CAPCONA
sacl CAPFIFOA
sacl CAP1FIFO
sacl CAP2FIFO
sacl CAP3FIFO
sacl CAP1FBOT
sacl CAP2FBOT
sacl CAP3FBOT
ldp #DP_EVB
sacl GPTCONB
sacl T3CNT
sacl T3CMPR
sacl T3PR
sacl T3CON
sacl T4CNT
sacl T4CMPR
sacl T4PR
sacl T4CON
sacl COMCONB
sacl CMPR4
sacl CMPR5
sacl CMPR6
sacl CAPCONB
sacl CAPFIFOB
sacl CAP4FIFO
sacl CAP5FIFO
sacl CAP6FIFO
sacl CAP4FBOT
sacl CAP5FBOT
sacl CAP6FBOT
ldp #DP_PF2
sacl ADCTRL1
sacl ADCTRL2
sacl MAXCONV
sacl CHSELSEQ1
sacl CHSELSEQ2
sacl CHSELSEQ3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -