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

📄 control1.asm

📁 基于DSP2407的汇编语言实现交流电机异步调速系统控制程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
**************头文件定义***************
**************************************
       .include "lf2407a.h"
      ; .mmregs
      ; .global  _c_int0
       .sect  "vectors"           
          b    _c_int0              ;系统复位入口地址
          b    _c_int1              ;_c_int1:功率保护中断入口、高优先级的SCI中断以后再说
          b    _c_int2              ;_c_int2:pwm中断入口地址
_c_int3   b    GISR3      
_c_int4   b    GISR4
          b    _c_int5              ;低优先级的接收发送中断
_c_int6   b    GISR6  
        .space  22*16               ;36-2*7=22
          b    NMIINT               ;0024h--->36
        .space  26*16               ;003eh--->62,62-36=26
  
STACK   .usect  "stack",10          ;现场保护
DATSAVE .usect  "datsave",2048

UF_E   .usect   "datasave" ,2048    ;UF_TX:  8000h-87ffh
ISQQ_E .usect   "datasave" ,2048    ;ISQQ_TX:8800h-8fffh
USQ_E  .usect   "datasave" ,2048    ;USQ_TX: 9000h-97ffh
USD_E  .usect   "datasave" ,2048    ;USD_TX: 9800h-9fffh
USa_E  .usect   "datasave" ,2048    ;USa_TX: 0a000h-0a7ffh
USb_E  .usect   "datasave" ,2048    ;USb_TX: 0a800h-0afffh
ISA_E  .usect   "datasave" ,2048    ;ISA_TX: 0b000h-0b7ffh
ISB_E  .usect   "datasave" ,2048    ;ISB_TX: 0b800h-0bfffh
ISD_E  .usect   "datasave" ,2048    ;ISD_TX: 0c000h-0c7ffh
ISQ_E  .usect   "datasave" ,2048    ;ISQ_TX: 0c800h-0cfffh
Fa_E   .usect   "datasave" ,2048    ;Fa_TX : 0d000h-0d7ffh
Fb_E   .usect   "datasave" ,2048    ;Fb_TX : 0d800h-0dfffh 
;N_ref    .usect   "datasave" , 1    ;        0e000h
;Kf_E     .usect   "datasave" , 1    ;        0e001h
;Knp_E    .usect   "datasave" , 1    ;        0e002h
;Kni_E    .usect   "datasave" , 1    ;        0e003h
;Knd_E    .usect   "datasave" , 1    ;        0e004h
;Kqp_E    .usect   "datasave" , 1    ;        0e005h
;Kqi_E    .usect   "datasave" , 1    ;        0e006h
;Kqd_E    .usect   "datasave" , 1    ;        0e007h
;Kdp_E    .usect   "datasave" , 1    ;        0e008h
;Kdi_E    .usect   "datasave" , 1    ;        0e009h
;Kdd_E    .usect   "datasave" , 1    ;        0e00ah

        .sect   "table"
sintab  .include  "sin.tab.bak"
        
******************常量初始化及变量的定义***************
******************************************************
        .data
SQRT3inv	 .set	093Ch	        ;1/SQRT(3)=093Ch,4.12f			
SQRT3		 .set	1BB6h	        ;SQRT(3)=01BB6h, 4.12f
SQRT32		 .set	0DDBh           ;SQRT3/2=0DDBh,  4.12f
inv2		 .set	0800h	        ;1/2=0.5=0800h,  4.12f
Polepairs	 .set	2               ;磁极对数 
;Kvf 		 .set	6333h	        ;4.12f	kvfp=310/50=6.2
Kvf 		 .set	9e8h	        ;4.12f	kvfp=310/500//此处改动//
Kvp		     .set	0D36h	        ;8.8f	  kvp=4096/310=13.2129  
v_rep1		 .set	0	            ;16.0f  0v	  vf=0
v_rep2		 .set	10	            ;16.0f	 10v	vf=1
v_rep3		 .set	30	            ;16.0f  20v  	vf=2   
v_rep4		 .set	50		        ;16.0f  50v 	vf=3                
pwmprd       .set   2000            ;10MHZ*4(25ns)
                                    ;开关周期100us PWMPRD=100us/2/25ns=2000
Kr         .set  0eh
Kt         .set  275h;0d80h         ;Q15,ws=3.2    3.2/50*(0.3/1)
K          .set  51E0h              ;65536/200,Q6
Wp         .set  53e2h              ;68ddh 1.15f 
                                    ;额定时单位hz转过的电角度2*pi*fn/10khz=0.0314rad,因而额定时(50hz)转子磁链位置在一个机械周期中有2*pi/0.0314=200个增量
                                    ;程序中用65536(ffffh)个数表示0~360度,所以额定时一个增量对应的正弦表数值65536/200=327.68=328=148h       
                                    ;在任意转速时(或任意频率时)一个增量对应的正弦表数值327.68/500*f_refbuf=3.28*f_refbuf(16.0f)
                                    ;定义Wp=0.65536   53e2h(1.15f)
v_bias        .set  1000h           ;4.12f,310/310*4096=1000h
v_bias_maan   .set  1000h           ;4.12,310/310*4096=1000h,270/310*4096=defh
t_trans       .set  3e8h            ;4.12f,2000/8192*4096=3e8h
t_trans_maan  .set  47ch            ;2*270/310*t_trans_maan=2000
SPEEDSTEP  .set  10 
KSPEED     .set  68dbh;1062h        ;//Q11;8.8f 10个电流采样周期 码盘2500脉冲/转          
                                    ;.set所赋的初值超过1000h时,此变量不可作为立即数直接参与乘法运算
KCURRENT   .set  3198h
Knp        .set  2baeh              ;PID speed regulators parameters
Kni        .set  028h               ;4.12f,0.01
Knd        .set  0h

Kqp        .set  1000h              ;PID current regulators parameters
Kqi        .set  10h                ;4.12f
Kqd        .set  0h

Kdp        .set  1000h              ;PID current regulators parameters
Kdi        .set  10h                ;4.12f
Kdd        .set  0h    

i_max_pos   .set    1000h;0ccch           ;q轴参考电流电流上限,额定电流(5A)的0.8倍,4.12f
v_max_pos	.set	1400h	        ;q、d轴电压上限,额定电压(310v)1.25倍,1.25pu=5120=1400h

i_max_hall  .set    31              ;霍尔传感器检测最大电流  
i_max_ac    .set    5               ;交流电机额定电流
i_lim_np	.set    10000	        ;过流1S
i_ac_lim	.set	2000h           ;交流电机电流限制 2倍于额定电流,超过一定时间停机
f_add_np    .set    10              ;f_ref每10*100us加减1hz

ctrl_n    
         .bss  n_fed,1              ;feedback speed
         .bss  flag,1 
         
         .bss  tx_bit_flag,1
         .bss  rx_bit_flag,1 
         .bss  bit_flag,1   
         .bss  spi_flag,1
         .bss  da_flag,1
         .bss  sci_flag,1 
         .bss  save_flag,1
         .bss  sta_save_flag,1
         .bss  option_flag,1 
         
          .bss  option,1            
		  .bss  tmp,1 
		  .bss  tmp0,1  
	      .bss	tmp1,1
	      .bss  tmp3,1       ;计算转速专用
	      .bss  tmp4,1       ;save专用
	      .bss  tmp5,1       ;save专用
	      
	      .bss  K_vf,1
	      .bss  Umax,1
	      .bss  f_ref,1
	      .bss  v_rep_3,1
	      .bss  va,1
	      .bss  vb,1
	      .bss  vc,1
	      .bss  va_b,1
	      .bss  vb_b,1
	      .bss  vc_b,1
	      .bss  a_pwm,1
	      .bss  b_pwm,1
	      .bss  c_pwm,1
	      .bss  vsalfa,1
	      .bss  vsbeta,1
	      
	      .bss  Kn_p,1          ;速度环PID参数
	      .bss  Kn_i,1
	      
	      .bss  Kq_p,1          ;q轴电流调节器PID参数
          .bss  Kq_i,1
          
          .bss  Kd_p,1          ;d轴电流调节器PID参数
          .bss  Kd_i,1
	       
          .bss  isa,1            ;定子电流
          .bss  isb,1
          .bss  isc,1
			    
          .bss  vsal_ref,1       ;alfa-axis referance voltage
		  .bss  vsbe_ref,1
		  .bss	t1,1             ;svpwm t1
          .bss	t2,1 
          .bss  t1sat,1
          .bss  t2sat,1 
          .bss	v_ref1,1         ;variable for sector calculation
          .bss	v_ref2,1        
          .bss	v_ref3,1 
          .bss	taon,1           ;pwm commutation instant phase 1
          .bss	tbon,1     
          .bss	tcon,1   
            
		  .bss	X,1              ;svpwm variable
          .bss	Y,1        
          .bss	Z,1
          .bss  A,1
          .bss  B,1
          .bss  C,1       
          .bss	sector,1
          .bss  VDCinvT,1
          .bss	PWMPRD,1
          
		  .bss  fa,1
		  .bss  fb,1
		  .bss  isalfa,1         ;alfa-axis current
		  .bss  isbeta,1 
		  .bss  isdref,1         ;d-axis  referance current
		  .bss  isqref,1
		  .bss  isd,1            ;d-axis current
		  .bss  isq,1 
		  .bss  vsdref,1         ;d-axis referance voltage
		  .bss  vsqref,1     
		  .bss  epiq,1           ;q-axis current regulator error
		  .bss  epid,1 
		  .bss  xid,1            ;d-axis current regulator intrgral component
		  .bss  xiq,1
		    	
          .bss  Kspeed,1
          .bss  n_ref,1            ;speed reference
          .bss  epin,1             ;speed regulator integral error
          .bss  xin,1
          .bss  xin_h,1            ;speed regulator integral component                   
          .bss  xin_l,1
          .bss  upi,1
          .bss  upi_h,1            ;PID regulators output(current and speed)
          .bss  upi_l,1
          .bss  elpi,1             ;PID regulators limitation error (current and speed)
          
          .bss  ia,1
          .bss  ib,1
          .bss  ia1,1       ;结果寄存器暂存变量
          .bss  ia2,1
          .bss  ia3,1
          .bss  ia4,1
          .bss  ia5,1
          .bss  ia6,1
          .bss  ia_min,1
          .bss  ia_max,1
          .bss  Kcurrent,1
          
          .bss  N_rep,1     ;静态补偿次数32768次
          .bss  ia_rep,1    ;a相电流静态补偿变量 
          .bss  ia_rep_l,1
          .bss  ia_rep_h,1
          .bss  ib_rep,1    ;b相电流静态补偿变量
          .bss  ib_rep_l,1
          .bss  ib_rep_h,1
          .bss  i_lim_n,1   ;过流判断计数值,用于和i_lim_np比较
          
          .bss   f_add_n,1
          .bss   f_refbuf,1 
          .bss   f_refbuf1,1
          .bss   f_ref_rx,1 
          .bss   f_ref_rx1,1
          .bss   ref_rx_h,1
          .bss   ref_rx_l,1 
          .bss   i_mr,1
          .bss   fs,1  
          .bss   wp,1 
          .bss   theta_cm,1     ;theta_cm(k+1)=theta_cm(k)+theta_w  
          .bss   theta_w,1       ;任意转速时单位hz转过的角度增量,theta_w=Wp*f_refbuf  
          .bss   theta_cm1,1
          .bss   theta_w1,1 
          .bss   sin_theta_cm,1
          .bss   cos_theta_cm,1
          
          .bss  N_pulse,1                  
          .bss  encincr,1        ;encoder pulses between two consecutive sampling periods
          .bss  speedtmp,1       ;used to accumulate encoder pluses increments
          .bss  speedstep,1      ;sampling periods down couter used to define speed sampling period
          
          .bss  da_buf1,1
          .bss  da_buf2,1
************以下变量页面地址起始于0380h,引用时ldp  #****7h**
          .bss  k,1             ;闭环计算磁链角查表用
          .bss  Kn_d,1
          .bss  Kq_d,1
          .bss  Kd_d,1
          .bss  temp,1
          .bss  n_fed_tx,1
************************************************************                                                               

kickdog    .macro  
	 ldp	 #DP_PF1
	 splk	 #006Fh,WDCR
	 splk	 #5555h,WDKEY
	 splk	 #0aaaah,WDKEY
	 splk	 #006Fh,WDCR
		.endm 
  
fin_tab   .macro
   clrc  SXM              ;抑制累加器移位时符号扩展,保证tmp为正数
   ldp   #6
   lacl  tmp              ;此处的右移除2,因为相限判断时tmp扩大了一倍
   sfr
   sacl  tmp              ;tmp范围只能为(0~2000h)
   lacc  #sintab
   add   tmp
   tblr  sin_theta_cm     ;返回该角度对应的正弦值
   
   lacl  #1fffh
   sub   tmp
   add   #sintab
   tblr  cos_theta_cm      ;返回该角度对应的余弦值
   setc  SXM
   .endm         
          
**********主程序*******************************
***********************************************
          .text
_c_int0:
      setc   INTM                     ;初始化开始时关中断
      clrc   SXM
      clrc   OVM
      clrc   CNF
        
      
      
      ldp    #DP_PF1                   ;系统初始化
      splk   #0000000011100101b,SCSR1  ;bit0,无效地址检测位,初始化时应清零,若出现无效地址将会发生NMI中断
      splk   #0000000001001010b,SCSR2
      kickdog 
            lacc  #0                   ;清所有EVA、EVB、ADC寄存器
			ldp   #DP_EVA
			sacl	GPTCONA
			sacl	T1CNT
			sacl	T1CMPR 		
			sacl	T1PR 		
			sacl	T1CON 		
			sacl	T2CNT		
			sacl	T2CMPR 		
			sacl	T2PR 		
			sacl	T2CON
			sacl	COMCONA
			sacl	CMPR1 		
			sacl	CMPR2 		
			sacl	CMPR3
			sacl	CAPCONA 	
			sacl	CAPFIFOA 	
			sacl	CAP1FIFO 	
			sacl	CAP2FIFO 	
			sacl	CAP3FIFO 	
			sacl	CAP1FBOT 	
			sacl	CAP2FBOT 	
			sacl	CAP3FBOT
			
			ldp		#DP_EVB
			sacl	GPTCONB
			sacl	T3CNT		
			sacl	T3CMPR 		
			sacl	T3PR 		
			sacl	T3CON 		
			sacl	T4CNT		
			sacl	T4CMPR 		
			sacl	T4PR 		
			sacl	T4CON
			sacl	COMCONB
			sacl	CMPR4 		
			sacl	CMPR5 		
			sacl	CMPR6
			sacl	CAPCONB 	
			sacl	CAPFIFOB 	
			sacl	CAP4FIFO 	
			sacl	CAP5FIFO 	
			sacl	CAP6FIFO 	
			sacl	CAP4FBOT 	
			sacl	CAP5FBOT 	
			sacl	CAP6FBOT
			
			ldp	  #DP_PF2
			sacl	ADCTRL1
			sacl	ADCTRL2
			sacl	MAXCONV
			sacl	CHSELSEQ1
			sacl	CHSELSEQ2
			sacl	CHSELSEQ3

⌨️ 快捷键说明

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