📄 zhtest1.asm
字号:
BLDD #ipark_d,Ualfa
BLDD #ipark_q,Ubeta
CALL SVGEN_DQ
; PWM 驱动模块
LDP #Mfunc_c1
BLDD #Ta,Mfunc_c1
BLDD #Tb,Mfunc_c2
BLDD #Tc,Mfunc_c3
CALL FC_PWM_DRV
.endif
******************************************
.if (step3)
; 电流测量模块
CALL ILEG2DRV
; Clarke变换模块
LDP #clark_a
BLDD #Ia_out,clark_a
BLDD #Ib_out,clark_b
CALL CLARKE
; 正交脉冲捕获模块
CALL QEP_THETA_DRV
; 速度计算模块
LDP #shaft_angle
BLDD #theta_mech,shaft_angle
BLDD #dir_QEP,direction
CALL SPEED_FRQ
; PARK 变换模块
LDP #park_d
BLDD #clark_d,park_d
BLDD #clark_q,park_q
BLDD #rmp_out,theta_p
CALL PARK
; 斜坡信号产生模块
; SPM 1 ;模拟信号控制频率
; LDP #data_tmp
; SPLK #2A00H,data_tmp
; LDP #V_ref ;
; LT V_ref
; MPY data_tmp ;
; PAC ;
; SACH rmp_freq ;end
CALL RAMP_GEN
; Park逆变换模块
LDP #theta_ip
BLDD #rmp_out,theta_ip
; SPM 1 ;模拟信号控制频率
; LDP #data_tmp
; SPLK #06100H,data_tmp
; LDP #rmp_freq ;
; LT rmp_freq ;
; MPY data_tmp ;
; PAC ;
; ABS
; LDP #ipark_D
; SACH ipark_D,1
; SACH ipark_Q,1 ;end
CALL I_PARK
; 电压空间矢量计算模块
LDP #Ualfa
BLDD #ipark_d,Ualfa
BLDD #ipark_q,Ubeta
CALL SVGEN_DQ
; PWM 驱动模块
LDP #Mfunc_c1
BLDD #Ta,Mfunc_c1
BLDD #Tb,Mfunc_c2
BLDD #Tc,Mfunc_c3
CALL FC_PWM_DRV
.endif
******************************************
.if (step4)
; 电流测量模块
CALL ILEG2DRV
; Clarke 变换模块
LDP #clark_a
BLDD #Ia_out,clark_a
BLDD #Ib_out,clark_b
CALL CLARKE
; QEP 模块
CALL QEP_THETA_DRV
; SPEED_FR 模块
LDP #shaft_angle
BLDD #theta_mech,shaft_angle
BLDD #dir_QEP,direction
CALL SPEED_FRQ
; PARK 变换模块
LDP #park_d
BLDD #clark_d,park_d
BLDD #clark_q,park_q
.if constant_current ; 直流测试励磁
SPLK #0000h,theta_p
.else
BLDD #rmp_out,theta_p ;
.endif
CALL PARK
; D轴电流调节模块
LDP #id_ref
BLDD #my_id_ref,id_ref ; xxxxh 对应峰值电流 1.5A
BLDD #park_D,id_fdb
CALL pid_reg_id
; Q轴电流调节模块
LDP #iq_ref
.if constant_current ;
SPLK #0000h,iq_ref ;
.else
BLDD #my_iq_ref,iq_ref
.endif
BLDD #park_Q,iq_fdb
CALL pid_reg_iq
; Ramp产生模块
CALL RAMP_GEN
; Park逆变换模块
LDP #ipark_D
BLDD #ud_out,ipark_D
BLDD #uq_out,ipark_Q ;
.if constant_current ;
SPLK #0000h,theta_ip
.else
BLDD #rmp_out,theta_ip
.endif
CALL I_PARK
; 电压空间矢量计算模块
LDP #Ualfa
BLDD #ipark_d,Ualfa
BLDD #ipark_q,Ubeta
CALL SVGEN_DQ
; PWM 驱动模块
LDP #Mfunc_c1
BLDD #Ta,Mfunc_c1
BLDD #Tb,Mfunc_c2
BLDD #Tc,Mfunc_c3
CALL FC_PWM_DRV
.endif
******************************************
.if (step5)
; 电流采样模块
CALL ILEG2DRV
; Clarke变换模块
LDP #clark_a
BLDD #Ia_out,clark_a
BLDD #Ib_out,clark_b
CALL CLARKE
; QEP 模块
CALL QEP_THETA_DRV
; 转速测量模块
LDP #shaft_angle
BLDD #theta_mech,shaft_angle
BLDD #dir_QEP,direction
CALL SPEED_FRQ
; PARK变换模块
LDP #park_d
BLDD #clark_d,park_d
BLDD #clark_q,park_q
.if test_cur_mod ; 连接到 'rmp_out'或者'theta_cur_mod'
BLDD #rmp_out,theta_p ;
.else
BLDD #theta_cur_mod,theta_p
.endif
CALL PARK
;磁链电流模型
LDP #spd_cur_mod
BLDD #speed_frq,spd_cur_mod
BLDD #park_D,i_cur_mod_D
BLDD #park_Q,i_cur_mod_Q
CALL CURRENT_MODEL
; D轴电流调节模块
LDP #id_ref
BLDD #my_id_ref,id_ref ;
BLDD #park_D,id_fdb
CALL pid_reg_id
; Q轴电流调节模块
LDP #iq_ref
BLDD #my_iq_ref,iq_ref
BLDD #park_Q,iq_fdb
CALL pid_reg_iq
; Ramp信号发生模块
CALL RAMP_GEN
; 反Park变换模块
LDP #ipark_D
BLDD #ud_out,ipark_D
BLDD #uq_out,ipark_Q ;zyg
.if test_cur_mod
BLDD #rmp_out,theta_ip ; 连接到 'rmp_out'或者'theta_cur_mod'
.else ;
BLDD #theta_cur_mod,theta_ip
.endif
CALL I_PARK
; 电压空间矢量计算模块
LDP #Ualfa
BLDD #ipark_d,Ualfa
BLDD #ipark_q,Ubeta
CALL SVGEN_DQ
; PWM 驱动模块
LDP #Mfunc_c1
BLDD #Ta,Mfunc_c1
BLDD #Tb,Mfunc_c2
BLDD #Tc,Mfunc_c3
CALL FC_PWM_DRV
.endif
******************************************
.if (step6)
; 电流采样模块
CALL ILEG2DRV
; Clarke变换模块
LDP #clark_a
BLDD #Ia_out,clark_a
BLDD #Ib_out,clark_b
CALL CLARKE
; QEP 模块
CALL QEP_THETA_DRV
; 速度调节模块
LDP #spd_ref
bldd #speed_reference,spd_ref
bldd #spd_cur_mod,spd_fdb
CALL pid_reg_spd
; 速度测量模块
LDP #shaft_angle
BLDD #theta_mech,shaft_angle
BLDD #dir_QEP,direction
CALL SPEED_FRQ
; PARK 变换模块
LDP #park_d
BLDD #clark_d,park_d
BLDD #clark_q,park_q
BLDD #theta_cur_mod,theta_p
CALL PARK
; 转子磁链电流模型
LDP #spd_cur_mod
BLDD #speed_frq,spd_cur_mod
BLDD #park_D,i_cur_mod_D
BLDD #park_Q,i_cur_mod_Q
CALL CURRENT_MODEL
; D轴电流调节模块
LDP #id_ref
BLDD #my_id_ref,id_ref
BLDD #park_D,id_fdb
CALL pid_reg_id
; Q轴电流调节模块
LDP #iq_ref
BLDD #spd_out,iq_ref
BLDD #park_Q,iq_fdb
CALL pid_reg_iq
; Park逆变换模块
LDP #ipark_D
BLDD #ud_out,ipark_D
BLDD #uq_out,ipark_Q
BLDD #theta_cur_mod,theta_ip
CALL I_PARK
; 电压空间是两计算模块
LDP #Ualfa
BLDD #ipark_d,Ualfa
BLDD #ipark_q,Ubeta
CALL SVGEN_DQ
; PWM driver
LDP #Mfunc_c1
BLDD #Ta,Mfunc_c1
BLDD #Tb,Mfunc_c2
BLDD #Tc,Mfunc_c3
CALL FC_PWM_DRV
.endif
;DATA_LOG
; ldp #dlog_iptr1 ;
; SPLK #rmp_out,dlog_iptr1 ;
; SPLK #Ib_out,dlog_iptr2 ;
CALL DATA_LOG ;
;=========================================================
;主循环中断服务程序结束
;=========================================================
;断点恢复
END_ISR:
POINT_PG0
MAR *, AR1 ;激活栈指针
LACL *- ;恢复 Acc 低16位
ADDH *- ;恢复 Acc 高16位
LST #0, *- ;恢复 ST0
LST #1, *- ;恢复 ST1
EINT
RET
*******************************************************
* INT4 - EV group C Ints开始
* Cap3 中断使能
*******************************************************
CAP3_ID .set 035H ; Cap3 中断向量
CAP3_CLR .set 04H ; Cap3 中断标志清除
_c_int4
MAR *,AR1 ; 保护断点
MAR *+ ; 指向未使用的位置
SST #1, *+ ; 保存 ST1
SST #0, *+ ; 保存 ST0
SACH *+ ; 保存 acc 高16位
SACL *+ ; 保存 acc 低16位并将指针指向未用的位置
;如果需要可以保存更多现场信息
.if x243 | x2407
LDP #PIVR>>7 ; 设置数据页
LACC PIVR ; 加载外围中断向量地址偏移量
.endif
.if x240
LDP #EVIVRC>>7
lACC EVIVRC
.endif
SUB #CAP3_ID ; 判断是否Cap3中断
BCND CAP3_INT,EQ ; 为零则转到PDPISR
CALL PHANTOM ; 否则转到哑中断
B REST_INT4 ; 返回
CAP3_INT
.if x243 | x2407
LDP #EVIFRC>>7
SPLK #CAP3_CLR,EVIFRC ; 清 Cap3 中断标志
.endif
CALL QEP_INDEX_ISR_DRV ; QEP 同步程序
;=========================================================
;End 主ISR INT4 -事件管理器 C 组中断服务程序代码结束
;=========================================================
;断点恢复
REST_INT4 ;如果必要可恢复更多变量
MAR *, AR1 ; 激活堆栈指针
MAR *- ; 指向栈顶
LACL *- ; 恢复 Acc 低16位
add *-,16 ; 恢复 Acc 高16位
LST #0, *- ; 恢复 ST0
LST #1, *- ; 恢复 ST1 和栈指针
EINT
RET ; 返回
;==============================================================================
; I S R - PHANTOM
;
; 功能描述: 哑中断服务程序
;
; 修改记录:
; 最后更新日期: 2005.6.23
;==============================================================================
PHANTOM B PHANTOM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -