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

📄 arithmetic.asm

📁 永磁同步电机驱动控制
💻 ASM
📖 第 1 页 / 共 3 页
字号:
          
neg_u_limit:
          SPLK  #-500,_current_given               
speed_over:
          lacc  _speed_err
          sacl  _speed_err_old
          
;================================================
;          SBRK       #2
;          LAR        AR0,*-
;          PSHD        *
          lacc _t2_sum
          add  _t2_add
          sacl _t2_sum
          
          lacc _thet
          add  _t2_add
          sacl _thet
 
          ret   
;================================================
;iq,id两电流环
;================================================          
_current_pi_loop:
;================================================
;          POPD        *+
;          SAR        AR0,*+
;          SAR        AR1,*
;          LARK       AR0,#1
;          LAR        AR0,*0+,AR0
;================================================          
          setc  SXM
          
current_pi_p:
          ldpk  _current_given
          lacc  _current_given
          sub   _isq
          sacl  _current_iq_err
          lt    _current_iq_err
          mpy   _current_kp
          spm   3
          pac      
          sfr
          sfr    
          sacl   _current_uqref          
current_pi_i:
          mpy    _current_ki    
          ;b     Buck_aa
          spm    0
          pac
          and    #07ffh
          add    _current_pi_error
          sacl   _current_pi_error     
          sub    #2048
          blz    Buck_aa
          sacl   _current_pi_error
          spm    3
          pac  
          sfr
          sfr   
          sfr
          sfr  
          sfr
          add   #1
          add   _current_iq_sum
          sacl  _current_iq_sum
          b     pi_onit1 

Buck_aa:
          spm   3
          pac
          sfr
          sfr   
          sfr
          sfr     
          sfr
          add   _current_iq_sum
          sacl  _current_iq_sum
                    
pi_onit1:
          lacc  _current_iq_sum
          abs
          sub   #9240
          blz   yg1
          lacc  _current_iq_sum
                     
          
          blz   no_neg                
          splk  #9240,_current_iq_sum                    
          b     yg1
no_neg:  
          splk  #-9240,_current_iq_sum
yg1:       
          lacc  _current_iq_sum   
          ;b    Buck_bb
          and   #07h  
          add   _current_pi_error1
          sacl  _current_pi_error1
          sub   #8
          blz   Buck_bb  
          sacl  _current_pi_error1
          lacc  _current_iq_sum 
          rpt   #2
          sfr
          add   #1
          add   _current_uqref 
          sacl  _current_uqref 
          b     current_pi_d

Buck_bb:          
          lacc  _current_iq_sum 
          rpt   #2
          sfr      
          add   _current_uqref 
          sacl  _current_uqref 
          
current_pi_d:
          lacc  _current_iq_err
          sub   _current_iq_err_old
          sacl  _pi_temp
          lt    _pi_temp
          mpy   _current_kd
          spm   3
          pac             
          sfr
          sfr 
          add   _current_uqref
          sacl  _current_uqref 

Buck_pi_limit:
          lacc  _current_uqref 
          abs
          sub  #1155
          BLZ   Buck_pwm_over        ;限幅值
          lacc  _current_uqref
         
          blz  Buck_u_limit
          SPLK  #1155,_current_uqref 
          B     Buck_pwm_over
Buck_u_limit:
          SPLK  #-1155,_current_uqref 
Buck_pwm_over:
          lacc  _current_iq_err
          sacl  _current_iq_err_old
;============================================
;d轴电流环
;============================================
current_pi_id_p:
          ldpk  _isd
          lacc  #0
          sub   _isd
          sacl  _current_id_err
          lt    _current_id_err
          mpy   _current_kp
          spm   3
          pac      
          sfr
          sfr    
          sacl   _current_udref          
current_pi_id_i:
          mpy    _current_ki    
          ;b     Buck_cc
          spm    0
          pac
          and    #07ffh
          add    _current_pi_error2
          sacl   _current_pi_error2     
          sub    #2048
          blz    Buck_cc
          sacl   _current_pi_error2
          spm    3
          pac  
          sfr
          sfr   
          sfr
          sfr  
          sfr
          add   #1
          add   _current_id_sum
          sacl  _current_id_sum
          b     pi_onit2 

Buck_cc:
          spm   3
          pac
          sfr
          sfr   
          sfr
          sfr     
          sfr
          add   _current_id_sum
          sacl  _current_id_sum
                    
pi_onit2:
          lacc  _current_id_sum
          abs
          sub   #9240
          blz   yg2
          lacc  _current_id_sum
                     
          
          blz   no_neg_id                
          splk  #9240,_current_id_sum                    
          b     yg2
no_neg_id:  
          splk  #-9240,_current_id_sum
yg2:       
          lacc  _current_id_sum   
          ;b    Buck_dd
          and   #07h  
          add   _current_pi_error3
          sacl  _current_pi_error3
          sub   #8
          blz   Buck_dd  
          sacl  _current_pi_error3
          lacc  _current_id_sum 
          rpt   #2
          sfr
          add   #1
          add   _current_udref 
          sacl  _current_udref 
          b     current_pi_id_d

Buck_dd:          
          lacc  _current_id_sum 
          rpt   #2
          sfr      
          add   _current_udref 
          sacl  _current_udref 
          
current_pi_id_d:
          lacc  _current_id_err
          sub   _current_id_err_old
          sacl  _pi_temp
          lt    _pi_temp
          mpy   _current_kd
          spm   3
          pac             
          sfr
          sfr 
          add   _current_udref
          sacl  _current_udref 

Buck_pi_limit_id:
          lacc  _current_udref 
          abs
          sub  #1155
          BLZ   Buck_pwm_over_id        ;限幅值
          lacc  _current_uqref
         
          blz  Buck_u_limit_id
          SPLK  #1155,_current_udref 
          B     Buck_pwm_over_id
Buck_u_limit_id:
          SPLK  #-1155,_current_udref 
Buck_pwm_over_id:
          lacc  _current_id_err
          sacl  _current_id_err_old

;================================================
;恢复C语言现场
;================================================
;          SBRK       #2
;          LAR        AR0,*-
;          PSHD       *
          ret  
          
;=================================================
;电流电压量坐标变换,包括CLARKE和PARK变换以及反变换
;=================================================	
_current_clarke:
;=================================================
;C语言调用保护
;=================================================
;          POPD        *+
;          SAR        AR0,*+
;          SAR        AR1,*
;          LARK       AR0,#1
;          LAR        AR0,*0+,AR0
;========================================================================
; clarke transformation
;  i_alfa=ia;
;  i_beta=(1/sqrt(3))*(2*ib+ia);
;========================================================================	
        setc    SXM 
        ldpk    _ia
     	LACC	_ia                  ;foc_isalfa=foc_ia
		sacl	_is_alfa				;foc_isalfa,4.12f 
		LACC	_ib,1				;foc_isbeta=(2*foc_ib+foc_ia)/sqrt(3) 
		add		_ia
		sacl	_is_temp
		lt		_is_temp
		mpy		#sqrt3inv			;foc_sqrt3inv=(1/sqrt(3))=093dh,4.12f
		spm     0
		pac	
		sach	_is_beta,4			;foc_isbeta,4.12f 
;========================================================================
; park transformation
; isd=foc_isalfa*cosTeta_cm+foc_isbeta*sinTeta_cm
; isq=-foc_isalfa*sinTeta_cm+foc_isbeta*cosTeta_cm
;========================================================================		
dq_change:
        spm   	0
        lt   	_is_beta 
        mpy  	_sin_value
        lta  	_is_alfa
        mpy  	_cos_value
        mpya 	_sin_value
        sach  	_isd,1                   
        lacc  	#0
        lt    	_is_beta
        mpys  	_cos_value
        apac
        sach  	_isq,1                          
;=================================================
;调用完毕,跳出
;=================================================        
;          SBRK       #2
;          LAR        AR0,*-
;          PSHD        *
          ret          
;===========================================================================
; inverse  park    transformation
;  vsbeta_ref=vsq_ref*cosTeta_cm+vsd_ref*sinTeta_cm
;  vsalfa_ref=-vsq_ref*sinTeta_cm+vsd_ref*cosTeta_cm
;===========================================================================
_park_inv:       
;=================================================
;C语言调用保护
;=================================================
;          POPD        *+
;          SAR        AR0,*+
;          SAR        AR1,*
;          LARK       AR0,#1
;          LAR        AR0,*0+,AR0
;==================================================
        setc SXM
        
        spm    	0
        lacc   	#0
		ldpk    _current_udref
		lt    	_current_udref                	
		mpy   	_sin_value
		lta   	_current_uqref           		
		mpy   	_cos_value
		mpya  	_sin_value
		sach  	_vsbeta_ref,1
		 
		lacc   	#0
		lt    	_current_udref       			
		mpys   	_cos_value
		apac
		sach   	_vsalfa_ref,1
;=================================================
;调用完毕,跳出
;=================================================        
;          SBRK       #2
;          LAR        AR0,*-
;          PSHD        *
          ret         
          
_Sincos:        
;=================================================
;C语言调用保护
;=================================================
;          POPD        *+
;          SAR        AR0,*+
;          SAR        AR1,*
;          LARK       AR0,#1
;          LAR        AR0,*0+,AR0
;=================================================        
        spm 	0
        setc 	sxm
        ldpk  	_thet
        lt 	    _thet 
        mpy     _thet_count
        spm     0
        pac
        sacl   _thet1

⌨️ 快捷键说明

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