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

📄 arithmetic.asm

📁 永磁同步电机驱动控制
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          sub   #4624
          blz   yg2
          lacc  _current_id_sum
                     
          
          blz   no_neg_id                
          splk  #4624,_current_id_sum                    
          b     yg2
no_neg_id:  
          splk  #-4624,_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  #578
          BLZ   Buck_pwm_over_id        ;限幅值
          lacc  _current_uqref
         
          blz  Buck_u_limit_id
          SPLK  #578,_current_udref 
          B     Buck_pwm_over_id
Buck_u_limit_id:
          SPLK  #-578,_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
        lacc 	_thet 
        bgz  	onit
        add  	#A360
        sacl 	_thet1
onit:
        sacl  	_thet1
        sub  	#A270
        blz  	cc2
        splk 	#-1,_s_sin
        splk 	#1,_s_cos
        sacl 	_ang_cos
        sub  	#A90
        neg
        sacl 	_ang_sin
        b    	cc5
cc2:    
		add 	#A270
        sub 	#A180  
        blz 	cc3
        splk 	#-1,_s_sin
        splk 	#-1,_s_cos
        sacl 	_ang_sin
        sub  	#A90
        neg
        sacl 	_ang_cos
        b    	cc5
cc3:     
	    add 	#A180
        sub 	#A90
        blz 	cc4
        splk 	#1,_s_sin
        splk 	#-1,_s_cos
        sacl 	_ang_cos
        sub  	#A90
        neg
        sacl 	_ang_sin
        b    	cc5
cc4:           
		add  	#A90
        splk 	#1,_s_sin         
        splk 	#1,_s_cos
        sacl 	_ang_sin
        sub  	#A90
        neg 
        sacl 	_ang_cos
        
cc5:           
		lacc 	_ang_sin
        add  	#Stable
        tblr 	_sin_temp
        lt   	_s_sin
        mpy  	_sin_temp
        spl  	_sin_value
        
        lacc 	_ang_cos
        add  	#Stable
        tblr 	_sin_temp
        lt   	_s_cos
        mpy  	_sin_temp
        spl  	_cos_value
;=================================================
;调用完毕,跳出
;=================================================        
;          SBRK       #2
;          LAR        AR0,*-
;          PSHD        *
          ret         
               
;===========================================================================
;svpwm modulation
;===========================================================================
_swpwm_modulation:
;=================================================
;C语言调用保护
;=================================================
;          POPD        *+
;          SAR        AR0,*+
;          SAR        AR1,*
;          LARK       AR0,#1
;          LAR        AR0,*0+,AR0
;================================================
         setc SXM
        ldpk    _vsbeta_ref
        lacc  	_vsbeta_ref   
        sacl  	_vref1
        lt    	_vsalfa_ref
        mpy   	#sqrt32
        spm   	0
        pac 
        sach  	_vref4,4
        lacc  	_vsbeta_ref 
        sfr
        neg
        sacl  	_vref5
        add   	_vref4
        sacl  	_vref2
        lacc  	_vref5
        sub   	_vref4
        sacl  	_vref3
         
        lacc  	_vref1
        sacl  	_x
        lacc  	_vref4
        sub   	_vref5
        sacl  	_y
        lacc  	_vref4
        add   	_vref5
        neg
        sacl  	_z
             
             
        lacc  	_vref1
        bgz   	ua
        splk  	#0,_a
        b     	uaon
ua:
        splk  	#1,_a
              
uaon:
        lacc  	_vref2
        bgz   	ub
        splk   	#0,_b
        b     	ubon
ub:
        splk  	#1,_b
ubon:
        lacc 	_vref3
        bgz   	uc
        splk  	#0,_c
        b  		ucon
uc:
        splk  	#1,_c
ucon:   
        lacc  	_c,2
        add  	_b,1
        add  	_a 
        sacl  	_sector
        sub  	#1
        bz   	f_sector1
        sub  	#1
        bz   	f_sector2
        sub   	#1
        bz   	f_sector3
        sub   	#1
        bz   	f_sector4
        sub   	#1
        bz   	f_sector5
        sub   	#1   
        bz   	f_sector6
        b    	cmp_ok
f_sector1:
        lacc  	_z
        sacl  	_t1
        lacc  	_y
        sacl  	_t2
        
        b    	t1t2out 
           
f_sector2:
        lacc 	_y
        sacl 	_t1
        lacc  	_x
        neg
        sacl  	_t2
    
        b    	t1t2out   
            
f_sector3:
        lacc  	_z
        neg
        sacl 	_t1
        lacc  	_x
              
        sacl 	_t2
   
        b    	t1t2out  
          

                            
f_sector4:
        lacc  	_x
        neg
        sacl  	_t1
        lacc  	_z
        sacl  	_t2 
   
        b    	t1t2out 
f_sector5:
        lacc   	_x
             
        sacl  	_t1
        lacc  	_y
        neg
        sacl  	_t2
 
        b    	t1t2out 
          
f_sector6:
        lacc 	_y
        neg
        sacl  	_t1
        lacc  	_z
        neg
        sacl  	_t2
        
t1t2out:     
        b   	t1t2_ok

        lt   	_t1
        mpy  	#pwmprd
        spm  	1
        pac
              
        sach  	_t1,3
 
        lt  	_t2
        mpy   	#pwmprd
        spm  	1
        pac 
              
        sach  	_t2 ,3
t1t2_ok:              
        lacc   	_t1
        bgz   	t1_ok
        splk   	#0,_t1
t1_ok:
        lacc  	_t2
        bgz   	t2_ok
        splk   	#0,_t2
t2_ok:
        lacc   	_t1
        add    	_t2
        sacl   	_tmp
        sub    	#pwmprd
        blez   	nosaturation
             
              
        lacc  	#pwmprd,15
        rpt   	#15
        subc  	_tmp
        sacl  	_tmp
        lt    	_tmp
        mpy   	_t1
        spm    	0
        pac 
        sach  	_t1,1
        mpy   	_t2
        pac
        sach  	_t2,1
nosaturation:
        lacc  	#pwmprd
        sub   	_t1
        sub   	_t2
        sfr
        sacl  	_taon
        add  	_t1
        sacl  	_tbon
        add  	_t2
        sacl  	_tcon
              
        lacc  	_sector
        sub   	#1
        bnz   	nosect1
        lacc   	_tbon
        sacl   	_cmp1
        lacc   	_taon
        sacl   	_cmp2
        lacc   	_tcon
        sacl   	_cmp3
        b      	cmp_ok
              
nosect1:
        sub  	#1
        bnz   	nosect2
        lacc  	_taon
        sacl  	_cmp1
        lacc  	_tcon
        sacl  	_cmp2
        lacc   	_tbon
        sacl   	_cmp3
        b   	cmp_ok
                                                                    
nosect2:
        sub   	#1
        bnz   	nosect3
        lacc  	_taon
        sacl  	_cmp1
        lacc  	_tbon
        sacl  	_cmp2
        lacc   	_tcon
        sacl  	_cmp3
        b   	cmp_ok

nosect3:
        sub   	#1
        bnz   	nosect4
        lacc  	_tcon
        sacl   	_cmp1
        lacc   	_tbon
        sacl   	_cmp2
        lacc   	_taon
        sacl   	_cmp3
        b   	cmp_ok
        
nosect4:
        sub   	#1
        bnz   	nosect5
        lacc  	_tcon
        sacl  	_cmp1
        lacc   	_taon
        sacl   	_cmp2
        lacc   	_tbon
        sacl   	_cmp3
        b    	cmp_ok
            

nosect5:
        lacc   	_tbon
        sacl  	_cmp1
        lacc   	_tcon
        sacl   	_cmp2
        lacc  	_taon
        sacl 	_cmp3  
        
cmp_ok:
        lacc  	#pwmprd          ;反向逻辑需要进行以下修正
        sub    	_cmp1
        sacl   	_cmp1  
        lacc   	#pwmprd
        sub    	_cmp2
        sacl   	_cmp2
        lacc   	#pwmprd
        sub    	_cmp3
        sacl   	_cmp3  
        
        
;=================================================
;调用完毕,跳出
;=================================================        
;          SBRK       #2
;          LAR        AR0,*-
;          PSHD        *
         ret  
           
           

⌨️ 快捷键说明

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