⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 foc_ti.asm

📁 本程序来自TI公司网站原程序,其功能是通过传统的矢量控制算法来实现对永磁同步电机的控制,矢量控制采用双闭环结构
💻 ASM
字号:
*******************************************************
* TMS320C24xx ANSI C Codegen Version 7.02       
*******************************************************
;	dspac -i../../../../rtmon/ -i../include -i../../../../lib/dmclib/clib/include -i../../../../lib/drvlib/clib/include -v2xx -iC:/t
;	dspopt NOT RUN
;	dspcg -o -v2xx -o C:\WINDOWS\TEMP\foc_ti.if C:\WINDOWS\TEMP\foc_ti.asm C:\WINDOWS\TEMP\foc_ti.tmp 
	.port
	.file	"foc_ti.c"
	.file	"../../../../lib/dmclib/clib/include\svgen.h"

	.stag	.fake0,144
	.member	_gain,0,4,8,16
	.member	_freq,16,4,8,16
	.member	_freq_max,32,4,8,16
	.member	_alpha,48,4,8,16
	.member	_sector,64,4,8,16
	.member	_va,80,4,8,16
	.member	_vb,96,4,8,16
	.member	_vc,112,4,8,16
	.member	_calc,128,148,8,16
	.eos
	.sym	_SVGENMF,0,8,13,144,.fake0
	.sym	_SVGENMF_handle,0,24,13,16,.fake0

	.stag	.fake1,96
	.member	_d,0,4,8,16
	.member	_q,16,4,8,16
	.member	_va,32,4,8,16
	.member	_vb,48,4,8,16
	.member	_vc,64,4,8,16
	.member	_calc,80,148,8,16
	.eos
	.sym	_SVGENDQ,0,8,13,96,.fake1
	.sym	_SVGENDQ_handle,0,24,13,16,.fake1
	.globl	_svgenmf_calc
	.globl	_svgendq_calc
	.file	"../../../../lib/dmclib/clib/include\pid_reg3.h"

	.stag	.fake2,304
	.member	_pid_ref_reg3,0,4,8,16
	.member	_pid_fdb_reg3,16,4,8,16
	.member	_e_reg3,32,4,8,16
	.member	_Kp_reg3,48,4,8,16
	.member	_up_reg3,64,4,8,16
	.member	_ui_hi_reg3,80,4,8,16
	.member	_ui_lo_reg3,96,4,8,16
	.member	_ud_lo_reg3,112,4,8,16
	.member	_ud_hi_reg3,128,4,8,16
	.member	_uprsat_reg3,144,4,8,16
	.member	_pid_out_max,160,4,8,16
	.member	_pid_out_min,176,4,8,16
	.member	_pid_out_reg3,192,4,8,16
	.member	_saterr_reg3,208,4,8,16
	.member	_Ki_reg3,224,4,8,16
	.member	_Kc_reg3,240,4,8,16
	.member	_Kd_reg3,256,4,8,16
	.member	_up1_reg3,272,4,8,16
	.member	_calc,288,148,8,16
	.eos
	.sym	_PIDREG3,0,8,13,304,.fake2
	.globl	_pid_reg3_calc
	.file	"../../../../lib/dmclib/clib/include\rmp_cntl.h"

	.stag	.fake3,128
	.member	_target_value,0,4,8,16
	.member	_rmp_dly_max,16,4,8,16
	.member	_rmp_lo_limit,32,4,8,16
	.member	_rmp_hi_limit,48,4,8,16
	.member	_rmp_delay_cntl,64,4,8,16
	.member	_setpt_value,80,4,8,16
	.member	_s_eq_t_flg,96,4,8,16
	.member	_calc,112,148,8,16
	.eos
	.sym	_RMPCNTL,0,8,13,128,.fake3
	.globl	_rmp_cntl_calc
	.file	"../../../../lib/dmclib/clib/include\rampgen.h"

	.stag	.fake4,112
	.member	_rmp_freq,0,4,8,16
	.member	_step_angle_max,16,4,8,16
	.member	_angle_rg,32,4,8,16
	.member	_rmp_gain,48,4,8,16
	.member	_rmp_out,64,4,8,16
	.member	_rmp_offset,80,4,8,16
	.member	_calc,96,148,8,16
	.eos
	.sym	_RAMPGEN,0,8,13,112,.fake4
	.sym	_RAMPGEN_handle,0,24,13,16,.fake4
	.globl	_rampgen_calc
	.file	"../../../../lib/dmclib/clib/include\speed_fr.h"

	.stag	.fake5,144
	.member	_theta_elec,0,4,8,16
	.member	_K1_fr,16,4,8,16
	.member	_theta_old,32,4,8,16
	.member	_K2_fr,48,4,8,16
	.member	_speed_frq,64,4,8,16
	.member	_K3_fr,80,4,8,16
	.member	_rpm_max,96,4,8,16
	.member	_speed_rpm,112,4,8,16
	.member	_calc,128,148,8,16
	.eos
	.sym	_SPEED_MEAS,0,8,13,144,.fake5
	.globl	_speed_frq
	.file	"../include\foc_ti.h"

	.stag	.fake6,48
	.member	_a,0,4,8,16
	.member	_b,16,4,8,16
	.member	_c,32,4,8,16
	.eos
	.sym	_triad,0,8,13,48,.fake6

	.stag	.fake7,32
	.member	_d,0,4,8,16
	.member	_q,16,4,8,16
	.eos
	.sym	_dq,0,8,13,32,.fake7

	.stag	.fake8,48
	.member	_D,0,4,8,16
	.member	_Q,16,4,8,16
	.member	_theta,32,4,8,16
	.eos
	.sym	_DQt,0,8,13,48,.fake8

	.stag	.fake9,1696
	.member	_GPR0,0,4,8,16
	.member	_GPR1,16,4,8,16
	.member	_GPR2,32,4,8,16
	.member	_speed_ref,48,4,8,16
	.member	_speed_ref_rpm,64,4,8,16
	.member	_Id_ref,80,4,8,16
	.member	_Iq_ref,96,4,8,16
	.member	_Vd_testing,112,4,8,16
	.member	_Vq_testing,128,4,8,16
	.member	_lockrtr_flg,144,4,8,16
	.member	_Mea_spd,160,4,8,16
	.member	_shaft_theta_elec,176,4,8,16
	.member	_shaft_direction,192,4,8,16
	.member	_current_abc,208,8,8,48,.fake6
	.member	_current_dq,256,8,8,32,.fake7
	.member	_current_DQ,288,8,8,32,.fake7
	.member	_current_dqt,320,8,8,48,.fake8
	.member	_voltage_dq,368,8,8,32,.fake7
	.member	_voltage_DQt,400,8,8,48,.fake8
	.member	_svgen,448,8,8,96,.fake1
	.member	_pid_id,544,8,8,304,.fake2
	.member	_pid_iq,848,8,8,304,.fake2
	.member	_pid_spd,1152,8,8,304,.fake2
	.member	_rmpc,1456,8,8,128,.fake3
	.member	_rg,1584,8,8,112,.fake4
	.eos
	.sym	_FOC_TI,0,8,13,1696,.fake9
	.sym	_FOC_TI_handle,0,24,13,16,.fake9
	.globl	_FOC_TI_Init
	.globl	_FOC_TI_Run
	.globl	_mul_q
	.file	"foc_ti.c"
	.text

	.sym	_FOC_TI_Init,_FOC_TI_Init,32,2,0
	.globl	_FOC_TI_Init

	.func	32
;>>>> 	void FOC_TI_Init(FOC_TI_handle v)
******************************************************
* FUNCTION DEF : _FOC_TI_Init
******************************************************
_FOC_TI_Init:

LF1	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+,AR2

	.sym	_v,-3+LF1,24,9,16,.fake9
	.line	2
	.line	17
;>>>> 	    v->rg.step_angle_max = 874;   /* This is based on 15kHz sampling frequency */     
	LARK	AR2,-3+LF1
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	100
	SPLK	#874,* 
	.line	22
;>>>> 	    v->rmpc.rmp_dly_max = 50;        
	LACK	50
	SBRK	8
	SACL	*+
	.line	23
;>>>> 	    v->rmpc.rmp_lo_limit = 0x8000;        
	SPLK	#-32768,*+
	.line	24
;>>>> 	    v->rmpc.rmp_hi_limit = 0x7FFF;   
	SPLK	#32767,* ,AR1
EPI0_1:
	.line	26
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	57,000000000H,1

	.sym	_FOC_TI_Run,_FOC_TI_Run,32,2,0
	.globl	_FOC_TI_Run

	.func	245
;>>>> 	void FOC_TI_Run(FOC_TI_handle v)
******************************************************
* FUNCTION DEF : _FOC_TI_Run
******************************************************
_FOC_TI_Run:

LF2	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+,AR2

	.sym	_v,-3+LF2,24,9,16,.fake9
	.line	2
	.line	7
;>>>> 	    v->rmpc.target_value = v->speed_ref;  
	LARK	AR2,-3+LF2
	MAR	*0+
	LAR	AR3,* 
	LAR	AR4,* ,AR3
	ADRK	3
	LAC	* ,AR4
	ADRK	91
	SACL	* ,AR2
	.line	12
;>>>> 	    v->rmpc.calc((void *)&v->rmpc); 	/* Call RMPCNTL compute function */
	LAC	* ,AR1
	ADDK	91
	SACL	*+,AR3
	ADRK	95
	LAC	* ,AR1
	CALA
	MAR	*-,AR2
	.line	17
;>>>> 	    v->rg.rmp_freq = v->rmpc.setpt_value;  
	LARK	AR2,-3+LF2
	MAR	*0+
	LAR	AR3,* 
	LAR	AR4,* ,AR3
	ADRK	96
	LAC	* ,AR4
	ADRK	99
	SACL	* ,AR2
	.line	22
;>>>> 	    v->rg.calc((void *)&v->rg); 	/* Call RAMPGEN compute function */
	LAC	* ,AR1
	ADDK	99
	SACL	*+,AR3
	ADRK	9
	LAC	* ,AR1
	CALA
	MAR	*-,AR2
	.line	27
;>>>> 	    v->voltage_DQt.D = v->Vd_testing;
	LARK	AR2,-3+LF2
	MAR	*0+
	LAR	AR3,* 
	LAR	AR4,* ,AR3
	ADRK	7
	LAC	* ,AR4
	ADRK	25
	SACL	*+,AR3
	.line	28
;>>>> 	    v->voltage_DQt.Q = v->Vq_testing;
	MAR	*+
	LAC	* ,AR4
	SACL	* ,AR3
	.line	29
;>>>> 	    v->voltage_DQt.theta = v->rg.rmp_out;
	ADRK	95
	LAC	* ,AR4
	MAR	*+
	SACL	* ,AR2
	.line	34
;>>>> 		ipark((void *)&v->voltage_DQt,(void *)&v->voltage_dq);
	LAC	* ,AR1
	ADDK	23
	SACL	*+
	ADDK	2
	SACL	*+
	CALL	_ipark
	SBRK	2
	.line	39
;>>>> 	    v->svgen.d = v->voltage_dq.d;      
	MAR	* ,AR2
	LARK	AR2,-3+LF2
	MAR	*0+
	LAR	AR3,* 
	LAR	AR4,* ,AR3
	ADRK	23
	LAC	* ,AR4
	ADRK	28
	SACL	*+,AR3
	.line	40
;>>>> 		v->svgen.q = v->voltage_dq.q;      
	MAR	*+
	LAC	* ,AR4
	SACL	* ,AR2
	.line	45
;>>>> 	    v->svgen.calc((void *)&v->svgen); 	/* Call SVGENDQ compute function */
	LAC	* ,AR1
	ADDK	28
	SACL	*+,AR3
	ADRK	9
	LAC	* ,AR1
	CALA
	MAR	*-
EPI0_2:
	.line	47
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	291,000000000H,1
*****************************************************
* UNDEFINED REFERENCES                              *
*****************************************************
	.global	_ipark
	.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -