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

📄 zhtest3_2.asm

📁 这个是关于实现同步电机FOC的控制程序源代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		SPLK	#-520,cal_angle            ; 根据编码器连接情况确定 

   		LDP		#rmp_dly_max      		  ; 磁链控制模块初始化
       	SPLK	#120,rmp_dly_max		  ; 延迟周期数初始化
       	SPLK	#8000h,rmp_lo_limit		  ; 输出下限
		SPLK	#7FFFh,rmp_hi_limit		  ; 输出上限
        
	.endif
;---------------------------------------------------------

;---------------------------------------------------------
	.if (step5)	;测试步骤五初始化程序代码
;---------------------------------------------------------
        SPLK	#01000h, speed_ref        ; 速度参考值初始化Q15 
        SPLK	#0,pdpint_flg             ; pdpint_flg初始化

        SPLK	#0,sp_loop_cnt            ; Q0 (转速计数器初始化)
        SPLK	#10,sp_loop_max           ; Q0 (速度环跳过次数初始化)
        
        SPLK	#0000h, Id_ref            ; 励磁电流参考值初始化Q15
       	SPLK	#1000h, Iq_ref            ; 转矩电流参考值初始化Q15
                                         
       	LDP		#cal_angle                ; QEP模块初始化
		SPLK	#40,cal_angle            ; 根据编码器连接情况确定 

   		LDP		#rmp_dly_max      		  ; 磁链控制模块初始化
       	SPLK	#120,rmp_dly_max		  ; 延迟周期数初始化
       	SPLK	#8000h,rmp_lo_limit		  ; 输出下限初始化	
		SPLK	#7FFFh,rmp_hi_limit		  ; 输出上限初始化
         
	.endif
;---------------------------------------------------------
                       
;======================================================
MAIN:		;主程序循环
;======================================================

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

;===========================================================================
; 程序名: T1UF_ISR							     程序类型: ISR
;
; 功能描述:完成系统全部控制功能
;
; 公司: 达盛科技
;
; 更改纪录:
; 最后更新时间:	2005.08.21	版本:Ver1.0
;===========================================================================
T1UF_ISR:
;断点保护
 	
    	MAR		*,AR1		; 激活栈指针
		MAR		*+			; 指向未用位置
		SST		#1, *+      ; 保存 ST1
		SST  	#0, *+      ; 保存 ST0
		SACH	*+          ; 保存 acc 高16位
		SACL	*+			; 保存 acc 低16位
		SAR		AR6,*+
		POPD	*+			; save TOS to free h/w stack
		;如果需要可以保存更多现场信息

 		POINT_EV
		SPLK	#0FFFFh,IFRA  	; 清所有 A 组中断标志 (T1 ISR)

;测试 ISR 带宽 
		CLRC     XF

;=========================================================
;主 ISR 程序开始
;=========================================================

		POINT_B0

		; 校验 ISR
		LACC 	isr_ticker	
		ADD		#1			
		SACL    isr_ticker 
		
;---------------------------------------------------------
;系统控制程序编译选项 
;---------------------------------------------------------
;---------------------------------------------------------
	.if (step1)	;测试步骤一控制程序代码
;---------------------------------------------------------
;开环磁链控制模块
 		SPM   1				;模拟信号控制频率
	    LDP	  #data_tmp
	    SPLK  #2A00H,data_tmp
	    LDP	  #Vdc_meas		;
;		LDP   #Sig_in		;SPICOM CTR
	    LT    Vdc_meas
;		LT    Sig_in
	    MPY	  data_tmp		;
	    PAC					;
	    
 		LDP		#target_value
	    SACH  target_value	;end
        CALL	RAMP_CNTL
;开环磁链发生模块		
		LDP		#rmp_freq
		BLDD	#setpt_value,rmp_freq	
        CALL	RAMP_GEN
;PARK逆变换模块        
		LDP		#theta_ip
 		BLDD	#rmp_out,theta_ip
; 		BLDD	#Vd_testing,ipark_D
; 		BLDD	#Vq_testing,ipark_Q
	    SPM   1				;模拟信号控制频率
	    LDP	  #data_tmp
	    SPLK  #03100H,data_tmp	    
	    
	    LDP	  #rmp_freq		;
	    LT    rmp_freq 		;
	    MPY	  data_tmp		;		
	    PAC					;
		ABS					
		LDP	  #ipark_D		
	    SACH  ipark_D		
	    SACH  ipark_Q		;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 (step2)	;测试步骤二控制程序代码
;---------------------------------------------------------
;开环磁链控制模块
 		LDP		#target_value
		BLDD	#speed_ref,target_value
        CALL	RAMP_CNTL
;开环磁链发生模块		
		LDP		#rmp_freq
		BLDD	#setpt_value,rmp_freq	
        CALL	RAMP_GEN
;PARK逆变换模块        
		LDP		#theta_ip
 		BLDD	#rmp_out,theta_ip
 		BLDD	#Vd_testing,ipark_D
 		BLDD	#Vq_testing,ipark_Q
 		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	
;电流采样模块
        CALL	ILEG2_DCBUS_DRV
;CLARKE变换模块
        LDP		#clark_a
        BLDD	#Imeas_a,clark_a
        BLDD	#Imeas_b,clark_b
		CALL	CLARKE        
;PARK变换模块        
        LDP		#park_d
        BLDD	#clark_d,park_d
        BLDD	#clark_q,park_q
        BLDD	#rmp_out,theta_p
        CALL	PARK

;正交脉冲捕获及角度计算模块
;       CALL 	QEP_THETA_DRV
;速度计算模块        	    
;       LDP		#theta_elec_fr
;       BLDD	#theta_elec,theta_elec_fr
;       CALL	SPEED_FRQ

	.endif
;---------------------------------------------------------

;---------------------------------------------------------
	.if (step3)	;测试步骤三控制程序代码
;---------------------------------------------------------
;开环磁链控制模块
 		LDP		#target_value				
		BLDD	#speed_ref,target_value
        CALL	RAMP_CNTL

;开环磁链给定模块
		LDP		#rmp_freq
		BLDD	#setpt_value,rmp_freq	    ;使用磁链控制
;		BLDD	#speed_ref,rmp_freq			;跳过磁链控制
        CALL	RAMP_GEN

;d轴电流调节模块
        LDP		#id_ref
        BLDD	#Id_ref,id_ref
        BLDD	#park_D,id_fdb
       	CALL	PID_REG3_ID

;q轴电流调节模块       	
		LDP		#iq_ref
	  	BLDD	#Iq_ref,iq_ref
        BLDD	#park_Q,iq_fdb
       	CALL	PID_REG3_IQ      

;PARK逆变换模块
		LDP		#theta_ip
		BLDD	#ud_out,ipark_D
;		SPLK	#0000h,ipark_D
 		BLDD	#uq_out,ipark_Q
 		BLDD	#rmp_out,theta_ip
 		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	

;电流采样模块
        CALL	ILEG2_DCBUS_DRV

;CLARKE变换模块        
        LDP		#clark_a
        BLDD	#Imeas_a,clark_a
        BLDD	#Imeas_b,clark_b
		CALL	CLARKE        

;PARK逆变换模块
        LDP		#park_d
        BLDD	#clark_d,park_d
        BLDD	#clark_q,park_q
        BLDD	#rmp_out,theta_p
        CALL	PARK

    .endif
;---------------------------------------------------------

;---------------------------------------------------------
	.if (step4)
;---------------------------------------------------------
;开环磁链控制模块
 		LDP		#target_value
		BLDD	#speed_ref,target_value
        CALL	RAMP_CNTL
;开环磁链产生模块		
		LDP		#rmp_freq
		BLDD	#setpt_value,rmp_freq	
        CALL	RAMP_GEN
;d轴电流调节模块        
        LDP		#id_ref
        BLDD	#Id_ref,id_ref
        BLDD	#park_D,id_fdb
       	CALL	PID_REG3_ID
;q轴电流调节模块       	
		LDP		#iq_ref
        BLDD	#Iq_ref,iq_ref
        BLDD	#park_Q,iq_fdb
       	CALL	PID_REG3_IQ        

; 检测所定标志 lockrtr_flg 状态
		POINT_B0
        LACC	lockrtr_flg   			; lockrtr_flg=0 为直流模式 (angle=0)
		BCND	NON_CC_MODE,EQ			; 转到 NON_CC_MODE ,当 lockrtr_flg=0

CC_MODE			;直流模式控制程序
;PARK逆变换模块
		LDP		#theta_ip
        BLDD	#ud_out,ipark_D     
 		BLDD	#uq_out,ipark_Q    
  		SPLK	#0000h,theta_ip
 		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	
;电流采样模块
        CALL	ILEG2_DCBUS_DRV
;CLARKE变换模块        
        LDP		#clark_a
        BLDD	#Imeas_a,clark_a
        BLDD	#Imeas_b,clark_b
		CALL	CLARKE        
;PARK变换模块        
        LDP		#park_d
        BLDD	#clark_d,park_d
        BLDD	#clark_q,park_q
        SPLK	#0000h,theta_p
        CALL	PARK
        
        B		SKIP_CC_MODE

NON_CC_MODE     ;非直流模式控制程序   
;PARK逆变换模块
		LDP		#theta_ip
        BLDD	#ud_out,ipark_D 
 		BLDD	#uq_out,ipark_Q 
 		BLDD	#rmp_out,theta_ip
       	CALL	I_PARK
;电压空间矢量计算模块 		
 		LDP		#Ualfa  
      	BLDD	#ipark_d,Ualfa
   		BLDD	#ipark_q,Ubeta
  		CALL   	SVGEN_DQ  

⌨️ 快捷键说明

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