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

📄 pmsm31.asm

📁 本程序来自TI公司网站原程序,其功能是通过传统的矢量控制算法来实现对永磁同步电机的控制,矢量控制采用双闭环结构
💻 ASM
📖 第 1 页 / 共 2 页
字号:

	.sym	_main,_main,32,2,0
	.globl	_main

	.func	103
;>>>> 	void main()   
******************************************************
* FUNCTION DEF : _main
******************************************************
_main:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

	.line	6
;>>>> 	        RstSystem();
;>>>> 	#if (BUILDLEVEL==LEVEL1)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        pwm.period_max=667;          /* This is based on 15kHz PWM frequency (20MHz) */
;>>>> 	#elif   TARGET==F2407                                                          
	CALL	_RstSystem
	.line	31
;>>>> 	        pwm.period_max=1333;       /* This is based on 15kHz PWM frequency (40MHz)*/
;>>>> 	#endif  /* TARGET */            
	LDPK	_pwm
	SPLK	#1333,_pwm
	.line	38
;>>>> 	        FOC_TI_Init(&foc);
	LALK	_foc+0
	SACL	*+
	CALL	_FOC_TI_Init
	MAR	*-
	.line	43
;>>>> 	        rtmon_init();           /* Call the monitor init function           */
	CALL	_rtmon_init
	.line	44
;>>>> 	       	enable_ints();          /* Set off the system running.              */
	CALL	_enable_ints
	.line	49
;>>>> 	        while(drive.enable_flg==0)
	LDPK	_drive
	LAC	_drive
	BNZ	L2
L1:
	.line	51
;>>>> 	        drive.init(&drive);
	LALK	_drive+0
	SACL	*+
	LDPK	_drive+1
	LAC	_drive+1
	CALA
	MAR	*-
	.line	49
	LDPK	_drive
	LAC	_drive
	BZ	L1
L2:
	.line	57
;>>>> 	        pwm.init(&pwm);
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0xffff;          
;>>>> 	#elif   TARGET==F2407                                                          
	LALK	_pwm+0
	SACL	*+
	LAC	_pwm+5
	CALA
	MAR	*-,AR3
	.line	65
;>>>> 		    EVAIFRA=0xffff;        
;>>>> 	#endif  /* TARGET */
	LARK	AR3,29743
	SPLK	#-1,* 
	.line	71
;>>>> 	        dac.qptr0=&foc.svgen.va;
	LALK	_foc+30
	LDPK	_dac
	SACL	_dac
	.line	72
;>>>> 	        dac.qptr1=&foc.svgen.vb;
	LALK	_foc+31
	SACL	_dac+1
	.line	73
;>>>> 	        dac.qptr2=&foc.svgen.vc;
	LALK	_foc+32
	SACL	_dac+2
	.line	74
;>>>> 	        dac.qptr3=&foc.rg.rmp_out;
;>>>> 	#endif /* (BUILDLEVEL==LEVEL1) */  
;>>>> 	#if (BUILDLEVEL==LEVEL2)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        pwm.period_max=667;          /* This is based on 15kHz PWM frequency (20MHz) */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        pwm.period_max=1333;       /* This is based on 15kHz PWM frequency (40MHz)*/
;>>>> 	#endif  /* TARGET */            
;>>>> 	        FOC_TI_Init(&foc);
;>>>> 	        rtmon_init();            /* Call the monitor init function           */
;>>>> 	        enable_ints();           /* Set off the system running.              */
;>>>> 	        while(drive.enable_flg==0)
;>>>> 	        drive.init(&drive);
;>>>> 	        pwm.init(&pwm);
;>>>> 	       	ilg2.init(&ilg2);
;>>>> 	        dac.qptr0=&ilg2.out_a;
;>>>> 	        dac.qptr1=&ilg2.out_b;
;>>>> 	        dac.qptr2=&foc.rg.rmp_out;
;>>>> 	        dac.qptr3=&foc.voltage_dq.q;
;>>>> 	#endif /* (BUILDLEVEL==LEVEL2) */   
;>>>> 	#if (BUILDLEVEL==LEVEL3)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        pwm.period_max=667;          /* This is based on 15kHz PWM frequency (20MHz) */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        pwm.period_max=1333;       /* This is based on 15kHz PWM frequency (40MHz)*/
;>>>> 	#endif  /* TARGET */            
;>>>> 	        FOC_TI_Init(&foc);
;>>>> 	        rtmon_init();            /* Call the monitor init function           */
;>>>> 	        enable_ints();           /* Set off the system running.              */
;>>>> 	        while(drive.enable_flg==0)
;>>>> 	        drive.init(&drive);
;>>>> 	        pwm.init(&pwm);          
;>>>> 	       	ilg2.init(&ilg2);
;>>>> 	        dac.qptr0=&ilg2.out_a;
;>>>> 	        dac.qptr1=&foc.svgen.vb;
;>>>> 	        dac.qptr2=&foc.svgen.vc;
;>>>> 	        dac.qptr3=&foc.rg.rmp_out;
;>>>> 	#endif /* (BUILDLEVEL==LEVEL3) */   
;>>>> 	#if (BUILDLEVEL==LEVEL4)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        pwm.period_max=667;          /* This is based on 15kHz PWM frequency (20MHz) */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        pwm.period_max=1333;       /* This is based on 15kHz PWM frequency (40MHz)*/
;>>>> 	#endif  /* TARGET */            
;>>>> 	        FOC_TI_Init(&foc);
;>>>> 	        rtmon_init();            /* Call the monitor init function           */
;>>>> 	        enable_ints();           /* Set off the system running.              */
;>>>> 	        while(drive.enable_flg==0)
;>>>> 	        drive.init(&drive);
;>>>> 	        pwm.init(&pwm);          
;>>>> 	        qep.init(&qep);     
;>>>> 	        speed.K1_fr = 4800;  
;>>>> 	        speed.K2_fr = 32361;
;>>>> 	        speed.K3_fr = 407;
;>>>> 	        speed.rpm_max = 6000;
;>>>> 	       	ilg2.init(&ilg2);
;>>>> 	        dac.qptr0=&foc.rg.rmp_out;
;>>>> 	        dac.qptr1=&foc.svgen.va;
;>>>> 	        dac.qptr2=&qep.theta_elec;
;>>>> 	        dac.qptr3=&foc.svgen.vb;
;>>>> 	#endif /* (BUILDLEVEL==LEVEL4) */  
;>>>> 	#if (BUILDLEVEL==LEVEL5)
;>>>> 	#if     TARGET==F243                      
;>>>> 	        pwm.period_max=667;          /* This is based on 15kHz PWM frequency (20MHz) */
;>>>> 	#elif   TARGET==F2407                                                          
;>>>> 	        pwm.period_max=1333;       /* This is based on 15kHz PWM frequency (40MHz)*/
;>>>> 	#endif  /* TARGET */            
;>>>> 	        FOC_TI_Init(&foc);
;>>>> 	        rtmon_init();            /* Call the monitor init function           */
;>>>> 	        enable_ints();           /* Set off the system running.              */
;>>>> 	        while(drive.enable_flg==0)
;>>>> 	        drive.init(&drive);
;>>>> 	        pwm.init(&pwm);          
;>>>> 	        qep.init(&qep);     
;>>>> 	        speed.K1_fr = 4800;  
;>>>> 	        speed.K2_fr = 32361;
;>>>> 	        speed.K3_fr = 407;
;>>>> 	        speed.rpm_max = 6000;
;>>>> 	       	ilg2.init(&ilg2);
;>>>> 	        dac.qptr0=&ilg2.out_a;
;>>>> 	        dac.qptr1=&foc.svgen.va;
;>>>> 	        dac.qptr2=&qep.theta_elec;
;>>>> 	        dac.qptr3=&foc.svgen.vb;
;>>>> 	#endif /* (BUILDLEVEL==LEVEL5) */  
;>>>> 	#if     TARGET==F243                      
;>>>> 	        EVIFRA=0x0ffff;           /* Clear all Group A EV interrupt flags    */
;>>>> 	#elif   TARGET==F2407                                                          
	LALK	_foc+103
	SACL	_dac+3
	.line	381
;>>>> 	        EVAIFRA=0x0ffff;          /* Clear all EV1 Group A EV interrupt flags*/
;>>>> 	#endif              
;>>>> 	        while(1)             /* Nothing running in the background at present */
	SPLK	#-1,* 
L3:
	.line	389
	B	L3
	.endfunc	494,000000000H,1

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

	.func	497
;>>>> 	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
;>>>> 	        FOC_TI_Run(&foc); 
	LALK	_foc+0
	SACL	*+
	CALL	_FOC_TI_Run
	MAR	*-
	.line	31
;>>>> 	        pwm.mfunc_c1 = foc.svgen.va;         
	LDPK	_foc+30
	BLDD	_foc+30,#_pwm+2
	.line	32
;>>>> 	        pwm.mfunc_c2 = foc.svgen.vb;
	BLKD	#_foc+31,_pwm+3
	.line	33
;>>>> 	        pwm.mfunc_c3 = foc.svgen.vc;
	BLKD	#_foc+32,_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);
;>>>> 	        FOC_TI_Run(&foc); 
;>>>> 	        pwm.mfunc_c1 = foc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = foc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = foc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2.read(&ilg2);
;>>>> 		  	foc.current_abc.a = ilg2.out_a;
;>>>> 		  	foc.current_abc.b = ilg2.out_b;
;>>>> 		  	foc.current_abc.c = -(ilg2.out_a+ilg2.out_b);        
;>>>> 	        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);
;>>>> 	        FOC_TI_Run(&foc); 
;>>>> 	        pwm.mfunc_c1 = foc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = foc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = foc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2.read(&ilg2);
;>>>> 		  	foc.current_abc.a = ilg2.out_a;
;>>>> 		  	foc.current_abc.b = ilg2.out_b;
;>>>> 		  	foc.current_abc.c = -(ilg2.out_a+ilg2.out_b);
;>>>> 	        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);
;>>>> 	        FOC_TI_Run(&foc); 
;>>>> 	        pwm.mfunc_c1 = foc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = foc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = foc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2.read(&ilg2);
;>>>> 		  	foc.current_abc.a = ilg2.out_a;
;>>>> 		  	foc.current_abc.b = ilg2.out_b;
;>>>> 		  	foc.current_abc.c = -(ilg2.out_a+ilg2.out_b);
;>>>> 	        qep.calc(&qep);
;>>>> 	        speed.theta_elec = qep.theta_elec;
;>>>> 	        speed.calc(&speed);             
;>>>> 	        foc.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);
;>>>> 	        FOC_TI_Run(&foc); 
;>>>> 	        pwm.mfunc_c1 = foc.svgen.va;         
;>>>> 	        pwm.mfunc_c2 = foc.svgen.vb;
;>>>> 	        pwm.mfunc_c3 = foc.svgen.vc;
;>>>> 	        pwm.update(&pwm);
;>>>> 	        ilg2.read(&ilg2);
;>>>> 		  	foc.current_abc.a = ilg2.out_a;
;>>>> 		  	foc.current_abc.b = ilg2.out_b;
;>>>> 		  	foc.current_abc.c = -(ilg2.out_a+ilg2.out_b);
;>>>> 	        qep.calc(&qep);
;>>>> 	        foc.shaft_theta_elec = qep.theta_elec;
;>>>> 	        foc.shaft_direction = qep.dir_QEP;
;>>>> 	        speed.theta_elec = qep.theta_elec;
;>>>> 	        speed.calc(&speed);             
;>>>> 	        foc.Mea_spd = speed.speed_frq;
;>>>> 	        dac.update(&dac);
;>>>> 	#endif /* BUILDLEVEL==LEVEL5 */
	LALK	_dac+0
	SACL	*+
	LDPK	_dac+5
	LAC	_dac+5
	CALA
	MAR	*-
	.line	275
;>>>> 	       	foc.speed_ref_rpm = mul_q(foc.speed_ref,15,6000,0,0);
	LACK	0
	SACL	*+
	SACL	*+
	LACK	6000
	SACL	*+
	LACK	15
	SACL	*+
	BLKD	_foc+3,*+
	CALL	_mul_q
	SBRK	5
	LDPK	_foc+4
	SACL	_foc+4
	.line	278
;>>>> 	  	asm("    SETC     XF ");   
    SETC     XF 
EPI0_2:
	.line	280
	SBRK	1
	B	I$$REST,AR1   ;and return

	.endfunc	776,000000000H,1

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

	.func	786
;>>>> 	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	796,000000000H,1

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

	.func	799
;>>>> 	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	827,000000000H,1

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

	.func	829
;>>>> 	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	842,000000000H,1

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

	.func	848
;>>>> 	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	851,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 + -