?? zhtest1.asm
字號:
;==============================================================================
; 控制系統(tǒng)名稱: Zhtest1
;
; 程序文件名: Zhtest1.ASM
;
; 功能描述: 帶速度傳感器的三相異步電動機(jī)磁場定向控制
;
; 公司: 達(dá)盛科技
;
; 目標(biāo)板:x2407
;=====================================================================================
; 修改記錄:
;-------------------------------------------------------------------------------------
; 最后修改日期:2005.07.20 版本號: Ver.1.0
;==============================================================================
;******************************************************************************
; 系統(tǒng)選項(xiàng)
;******************************************************************************
real_time .set 1 ; '1' 代表實(shí)時模式, '0'代表非實(shí)時模式
* 選擇編譯選項(xiàng)
step1 .set 0 ; 磁鏈給定和正弦信號發(fā)生
step2 .set 1 ; 開環(huán)啟動,功率單元測試
step3 .set 0 ; 電流和速度測量模塊測試
step4 .set 0 ; 電流調(diào)節(jié)器功能測試
step5 .set 0 ; 電流磁鏈模塊插入及功能測試
step6 .set 0 ; 速度環(huán)插入及完整系統(tǒng)功能測試
PWM_PERIOD .set 100 ; PWM 周期設(shè)置,單位是微秒 (10KHz)
;T1PER_ .set PWM_PERIOD*10 ; *1000nS/(2*50nS)
T1PER_ .set PWM_PERIOD*20 ; *1000nS/(2*25nS)
;******************************************************************************
* 選擇編譯內(nèi)部選項(xiàng)
.if (step4)
constant_current .set 0
; Theta_p/Theta_ip 開關(guān) ('1'代表連接到0,'0'代表連接到'rmp_out').
.endif
.if (step5)
test_cur_mod .set 0
; Theta_p/Theta_ip 開關(guān) ('1'代表連接到'rmp_out','0'代表連接到'theta_cur_mod').
.endif
;-----------------------------------------------------------------------------
; 外部參量聲明
;-----------------------------------------------------------------------------
.include "x24x_app.h"
.global MON_RT_CNFG
.ref SYS_INIT
.ref RAMP_GEN, RAMP_GEN_INIT ;磁鏈給定子程序
.ref rmp_gain, rmp_offset, rmp_freq ;輸入?yún)⒘? .ref step_angle_max ;輸入?yún)⒘? .ref rmp_out ;輸出參量
.ref I_PARK, I_PARK_INIT ;PARK逆變換子程序
.ref ipark_D, ipark_Q, theta_ip ;輸入?yún)⒘? .ref ipark_d, ipark_q ;輸出參量
.ref SVGEN_DQ,SVGEN_DQ_INIT ;矢量計算子程序
.ref Ualfa,Ubeta ;輸入?yún)⒘? .ref Ta,Tb,Tc ;輸出參量
.ref FC_PWM_DRV,FC_PWM_DRV_INIT ;PWM波形產(chǎn)生子程序
.ref Mfunc_c1,Mfunc_c2,Mfunc_c3,Mfunc_p ;輸入?yún)⒘? .ref n_period ;輸出參量
.ref ILEG2DRV, ILEG2DRV_INIT ;電流采樣子程序
.ref Ia_gain,Ib_gain,Ia_offset,Ib_offset ;輸入?yún)⒘? .ref Ia_out, Ib_out,V_ref ;輸出參量
.ref CLARKE, CLARKE_INIT ;CLARKE變換子程序
.ref clark_a, clark_b ;輸入?yún)⒘? .ref clark_d, clark_q ;輸出參量
.ref PARK, PARK_INIT ;PARK變換子程序
.ref park_d, park_q, theta_p ;輸入?yún)⒘? .ref park_D, park_Q ;輸出參量
.ref QEP_THETA_DRV,QEP_THETA_DRV_INIT ;編碼器脈沖計數(shù)子程序
.ref polepairs,cal_angle,mech_scale ;輸入?yún)⒘? .ref theta_elec,theta_mech,dir_QEP ;輸出參量
.ref QEP_INDEX_ISR_DRV ;編碼器復(fù)位子程序
.ref index_sync_flg,QEP_cnt_idx ;輸出參量
.ref SPEED_FRQ, SPEED_FRQ_INIT ;速度計算子程序
.ref shaft_angle, direction ;輸入?yún)⒘? .ref speed_frq, speed_frq_rpm ;輸出參量
.ref pid_reg_id,pid_reg_id_init ;d軸電流調(diào)節(jié)子程序
.ref id_fdb,id_ref,Kp_d,Ki_d,Kc_d ;輸入變量
.ref ud_int ;輸入?yún)⒘? .ref ud_out ;輸出參量
.ref pid_reg_iq,pid_reg_iq_init ;q軸電流調(diào)節(jié)子程序
.ref iq_fdb,iq_ref,Kp_q,Ki_q,Kc_q ;輸入?yún)⒘? .ref uq_int ;輸入?yún)⒘? .ref uq_out ;輸出參量
.ref CURRENT_MODEL,CURRENT_MODEL_INIT ;電流磁鏈模型子程序
.ref i_cur_mod_D,i_cur_mod_Q ;輸入?yún)⒘?
.ref spd_cur_mod ;輸入?yún)⒘? .ref theta_cur_mod ;輸出參量
.ref pid_reg_spd,pid_reg_spd_init ;速度調(diào)節(jié)子程序
.ref spd_fdb,spd_ref ;輸入?yún)⒘? .ref spd_out ;輸出參量
.ref DATA_LOG_INIT,DATA_LOG ;圖形顯示數(shù)據(jù)獲取子程序
.ref dlog_iptr1,dlog_iptr2 ;輸出參量
;-----------------------------------------------------------------------------
; 輸入?yún)⒘柯暶?;-----------------------------------------------------------------------------
.def GPR0 ;通用寄存器
.bss GPR0,1 ;通用寄存器 ;為未初始化變量 在.bss段內(nèi)保留空間
.bss my_iq_ref,1 ;參考轉(zhuǎn)矩輸入
.bss my_id_ref,1 ;參考勵磁輸入
.bss speed_reference,1 ;參考速度輸入
.bss isr_ticker,1
.bss data_tmp,1 ;臨時變量
;==============================================================================
;向量表( 包括實(shí)時模式監(jiān)控程序 )
;==============================================================================
.include "c200mnrt.i" ; 條件編譯選項(xiàng)
.sect "vectors"
.def _c_int0
.def _c_int4 ; int4-EV group C dispatcher/service
RESET B _c_int0 ; 00
INT1 B PHANTOM ; 02
INT2 B T1_PERIOD_ISR ; 04
INT3 B PHANTOM ; 06
INT4 B _c_int4 ; 08
INT5 B PHANTOM ; 0A
INT6 B PHANTOM ; 0C
.include "rtvecs.h"
; Note : 上面的 include 行必須放在用戶可設(shè)置的變量之后
;==============================================================================
; 主程序代碼
;==============================================================================
.text;text[value],value 為(section programe counter spc)的起始值,缺省為0
_c_int0:
CALL SYS_INIT
CALL FC_PWM_DRV_INIT ;初始化定時器
;
CALL DATA_LOG_INIT ;
.if (step1)
CALL RAMP_GEN_INIT
CALL I_PARK_INIT
.endif
.if (step2)
CALL RAMP_GEN_INIT
CALL I_PARK_INIT
CALL SVGEN_DQ_INIT
.endif
.if (step3)
CALL RAMP_GEN_INIT
CALL I_PARK_INIT
CALL SVGEN_DQ_INIT
CALL ILEG2DRV_INIT
CALL CLARKE_INIT
CALL PARK_INIT
CALL QEP_THETA_DRV_INIT
CALL SPEED_FRQ_INIT
.endif
.if (step4)
CALL RAMP_GEN_INIT
CALL I_PARK_INIT
CALL SVGEN_DQ_INIT
CALL ILEG2DRV_INIT
CALL CLARKE_INIT
CALL PARK_INIT
CALL QEP_THETA_DRV_INIT
CALL SPEED_FRQ_INIT
CALL pid_reg_id_init
CALL pid_reg_iq_init
.endif
.if (step5)
CALL RAMP_GEN_INIT
CALL I_PARK_INIT
CALL SVGEN_DQ_INIT
CALL ILEG2DRV_INIT
CALL CLARKE_INIT
CALL PARK_INIT
CALL QEP_THETA_DRV_INIT
CALL SPEED_FRQ_INIT
CALL pid_reg_id_init
CALL pid_reg_iq_init
CALL CURRENT_MODEL_INIT
.endif
.if (step6)
CALL I_PARK_INIT
CALL SVGEN_DQ_INIT
CALL ILEG2DRV_INIT
CALL CLARKE_INIT
CALL PARK_INIT
CALL QEP_THETA_DRV_INIT
CALL SPEED_FRQ_INIT
CALL pid_reg_id_init
CALL pid_reg_iq_init
CALL CURRENT_MODEL_INIT
CALL pid_reg_spd_init
.endif
;---實(shí)時模式選項(xiàng)---------------
.if (real_time)
CALL MON_RT_CNFG
.endif
;----------------------------------
;-----------------------------------
; 用戶初始化參量輸入
;----------------------------------
LDP #n_period
SPLK #T1PER_,n_period ;初始化 PWM 頻率10kHz
LDP #rmp_freq
SPLK #2A00h,rmp_freq ;磁場頻率設(shè)定
LDP #my_iq_ref
SPLK #0000h,my_iq_ref ;轉(zhuǎn)矩設(shè)定
LDP #my_id_ref
SPLK #2400H,my_id_ref ;勵磁設(shè)定
LDP #speed_reference
splk #600h,speed_reference ;速度設(shè)定
.if (step6)
POINT_B0
SPLK #2400H,my_id_ref ;勵磁設(shè)定
.endif
;----------------------------------------------------------
; 系統(tǒng)中斷初始化
;----------------------------------------------------------
;事件管理器
POINT_EV
SPLK #0000001000000000b,IMRA ;使能 T1 定時器下溢中斷
SPLK #0000000000000100b,IMRC ;使能 CAP3 中斷 (編碼器z信號)
;||||!!!!||||!!!!
;5432109876543210
SPLK #0FFFFh,IFRA ; 清所有 A 組中斷標(biāo)志
SPLK #0FFFFh,IFRB ; 清所有 B 組中斷標(biāo)志
SPLK #0FFFFh,IFRC ; 清所有 C 組中斷標(biāo)志
;C2xx Core
POINT_PG0
;---實(shí)時模式選項(xiàng) --------------------------------------------------
.if (real_time)
SPLK #0000000001001010b,IMR ;En Int lvl 3,7 (T2 ISR)
;5432109876543210
.endif
.if (real_time != 1)
SPLK #0000000000001010b,IMR ;En Int lvl 4 (CAP3/QEP ISR)
;||||!!!!||||!!!!
;5432109876543210
.endif
SPLK #0FFFFh, IFR ;清所有未響應(yīng)中斷
EINT ;使能中斷
POINT_B0
;-----------------------------------------------------------------------
;使能 PWM 信號
;-----------------------------------------------------------------------
POINT_PF2
LACC OCRC
AND #03FFFh
SACL OCRC ;選擇 IOPF6 第二功能
LACC PFDATDIR
OR #04000h
SACL PFDATDIR ;將IOPF6設(shè)置為輸出
LACC PFDATDIR
AND #0FFBFh ;IOPF6 為低使能 PWM
; OR #00040h ;IOPF6 為高禁止 PWM
SACL PFDATDIR
;======================================================
MAIN: ;系統(tǒng)主程序循環(huán)
;======================================================
M_1 NOP
NOP
NOP
CLRC XF
B MAIN
;======================================================
;===========================================================================
; 程序名: T1_PERIOD_ISR 程序類型: ISR
;
; 功能描述:斷點(diǎn)保護(hù)
;
; 公司: 達(dá)盛科技
; 修改記錄:
; 最后修改日期: 2005.7.10
;===========================================================================
T1_PERIOD_ISR:
;斷點(diǎn)保護(hù)
MAR *,AR1 ; AR1 作為棧指針
MAR *+ ; 指針加1
SST #1, *+ ; 保存 ST1
SST #0, *+ ; 保存 ST0
SACH *+ ; 保存 acc 高16位
SACL * ; 保存 acc 低16位
POINT_EV
SPLK #0FFFFh,IFRA; 清所有A組中斷標(biāo)志 (T1 ISR)
SETC XF
SETC SXM ; 允許符號擴(kuò)展
CLRC OVM ; 清除溢出標(biāo)志
POINT_B0
; 校驗(yàn) ISR
LACC isr_ticker
ADD #1
SACL isr_ticker
;=========================================================
;主循環(huán)中斷服務(wù)程序開始
;=========================================================
.if (step1)
; Ramp 產(chǎn)生模塊
CALL RAMP_GEN
; Park 逆變換模塊
LDP #theta_ip
BLDD #rmp_out,theta_ip
CALL I_PARK
; PWM 模塊
CALL FC_PWM_DRV ;設(shè)置 PWM 頻率為10kHz
.endif
******************************************
.if (step2)
; Ramp產(chǎn)生模塊
CALL RAMP_GEN
; Park逆變換模塊
LDP #theta_ip
BLDD #rmp_out,theta_ip
CALL I_PARK
; 電壓空間是兩計算模塊
LDP #Ualfa
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -