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

📄 zhtest1.asm

📁 这是实现三相异步电动机FOC的DSP开发源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		BLDD	#ipark_d,Ualfa
		BLDD	#ipark_q,Ubeta		        
		CALL	SVGEN_DQ	
; PWM 驱动模块
		LDP		#Mfunc_c1
		BLDD	#Ta,Mfunc_c1	
		BLDD	#Tb,Mfunc_c2
		BLDD	#Tc,Mfunc_c3		
		CALL    FC_PWM_DRV
     .endif                               
******************************************
     .if (step3) 
; 电流测量模块
        CALL      ILEG2DRV 
; Clarke变换模块 
        LDP      #clark_a
        BLDD     #Ia_out,clark_a
        BLDD     #Ib_out,clark_b
        CALL     CLARKE    
; 正交脉冲捕获模块 
        CALL QEP_THETA_DRV  
; 速度计算模块    
        LDP  #shaft_angle
        BLDD #theta_mech,shaft_angle
        BLDD #dir_QEP,direction 
        CALL SPEED_FRQ             
; PARK 变换模块
        LDP      #park_d
        BLDD     #clark_d,park_d
        BLDD     #clark_q,park_q
        BLDD     #rmp_out,theta_p 
        CALL     PARK  
; 斜坡信号产生模块
;	    SPM   1				;模拟信号控制频率
;	    LDP	  #data_tmp
;	    SPLK  #2A00H,data_tmp
;	    LDP	  #V_ref		;
;	    LT    V_ref
;	    MPY	  data_tmp		;
;	    PAC					;
;	    SACH  rmp_freq		;end

	    CALL  RAMP_GEN
; Park逆变换模块
		LDP	  #theta_ip  
		BLDD  #rmp_out,theta_ip

;	    SPM   1				;模拟信号控制频率
;	    LDP	  #data_tmp
;	    SPLK  #06100H,data_tmp	    
	    
;	    LDP	  #rmp_freq		;
;	    LT    rmp_freq 		;
;	    MPY	  data_tmp		;		
;	    PAC					;
;		ABS					
;		LDP	  #ipark_D		
;	    SACH  ipark_D,1		
;	    SACH  ipark_Q,1		;end		

        CALL  I_PARK 
; 电压空间矢量计算模块
		LDP		#Ualfa
		BLDD	#ipark_d,Ualfa
		BLDD	#ipark_q,Ubeta		        
		CALL	SVGEN_DQ	
; PWM 驱动模块
		LDP		#Mfunc_c1
		BLDD	#Ta,Mfunc_c1	
		BLDD	#Tb,Mfunc_c2
		BLDD	#Tc,Mfunc_c3		
		CALL    FC_PWM_DRV

     .endif  
******************************************
     .if (step4) 
; 电流测量模块
        CALL      ILEG2DRV 
; Clarke 变换模块 
        LDP      #clark_a
        BLDD     #Ia_out,clark_a
        BLDD     #Ib_out,clark_b
        CALL     CLARKE    
; QEP 模块 
        CALL QEP_THETA_DRV  
; SPEED_FR 模块    
        LDP  #shaft_angle
        BLDD #theta_mech,shaft_angle
        BLDD #dir_QEP,direction 
        CALL SPEED_FRQ  

; PARK 变换模块
        LDP      #park_d
        BLDD     #clark_d,park_d
        BLDD     #clark_q,park_q
        .if constant_current      ; 直流测试励磁  
        SPLK     #0000h,theta_p   
        .else
        BLDD     #rmp_out,theta_p ;
        .endif
        CALL     PARK  
; D轴电流调节模块
        LDP      #id_ref
        BLDD     #my_id_ref,id_ref  ; xxxxh 对应峰值电流 1.5A 
        BLDD     #park_D,id_fdb
        CALL     pid_reg_id
; Q轴电流调节模块
        LDP      #iq_ref  
        .if constant_current        ; 
        SPLK     #0000h,iq_ref      ; 
        .else
        BLDD     #my_iq_ref,iq_ref
        .endif
        BLDD     #park_Q,iq_fdb
        CALL     pid_reg_iq  
; Ramp产生模块  
        CALL    RAMP_GEN           
; Park逆变换模块
		LDP		#ipark_D     
		BLDD    #ud_out,ipark_D
		BLDD    #uq_out,ipark_Q     ; 
	    .if     constant_current    ;
		SPLK    #0000h,theta_ip 
        .else
		BLDD    #rmp_out,theta_ip
	   .endif		 
        CALL     I_PARK 
; 电压空间矢量计算模块
		LDP		#Ualfa
		BLDD	#ipark_d,Ualfa
		BLDD	#ipark_q,Ubeta		        
		CALL	SVGEN_DQ	
; PWM 驱动模块
		LDP		#Mfunc_c1
		BLDD	#Ta,Mfunc_c1	
		BLDD	#Tb,Mfunc_c2
		BLDD	#Tc,Mfunc_c3		
		CALL    FC_PWM_DRV   
		
     .endif   
******************************************
        
     .if (step5)  
     
; 电流采样模块
        CALL      ILEG2DRV 
; Clarke变换模块 
        LDP      #clark_a
        BLDD     #Ia_out,clark_a
        BLDD     #Ib_out,clark_b
        CALL     CLARKE    
; QEP 模块 
        CALL QEP_THETA_DRV  
; 转速测量模块    
        LDP  #shaft_angle
        BLDD #theta_mech,shaft_angle
        BLDD #dir_QEP,direction 
        CALL SPEED_FRQ 
; PARK变换模块
        LDP      #park_d
        BLDD     #clark_d,park_d
        BLDD     #clark_q,park_q
        .if test_cur_mod              ; 连接到 'rmp_out'或者'theta_cur_mod'
        BLDD     #rmp_out,theta_p     ;
        .else
        BLDD     #theta_cur_mod,theta_p 
        .endif
        CALL     PARK
;磁链电流模型 
        LDP      #spd_cur_mod 
        BLDD     #speed_frq,spd_cur_mod
        BLDD     #park_D,i_cur_mod_D
        BLDD     #park_Q,i_cur_mod_Q
        CALL     CURRENT_MODEL              
; D轴电流调节模块
        LDP      #id_ref
        BLDD     #my_id_ref,id_ref  ; 
        BLDD     #park_D,id_fdb
        CALL     pid_reg_id
; Q轴电流调节模块
        LDP      #iq_ref  
        BLDD     #my_iq_ref,iq_ref
        BLDD     #park_Q,iq_fdb 
        CALL     pid_reg_iq  
; Ramp信号发生模块  
	    CALL    RAMP_GEN           
; 反Park变换模块
		LDP		#ipark_D     
		BLDD    #ud_out,ipark_D
		BLDD    #uq_out,ipark_Q ;zyg
		.if     test_cur_mod
		BLDD    #rmp_out,theta_ip    ; 连接到 'rmp_out'或者'theta_cur_mod'
		.else                        ; 
		BLDD    #theta_cur_mod,theta_ip
		.endif		 
        CALL     I_PARK 
; 电压空间矢量计算模块
		LDP		#Ualfa
		BLDD	#ipark_d,Ualfa
		BLDD	#ipark_q,Ubeta		        
		CALL	SVGEN_DQ	
; PWM 驱动模块
		LDP		#Mfunc_c1
		BLDD	#Ta,Mfunc_c1	
		BLDD	#Tb,Mfunc_c2
		BLDD	#Tc,Mfunc_c3		
		CALL    FC_PWM_DRV   
		        
     .endif   
******************************************        
    
     .if (step6) 
        
; 电流采样模块
        CALL      ILEG2DRV 
; Clarke变换模块 
        LDP      #clark_a
        BLDD     #Ia_out,clark_a
        BLDD     #Ib_out,clark_b
        CALL     CLARKE    
; QEP 模块
        CALL QEP_THETA_DRV   
; 速度调节模块 
        LDP     #spd_ref
        bldd    #speed_reference,spd_ref
        bldd    #spd_cur_mod,spd_fdb
        CALL    pid_reg_spd                 
; 速度测量模块    
        LDP  #shaft_angle
        BLDD #theta_mech,shaft_angle
        BLDD #dir_QEP,direction 
        CALL SPEED_FRQ 
; PARK 变换模块
        LDP      #park_d
        BLDD     #clark_d,park_d
        BLDD     #clark_q,park_q
        BLDD     #theta_cur_mod,theta_p 
        CALL     PARK
; 转子磁链电流模型 

        LDP      #spd_cur_mod 
        BLDD     #speed_frq,spd_cur_mod
        
        BLDD     #park_D,i_cur_mod_D
        BLDD     #park_Q,i_cur_mod_Q
        CALL     CURRENT_MODEL              
; D轴电流调节模块
        LDP      #id_ref
        BLDD     #my_id_ref,id_ref
        BLDD     #park_D,id_fdb
        CALL     pid_reg_id
; Q轴电流调节模块
        LDP      #iq_ref  
        BLDD     #spd_out,iq_ref
        BLDD     #park_Q,iq_fdb 
        CALL     pid_reg_iq  
; Park逆变换模块

		LDP		#ipark_D
		BLDD    #ud_out,ipark_D
		BLDD    #uq_out,ipark_Q 
		BLDD    #theta_cur_mod,theta_ip
        CALL     I_PARK 
; 电压空间是两计算模块
		LDP		#Ualfa
		BLDD	#ipark_d,Ualfa
		BLDD	#ipark_q,Ubeta		        
		CALL	SVGEN_DQ	
; PWM driver
		LDP		#Mfunc_c1
		BLDD	#Ta,Mfunc_c1	
		BLDD	#Tb,Mfunc_c2
		BLDD	#Tc,Mfunc_c3		
		CALL    FC_PWM_DRV  

     .endif

;DATA_LOG
       ; ldp 	#dlog_iptr1			;
       ; SPLK	#rmp_out,dlog_iptr1	;
       ; SPLK	#Ib_out,dlog_iptr2	;
        CALL    DATA_LOG			;
;=========================================================
;主循环中断服务程序结束
;=========================================================
;断点恢复
END_ISR:
		POINT_PG0

		MAR	*, AR1    	;激活栈指针
		LACL	*-		;恢复 Acc 低16位
		ADDH	*-		;恢复 Acc 高16位
		LST	#0, *-      ;恢复 ST0
		LST     #1, *-  ;恢复 ST1
		EINT
		RET   
		
*******************************************************
* INT4 - EV group C Ints开始
* Cap3 中断使能
*******************************************************
CAP3_ID	 .set 035H			; Cap3 中断向量
CAP3_CLR .set 04H			; Cap3 中断标志清除
	
_c_int4	

        MAR	*,AR1			; 保护断点
		MAR	*+				; 指向未使用的位置
		SST	#1, *+      	; 保存 ST1
		SST  	#0, *+      ; 保存 ST0
		SACH	*+          ; 保存 acc 高16位
		SACL	*+			; 保存 acc 低16位并将指针指向未用的位置
		
		;如果需要可以保存更多现场信息
		.if	x243 | x2407
		LDP	#PIVR>>7		; 设置数据页
		LACC	PIVR		; 加载外围中断向量地址偏移量
		.endif
		
		.if	x240
		LDP	#EVIVRC>>7
		lACC	EVIVRC
		.endif
		
		SUB	#CAP3_ID			; 判断是否Cap3中断
		BCND	CAP3_INT,EQ		; 为零则转到PDPISR
		CALL	PHANTOM			; 否则转到哑中断
		B	REST_INT4			; 返回
CAP3_INT
    	.if	x243 | x2407
		LDP	#EVIFRC>>7
		SPLK	#CAP3_CLR,EVIFRC	; 清 Cap3 中断标志
		.endif
		
		CALL	QEP_INDEX_ISR_DRV	; QEP 同步程序 
		
;=========================================================
;End 主ISR INT4 -事件管理器 C 组中断服务程序代码结束
;=========================================================

;断点恢复		

REST_INT4		;如果必要可恢复更多变量
		MAR	*, AR1    		; 激活堆栈指针
		MAR	*-          	; 指向栈顶
		LACL	*-			; 恢复 Acc 低16位
		add	*-,16			; 恢复 Acc 高16位
		LST	#0, *-      	; 恢复 ST0
		LST  	#1, *-     	; 恢复 ST1 和栈指针
		EINT
		RET				    ; 返回
		

;==============================================================================
; I S R  -  PHANTOM
;
; 功能描述:	哑中断服务程序
;
; 修改记录:
; 最后更新日期:	2005.6.23
;==============================================================================
PHANTOM 	B	PHANTOM

⌨️ 快捷键说明

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