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

📄 aci31_x1.asm

📁 无速度pid的异步电机vf控制的dsp调试程序
💻 ASM
字号:
;=========================================================================================
; System Name:	ACI3_1
;
; File Name:	ACI31_x1.ASM 
;
; Description:	ACI 3-phase Volts / Hertz (VHz) control with speed
;			sensor		
;
; Originator:	Digital Control Systems Group
;			Texas Instruments
;
; Target Device:F2407
; To Select the target device see x24x_app.h file.
;
;							
;=====================================================================================
; History:
;-------------------------------------------------------------------------------------
; 9-15-2000	Release	Rev 1.0
;==============================================================================

;******************************************************************************
;					  SYSTEM OPTIONS
;******************************************************************************
;-----------------------------------------------------------------------------
; External references
;-----------------------------------------------------------------------------
		.include	"x24x_app.h"
;SPEED_REF	.set	750    ;sheding sudu
		.ref	SYS_INIT

		.ref	RAMP_CNTL, RAMP_CNTL_INIT			;function call
		.ref	target_value, rmp_dly_max				;Inputs
		.ref	setpt_value, s_eq_t_flg				;Outputs

		.ref	V_Hz_PROFILE, V_Hz_PROFILE_INIT		;function call
		.ref	vhz_freq							;Inputs
		.ref	v_out								;Outputs

		.ref	SVGEN_MF, SVGEN_MF_INIT				;function call
		.ref	sv_gain, sv_offset, sv_freq			;Inputs
		.ref	Ta, Tb, Tc							;Outputs

		.ref	QEP_THETA_DRV,QEP_THETA_DRV_INIT	; function call
		.ref	polepairs,cal_angle,mech_scale	; Inputs
		.ref	theta_elec,theta_mech,dir_QEP		; Outputs
		
		.ref	QEP_INDEX_ISR_DRV				; function call
		.ref	index_sync_flg,QEP_cnt_idx		; Output
	    
	    .ref	SPEED_FRQ, SPEED_FRQ_INIT		;function call
        .ref	shaft_angle, direction			;Inputs
		.ref	speed_frq, speed_frq_rpm		;Outputs

		.ref	FC_PWM_O_DRV
		.ref	FC_PWM_O_DRV_INIT						;function call
		.ref	Mfunc_c1, Mfunc_c2, Mfunc_c3, Mfunc_p	;Inputs  
		.ref	limit									;Input
        
		.ref	KEYSCAN
		.ref	KEYSCAN_INIT			;function call
        .ref    startflag,onflag,stopflag             ;output

		.ref	DAC_VIEW_DRV,DAC_VIEW_DRV_INIT		; function call
		.ref	DAC_IPTR0,DAC_IPTR1,DAC_IPTR2,DAC_IPTR3	; Inputs

        .ref	ADC, ADC_INIT	; function call
		.ref	c0_out,c1_out, c2_out,c3_out	; Outputs
	
		.ref	DATA_LOG, DATA_LOG_INIT				;function call
	   .ref	dlog_iptr1, dlog_iptr2				;Inputs
	   
        .ref	pid_reg_spd,pid_reg_spd_init ; function call
		.ref	spd_fdb,spd_ref		; Inputs
		.ref	spd_out				; Outputs
;-----------------------------------------------------------------------------
; Local Variable Declarations
;-----------------------------------------------------------------------------
		.def	GPR0			;General purpose registers.
		.def	GPR1
		.def	GPR2
		.def	GPR3
		.def	GPR4
        .def    rpm_scaler1
        .def	speed_rpm_old     
        
        .def	COMCON

		.bss	GPR0,1		;General purpose registers.
		.bss	GPR1,1
		.bss	GPR2,1
		.bss	GPR3,1
		.bss	GPR4,1

		.bss	closed_loop_flag,1
		.bss	freq_in,1
		.bss	speed_setpt,1
        .bss    rpm_scaler1,1
       	.bss	speed_rpm_old,1    
       	.bss	direction1,1
 		.bss	Van,1
		.bss	Vbn,1
		.bss	Vcn,1
		.bss	Vab,1
		.bss	Vbc,1
		.bss	Vca,1	
		.bss	HALF,1
		.bss	MINUS_ONE,1	      	
		.bss	isr_ticker,1

		
;==============================================================================
; V E C T O R    T A B L E   
;==============================================================================


		.sect "vectors"  
		.def 	_c_int0

RESET	    B	  _c_int0 	 		; 00
INT1	    B	  PHANTOM1	 		; 02
INT2	    B	  T1UF_ISR		    ; 04
INT3	    B	  T4UF_ISR	 		; 06
INT4	    B	  PHANTOM			; 08
INT5	    B	  PHANTOM	 		; 0A
INT6	    B	  PHANTOM	 		; 0C


; Note : The above include line must be AFTER the user configurable 
;        vectors. Do not change the place where this line is included.

;==============================================================================
; M A I N   C O D E  - starts here
;==============================================================================
		.text
_c_int0:
        
		CALL	SYS_INIT
		CALL	RAMP_CNTL_INIT
		CALL	V_Hz_PROFILE_INIT
		CALL	SVGEN_MF_INIT
     	CALL    QEP_THETA_DRV_INIT
		CALL    SPEED_FRQ_INIT
		CALL	FC_PWM_O_DRV_INIT
		CALL    KEYSCAN_INIT
        CALL    ADC_INIT
        CALL	DAC_VIEW_DRV_INIT
		CALL	DATA_LOG_INIT
        CALL    pid_reg_spd_init
;------------------------------------------------------
;System time-base init - Timer2
;------------------------------------------------------
SYSTEM_INT_PERIOD	.set	1000		;set for 100uS period @50nS CPU clock

;----------------------------------------------------------
; System Interrupt Init.
;----------------------------------------------------------
	;Event Manager
		POINT_EV
		SPLK	#0000000000000001b,IMRA ;Enable T1 Underflow Int (i.e. Period)
;		SPLK	#0000001000000001b,IMRA ;Enable T1 Underflow Int (i.e. Period)
;		SPLK	#0000000000000100b,IMRC ;Enable CAP3 int (i.e. QEP index pulse)
			    ;||||!!!!||||!!!!		
			    ;5432109876543210

		SPLK	#0FFFFh,IFRA	; Clear all Group A interrupt flags
		SPLK	#0FFFFh,IFRB	; Clear all Group B interrupt flags
		SPLK	#0FFFFh,IFRC	; Clear all Group C interrupt flags

        LDP	#IFRAB>>7h
     	SPLK	#0000000000000100b,IMRBB ;Enable T4 Underflow Int (i.e. Period)
        SPLK	#0FFFFh,IFRAB	; Clear all Group A interrupt flags
		SPLK	#0FFFFh,IFRBB	; Clear all Group B interrupt flags
		SPLK	#0FFFFh,IFRCB	; Clear all Group C interrupt flags

	;C2xx Core
		POINT_PG0
		SPLK	#0000000000000111b,IMR	;En Int lvl 2 (T1 ISR)
;		SPLK	#0000000000000100b,IMR	;En Int lvl 3 (T2 ISR)
			;||||!!!!||||!!!!		
			;5432109876543210

		SPLK	#0FFFFh, IFR		;Clear any pending Ints
		EINT					;Enable global Ints
		POINT_B0
;-----------------------------------------------------------------------

;---------------------------------------------------------
;SYSTEM COMMISSIONING OPTIONS - Initialisation
;--------------------------------------------------------

RPM_SCALER		.set	5510h

		SPLK	#7FFFh, Mfunc_p
		SPLK	#500h, freq_in   
		SPLK	#RPM_SCALER, rpm_scaler1
		SPLK	#1, direction1
;		SPLK   #0,stcount
		            

;---------------------------------------------------------

;======================================================
MAIN:		;Main system background loop
;======================================================

M_1		B	MAIN
;======================================================


;===========================================================================
; Routine Name: T1UF_ISR				     Routine Type: ISR
;
; Description:
;
;
; Originator: Digital control systems Group - Texas Instruments
;
; History:
;
;
; Last Update:	08-25-2000
;===========================================================================
T1UF_ISR:
;Context save regs
		MAR	*,AR1			;AR1 is stack pointer
		MAR	*+          	;skip one position
		SST	#1, *+      	;save ST1
		SST   #0, *+      	;save ST0
		SACH	*+          ;save acc high
		SACL	*			;save acc low

		POINT_EV
		SPLK	#0FFFEh,IFRA  	; Clear all Group A interrupt flags (T1 ISR),except PDPINTA

;=========================================================
;Start main section of ISR
;=========================================================
		POINT_B0
		
		; verifying the ISR
		LACC 	isr_ticker	
		ADD		#1			
		SACL    isr_ticker   
		       
;---------------------------------------------------------
;SYSTEM COMMISSIONING OPTIONS - Main code
;--------------------------------------------------------
       
	    
        LDP    #startflag
		LACC startflag
		BCND BEGIN1, NEQ
		LDP  #speed_setpt
		SPLK  #0h,speed_setpt
		B BEGIN
BEGIN1:
        CALL   ADC
        LDP    #speed_setpt 
        BLDD   #c0_out, speed_setpt ;0-1024 means 0-3.3V=0-70hz

BEGIN:	LDP		#target_value
 		BLDD	#speed_setpt, target_value
    	CALL	RAMP_CNTL 

		LDP		#target_value
    	LACC  setpt_value
		SUB   #30h
		BCND  BEGIN2,NEQ
		LDP #startflag
		LACC startflag
		BCND BEGIN2,NEQ
	    POINT_EV
		SPLK	#0,ACTR
		
		B  END_ISR
BEGIN2:
		LDP		#target_value  
		LT		setpt_value	
		
		POINT_B0
		MPY		rpm_scaler1
		PAC
		SACH	freq_in,5
		
		LDP		#vhz_freq
		BLDD	#freq_in, vhz_freq
				
		CALL	V_Hz_PROFILE

		LDP		#sv_gain
		BLDD	#vhz_freq, sv_freq
		BLDD	#v_out, sv_gain
				
		CALL	SVGEN_MF

		POINT_B0
		
		LACC	direction1
		SUB		#1
		BCND	CW, EQ
		
CCW		LDP		#Mfunc_c1
		BLDD	#Ta, Mfunc_c1
		BLDD	#Tb, Mfunc_c2
		BLDD	#Tc, Mfunc_c3  
		
		B		PWMDRV
		
CW		LDP		#Mfunc_c1
		BLDD	#Ta, Mfunc_c1
		BLDD	#Tb, Mfunc_c3
		BLDD	#Tc, Mfunc_c2      
		

PWMDRV	CALL	FC_PWM_O_DRV
        CALL    Line2line
; QEP Module 
        CALL QEP_THETA_DRV  
; SPEED_FR Module    
        LDP  #shaft_angle
        BLDD #theta_mech,shaft_angle
        BLDD #dir_QEP,direction
        CALL SPEED_FRQ             
 ;PID OF SPEED      
        LDP #spd_fdb
		BLDD #speed_frq,spd_fdb
		BLDD #speed_ref,spd_ref
        CALL pid_reg_spd
        
        CALL DATA_LOG
;=========================================================
;End main section of ISR
;=========================================================
;Context restore regs
END_ISR:
		POINT_PG0

		MAR	*, AR1    	;make stack pointer active
		LACL	*-		;Restore Acc low
		ADDH	*-		;Restore Acc high
		LST	#0, *-      ;load ST0
		LST     #1, *-      ;load ST1
		EINT
		RET
;*********************************************
;T3 period interrupt
;*********************************************

T4UF_ISR:
  	    MAR	*,AR1			;AR1 is stack pointer
		MAR	*+          	;skip one position
		SST	#1, *+      	;save ST1
		SST   #0, *+      	;save ST0
		SACH	*+          ;save acc high
		SACL	*			;save acc low

		LDP #0eah
		SPLK	#0FFFFh,IFRBB  	; Clear all Group B interrupt flags (T2 ISR),except PDPINTA

;=========================================================
;Start main section of ISR
;=========================================================
		POINT_B0
		
		; verifying the ISR
		LACC 	isr_ticker	
		ADD		#1			
		SACL    isr_ticker   
		       
;---------------------------------------------------------
;SYSTEM COMMISSIONING OPTIONS - Main code
;---------------------------------------------------------
       CALL   KEYSCAN
END_T4ISR:
		POINT_PG0

		MAR	*, AR1    	;make stack pointer active
		LACL	*-		;Restore Acc low
		ADDH	*-		;Restore Acc high
		LST	#0, *-      ;load ST0
		LST     #1, *-      ;load ST1
		EINT
		RET

;==============================================================================
; Subroutine - Line2Line
; Description: This subroutine calculates line to line voltages
;              from line to neutral voltage
; Van	- Phase A line to neutral voltage
; Vbn	- Phase B line to neutral voltage
; Vcn	- Phase C line to neutral voltage
; Vab = Van-Vbn	Line to line voltage between phases A & B
; Vbc = Vbn-Vcn Line to line voltage between phases B & C
; Vca = Vcn-Van Line to line voltage between phases C & A
;===============================================================================

Line2line

		POINT_B0
		BLDD	#Ta, Van
		BLDD	#Tb, Vbn
		BLDD	#Tc, Vcn
		
		SPLK	#3FFFh, HALF
		SPLK	#8001h, MINUS_ONE
		
		LT		HALF
		MPY		Van
		PAC
		SACH	Van,1
		MPY		Vbn
		PAC
		SACH	Vbn,1
		MPY		Vcn
		PAC
		SACH	Vcn,1
		
		LT		MINUS_ONE
		LACC	Van
		SUB		Vbn		
		SACL	Vab
		LACC	Vbn
		SUB		Vcn
		SACL	Vbc
		LACC	Vcn
		SUB		Van
		SACL	Vca  
		
		RET
;==============================================================================
; I S R  -  PHANTOM
;
; Description:	Dummy ISR, used to trap spurious interrupts.
;
; Modifies:
;
; Last Update:	16-06-95
;==============================================================================
PHANTOM 	B	PHANTOM
PHANTOM1
		NOP
		RET
PHANTOM2 	B	PHANTOM2
PHANTOM3 	B	PHANTOM3
PHANTOM4 	B	PHANTOM4
PHANTOM5 	B	PHANTOM5
PHANTOM6 	B	PHANTOM6







    

⌨️ 快捷键说明

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