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

📄 pmsm32.asm

📁 本程序来自TI公司网站原程序,其功能是通过传统的矢量控制算法来实现对永磁同步电机的控制,矢量控制采用双闭环结构
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;>>>> 	        speed.K2_fr = 32361;
;>>>> 	        speed.K3_fr = 407;
;>>>> 	        speed.rpm_max = 6000;
;>>>> 	       	ilg2_vdc.init(&ilg2_vdc);
;>>>> 	        dac.qptr0=&ilg2_vdc.Imeas_a;
;>>>> 	        dac.qptr1=&sfoc.svgen.vb;
;>>>> 	        dac.qptr2=&sfoc.smo.thetae;
;>>>> 	        dac.qptr3=&sfoc.svgen.vc;
;>>>> 	#endif /* (BUILDLEVEL==LEVEL7) */  
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
	LALK	_sfoc+128
	SACL	_dac+3
	.line	542
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        while(1)             /* Nothing running in the background at present */
	SPLK	#-1,* 
L3:
	.line	550
	B	L3
	.endfunc	655,000000000H,1

	.sym	_c_int02,_c_int02,32,2,0
	.globl	_c_int02

	.func	658
;>>>> 	void interrupt c_int02()
******************************************************
* FUNCTION DEF : _c_int02
******************************************************
_c_int02:
	CALL	I$$SAVE
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

	.line	3
;>>>> 	     asm("      CLRC     XF ");
      CLRC     XF 
	.line	5
;>>>> 	     isr_ticker++;    
;>>>> 	#if (BUILDLEVEL==LEVEL1)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
	LDPK	_isr_ticker
	LAC	_isr_ticker
	ADDK	1
	SACL	_isr_ticker
	.line	13
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
	LARK	AR3,29743
	MAR	* ,AR3
	SPLK	#-1,* ,AR1
	.line	19
;>>>> 	        drive.calc(&drive);
	LALK	_drive+0
	SACL	*+
	LAC	_drive+2
	CALA
	MAR	*-
	.line	25
;>>>> 	        SFOC_TI_Run(&sfoc); 
	LALK	_sfoc+0
	SACL	*+
	CALL	_SFOC_TI_Run
	MAR	*-
	.line	31
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
	LDPK	_sfoc+32
	BLDD	_sfoc+32,#_pwm+2
	.line	32
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
	BLKD	#_sfoc+33,_pwm+3
	.line	33
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
	BLKD	#_sfoc+34,_pwm+4
	.line	34
;>>>> 	        pwm.update(&pwm);
	LALK	_pwm+0
	SACL	*+
	LAC	_pwm+6
	CALA
	MAR	*-
	.line	39
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL1 */
;>>>> 	#if (BUILDLEVEL==LEVEL2)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        drive.calc(&drive);
;>>>> 	        SFOC_TI_Run(&sfoc); 
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2_vdc.read(&ilg2_vdc);
;>>>> 		  	sfoc.current_abc.a = ilg2_vdc.Imeas_a;
;>>>> 		  	sfoc.current_abc.b = ilg2_vdc.Imeas_b;
;>>>> 		  	sfoc.current_abc.c = ilg2_vdc.Imeas_c;        
;>>>> 	        sfoc.Vbus = ilg2_vdc.Vdc_meas;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL2 */
;>>>> 	#if (BUILDLEVEL==LEVEL3)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        drive.calc(&drive);
;>>>> 	        SFOC_TI_Run(&sfoc); 
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2_vdc.read(&ilg2_vdc);
;>>>> 		  	sfoc.current_abc.a = ilg2_vdc.Imeas_a;
;>>>> 		  	sfoc.current_abc.b = ilg2_vdc.Imeas_b;
;>>>> 		  	sfoc.current_abc.c = ilg2_vdc.Imeas_c;        
;>>>> 	        sfoc.Vbus = ilg2_vdc.Vdc_meas;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL3 */
;>>>> 	#if (BUILDLEVEL==LEVEL4)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        drive.calc(&drive);
;>>>> 	        SFOC_TI_Run(&sfoc); 
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2_vdc.read(&ilg2_vdc);
;>>>> 		  	sfoc.current_abc.a = ilg2_vdc.Imeas_a;
;>>>> 		  	sfoc.current_abc.b = ilg2_vdc.Imeas_b;
;>>>> 		  	sfoc.current_abc.c = ilg2_vdc.Imeas_c;        
;>>>> 	        sfoc.Vbus = ilg2_vdc.Vdc_meas;
;>>>> 	        qep.calc(&qep);
;>>>> 	        sfoc.shaft_theta_elec = qep.theta_elec;
;>>>> 	        sfoc.shaft_direction = qep.dir_QEP;
;>>>> 	        speed.theta_elec = qep.theta_elec;
;>>>> 	        speed.calc(&speed);             
;>>>> 	        sfoc.Mea_spd = speed.speed_frq;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL4 */
;>>>> 	#if (BUILDLEVEL==LEVEL5)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        drive.calc(&drive);
;>>>> 	        SFOC_TI_Run(&sfoc); 
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2_vdc.read(&ilg2_vdc);
;>>>> 		  	sfoc.current_abc.a = ilg2_vdc.Imeas_a;
;>>>> 		  	sfoc.current_abc.b = ilg2_vdc.Imeas_b;
;>>>> 		  	sfoc.current_abc.c = ilg2_vdc.Imeas_c;        
;>>>> 	        sfoc.Vbus = ilg2_vdc.Vdc_meas;
;>>>> 	        qep.calc(&qep);
;>>>> 	        sfoc.shaft_theta_elec = qep.theta_elec;
;>>>> 	        sfoc.shaft_direction = qep.dir_QEP;
;>>>> 	        speed.theta_elec = qep.theta_elec;
;>>>> 	        speed.calc(&speed);             
;>>>> 	        sfoc.Mea_spd = speed.speed_frq;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL5 */
;>>>> 	#if (BUILDLEVEL==LEVEL6)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        drive.calc(&drive);
;>>>> 	        SFOC_TI_Run(&sfoc); 
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2_vdc.read(&ilg2_vdc);
;>>>> 		  	sfoc.current_abc.a = ilg2_vdc.Imeas_a;
;>>>> 		  	sfoc.current_abc.b = ilg2_vdc.Imeas_b;
;>>>> 		  	sfoc.current_abc.c = ilg2_vdc.Imeas_c;        
;>>>> 	        sfoc.Vbus = ilg2_vdc.Vdc_meas;
;>>>> 	        qep.calc(&qep);
;>>>> 	        sfoc.shaft_theta_elec = qep.theta_elec;
;>>>> 	        sfoc.shaft_direction = qep.dir_QEP;
;>>>> 	        speed.theta_elec = qep.theta_elec;
;>>>> 	        speed.calc(&speed);             
;>>>> 	        sfoc.Mea_spd = speed.speed_frq;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL6 */
;>>>> 	#if (BUILDLEVEL==LEVEL7)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        drive.calc(&drive);
;>>>> 	        SFOC_TI_Run(&sfoc); 
;>>>> 	        pwm.mfunc_c1 = sfoc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = sfoc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = sfoc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2_vdc.read(&ilg2_vdc);
;>>>> 		  	sfoc.current_abc.a = ilg2_vdc.Imeas_a;
;>>>> 		  	sfoc.current_abc.b = ilg2_vdc.Imeas_b;
;>>>> 		  	sfoc.current_abc.c = ilg2_vdc.Imeas_c;        
;>>>> 	        sfoc.Vbus = ilg2_vdc.Vdc_meas;
;>>>> 	        qep.calc(&qep);
;>>>> 	        sfoc.shaft_theta_elec = qep.theta_elec;
;>>>> 	        sfoc.shaft_direction = qep.dir_QEP;
;>>>> 	        speed.theta_elec = qep.theta_elec;
;>>>> 	        speed.calc(&speed);             
;>>>> 	        sfoc.Mea_spd = speed.speed_frq;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL7 */
	LALK	_dac+0
	SACL	*+
	LDPK	_dac+5
	LAC	_dac+5
	CALA
	MAR	*-
	.line	418
;>>>> 	       	sfoc.speed_ref_rpm = mul_q(sfoc.speed_ref,15,6000,0,0);
	LACK	0
	SACL	*+
	SACL	*+
	LACK	6000
	SACL	*+
	LACK	15
	SACL	*+
	BLKD	_sfoc+3,*+
	CALL	_mul_q
	SBRK	5
	LDPK	_sfoc+4
	SACL	_sfoc+4
	.line	421
;>>>> 	  	asm("    SETC     XF ");   
    SETC     XF 
EPI0_2:
	.line	423
	SBRK	1
	B	I$$REST,AR1   ;and return

	.endfunc	1080,000000000H,1

	.sym	_c_int04,_c_int04,32,2,0
	.globl	_c_int04

	.func	1090
;>>>> 	void interrupt c_int04()
******************************************************
* FUNCTION DEF : _c_int04
******************************************************
_c_int04:
	CALL	I$$SAVE
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

	.line	9
;>>>> 	        qep.indexevent(&qep);
	LALK	_qep+0
	SACL	*+
	LDPK	_qep+11
	LAC	_qep+11
	CALA
	MAR	*-
EPI0_3:
	.line	11
	SBRK	1
	B	I$$REST,AR1   ;and return

	.endfunc	1100,000000000H,1

	.sym	_RstSystem,_RstSystem,32,2,0
	.globl	_RstSystem

	.func	1103
;>>>> 	void RstSystem(void)
******************************************************
* FUNCTION DEF : _RstSystem
******************************************************
_RstSystem:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+,AR0

	.line	8
;>>>> 	        WSGR=WAIT_STATES;         /* Initialize Wait State Generator         */
	LACK	64
	SACL	* 
	OUT	* ,0ffffh,AR1
	.line	9
;>>>> 	        disable_ints();           /* Make sure the interrupts are disabled   */
	CALL	_disable_ints
	.line	10
;>>>> 	        wdog.disable();           /* Vccp/Wddis pin/bit must be high         */
	LDPK	_wdog
	LAC	_wdog
	CALA
	.line	11
;>>>> 	        IMR=0x0A;                 /* Set up interrupt mask to enable INT2    
;>>>> 	                                     until an explicit enable.               */
;>>>> 	#if (TARGET==F243)
;>>>> 	        SCSR=0x40c0;              /* Init SCSR */
;>>>> 	        EVIMRA=0x0201;            /* Enable the timer 1 underflow/ CAP3 (index QEP) interrupts  */
;>>>> 	#endif
;>>>> 	#if (TARGET==F2407)
	LARK	AR3,4
	LACK	10
	MAR	* ,AR3
	SACL	* 
	.line	25
;>>>> 	        SCSR1=0xc;                /* Init SCSR */
	LARK	AR4,28696
	ADRK	8
	MAR	* ,AR4
	SAR	AR3,* ,AR5
	.line	26
;>>>> 	        EVAIMRA=0x0201;           /* Enable the timer 1 underflow/ CAP3 (index QEP) interrupts  */
;>>>> 	#endif
	LARK	AR5,29740
	SPLK	#513,* ,AR1
EPI0_4:
	.line	29
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	1131,000000000H,1

	.sym	_phantom,_phantom,32,2,0
	.globl	_phantom

	.func	1133
;>>>> 	void interrupt phantom(void)
;>>>> 		static int phantom_count;
******************************************************
* FUNCTION DEF : _phantom
******************************************************
_phantom:
	CALL	I$$SAVE
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+


	.sym	_phantom_count,_phantom_count$1,4,3,16
	.line	5
;>>>> 		phantom_count ++;
	LDPK	_phantom_count$1
	LAC	_phantom_count$1
	ADDK	1
	SACL	_phantom_count$1
EPI0_5:
	.line	14
	SBRK	1
	B	I$$REST,AR1   ;and return

	.endfunc	1146,000000000H,1

	.sym	_rtmon_init,_rtmon_init,32,2,0
	.globl	_rtmon_init

	.func	1152
;>>>> 	void rtmon_init(void)
******************************************************
* FUNCTION DEF : _rtmon_init
******************************************************
_rtmon_init:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

	.line	3
;>>>> 	    asm("       CALL    MON_RT_CNFG ");
       CALL    MON_RT_CNFG 
EPI0_6:
	.line	4
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	1155,000000000H,1

	.sym	_isr_ticker,_isr_ticker,4,2,16
	.globl	_isr_ticker
*****************************************************
* UNDEFINED REFERENCES                              *
*****************************************************
	.global	_enable_ints
	.global	I$$SAVE
	.global	I$$REST
	.global	_disable_ints
	.end

⌨️ 快捷键说明

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