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

📄 motor velocity control dsp program.txt

📁 three-phase Permanent Magnet Synchronous Motor(PMSM) velocity control DSP program
💻 TXT
📖 第 1 页 / 共 3 页
字号:
《三相永磁电机磁场定向速度控制DSP程序》
         .INCLUDE "240X.H"
;-----------------------以下定义变量和常数-------------------------------------------------------------
               .DATA
KCURRENT    .SET 1383H            ;电流ipuQ12的转换系数19.5的Q8格式
PWMPRD      .SET 600              ;周期寄存器值60us/(2*50ns) 
VMIN         .SET 0EC00H           ;电压最小极限-1.25 pu,Q12
VMAX        .SET 1400H            ;电压最大极限1.25 pu,Q12
ISMAX        .SET 1199H            ;相电流最大极限4.51A(10%额定值),Q12
ISQREFINIT   .SET 01000H            ;isqref初值4.1A(Q12) (1000H = IBASE)
KENCODER   .SET  3                ;磁极对数
ENCPULSES   .SET 4096              ;编码器每转脉冲数(1024*4)
KSPEED       .SET 0BE7H           ;将脉冲数转换成速度系数,11.9的Q8格式
SPEEDSTEP    .SET 28               ;速度采样周期28个中断
               .BSS  T1_PERIODS,1  ;T1周期值的Q5格式
               .BSS  KI,1            ;电流积分系数
               .BSS  KPI,1           ;电流比例系数
               .BSS  KCOR,1         ;电流积分修正系数
               .BSS  KISPEED,1      ;速度积分系数
               .BSS  KPISPEED,1     ;速度比例系数
               .BSS  KCORSPEED,1   ;速度积分修正系数
               .BSS  TMP,1          ;临时变量
               .BSS  IA,1            ;相电流IA
               .BSS  IB,1             ;相电流IB
               .BSS  IC,1             ;相电流IC
               .BSS  SIN,1            ;SIN值Q12
               .BSS  COS,1           ;COS值Q12
               .BSS  DEC_MS,24      ;6个逆阵,Q14格式
               .BSS  CMP_1,1         ;第1基本矢量,Q0格式
               .BSS  CMP_2,1         ;第2基本矢量, Q0格式
               .BSS  CMP_0,1         ;0基本矢量/2, Q0格式
               .BSS  FIRST_TOG,1     ;存放第一次比较匹配的比较器地址
               .BSS  SEC_TOG,1       ;存放第二次比较匹配的比较器地址
               .BSS  TETA_E,1        ;转子电角度[0;1000H],对应[0;360]Q12格式
               .BSS  ISALFA,1        ;ALFA轴电流
               .BSS  ISBETA,1        ;BETA轴电流
               .BSS  VSAL_REF,1      ;ALFA轴参考电压
               .BSS  VSBE_REF,1      ;BETA轴参考电压
               .BSS  ISDREF,1         ;D轴参考电流
               .BSS  ISQREF,1         ;Q轴参考电流
               .BSS  ISD,1             ;D轴电流
               .BSS  ISQ,1             ;Q轴电流
               .BSS  VSDREF,1         ;D轴参考电压
               .BSS  VSQREF,1         ;Q轴参考电压
               .BSS  EPIQ,1            ;Q轴电流调节偏差
               .BSS  EPID,1            ;D轴电流调节偏差
               .BSS  XIQ,1             ;Q轴电流调节器积分累计量
               .BSS  XID,1             ;D轴电流调节器积分累计量
               .BSS  N,1               ;速度
               .BSS  N_REF,1          ;速度参考值
               .BSS  EPISPEED,1       ;速度偏差
               .BSS  XISPEED,1        ;速度调节器积分累计量
               .BSS  P,1               ;SVPWM扇区索引 
               .BSS  INITPHASE,1      ;初始化相位标志
               .BSS  TETA_M,1         ;转子机械转角
               .BSS  ISQREFMIN,1      ;Q轴电流最小极限
               .BSS  ISQREFMAX,1     ;Q轴电流最大极限
               .BSS  SECTOR,1         ;SVPWM扇区数
               .BSS  INDEX,1           ;查SIN表索引
               .BSS  UPI,1             ;PI调节器输出
               .BSS  ELPI,1            ;PI调节器极限偏差
               .BSS  ENCODEROLD,1   ;前一个采样周期时编码脉冲数
               .BSS  ENCINCR,1        ;编码脉冲增量
               .BSS  SPEEDTMP,1       ;编码脉冲增量累计值
               .BSS  SPEEDSTEP,1      ;速度采样周期减计数器
               .BSS  WAITTIME,1       ;相位初始化等待循环次数
;-----------------------以下是程序-----------------------------------------------------------------------------
         .TEXT
;-----------------------初始化程序-----------------------------------------------------------------------------
         CLRC      CNF               ; B0
         SETC       OVM
         SPM        0
         SETC       SXM               ;扩展符号
         LAR        AR0,#DEC_MS       ;传送逆阵数据
         LAR        AR1,#(24-1)          ; 24个
         LACC       #ANGLES_          ; 指向源
         LARP       AR0 
INIT_TBL  
         TBLR       *+,AR1                 ;下一个
         ADD        #1                   ;下一个地址
         BANZ       INIT_TBL,AR0          ;AR1=0结束 
         LAR        AR4,#79H            ;用于堆栈保存现场,B2(60H-80H)
         LDP        #0E0H
         SPLK       #68H, WDCR         ;不用看门狗
         SPLK       #0284H,SCSR1        ;CLKIN 10MHZ,CLKOUT 20MHZ
         LDP        #0E1H
         SPLK       #0900H,ADCTRL1     ;ADC预分频10,1MHZ
         SPLK       #0001H,MAXCONV    ;两个通道
         SPLK       #0010H,CHSELSEQ1   ;选择ADCIN0和ADCIN1通道
         LACC      MCRA
         OR         #0FD8H              ;设置PWM1-6,QEP1-2
         SACL      MCRA
;-----------------------变量初始化-----------------------------------------------------
         LDP        #0
         SPLK       #19200,T1_PERIODS   ;T1周期值的Q5格式,600*32
         SPLK       # 7AH,KI              ;积分系数0.03的Q12格式
         SPLK       #999H,KPI             ;比例系数0.60的Q12格式
         SPLK       #0CCH,KCOR          ;KCOR = KI/KPI=0.05,Q12格式
         SPLK       #7AH,KISPEED        ;速度积分系数0.03的Q12格式
         SPLK       #6800H,KPISPEED     ;速度比例系数6.5的Q12格式
         SPLK       #12H,KCORSPEED     ;KISPEED/KPISPEED=0.0046,Q12
         LACC      #ISMAX
         SACL      ISQREFMAX
         NEG
         SACL      ISQREFMIN
         LACC      #0
         SACL      ISQREF
         SACL      ISDREF
         SACL      N_REF
         SACL      INDEX
         SACL      XID
         SACL      XIQ
         SACL      XISPEED
         SACL      UPI
         SACL      ELPI
         SACL      INITPHASE
         LACC      #0A000H
         SACL      WAITTIME
;-----------------------事件管理器A初始化-------------------------------------------------------------------
         LDP       #0E8H
         SPLK      #0666H,ACTRA       ;引脚PWM1,3,5高有效,2,4,6低有效
         SPLK      #300,CMPR1          ;占空比初值为0
         SPLK      #300,CMPR2
         SPLK      #300,CMPR3
         SPLK      #01F4H,DBTCONA     ;死区时间1.6us
         SPLK      #8200H,COMCONA    ;定时器下溢比较器重载,允许比较
         SPLK      #PWMPRD,T1PR     ;周期寄存器值600
         SPLK      #0,T1CNT
         SPLK      #0840H,T1CON        ;连续增减计数方式,预分频为1,允许T1
         SPLK      #0000H,T2CNT        ;编码脉冲计数器
         SPLK      #0FFFFH,T2PR 
         SPLK      #9870H,T2CON        ;定向增减,允许编码接口
;-----------------------中断初始化--------------------------------------------------------------------
         SPLK      #0FFFH,EVAIFRA     ;清事件管理器A所有中断标志
         SPLK      #000FH,EVAIFRB
         SPLK      #000FH,EVAIFRC
         SPLK      #0200H,EVAIMRA     ;开T1下溢中断
         SPLK      #0000H,EVAIMRB
         SPLK      #0000H,EVAIMRC
         LDP       #0H
         LACC      #0FFH
         SACL      IFR                  ;清所有系统中断标志
         LACC      #0000010B
         SACL      IMR                 ;开INT2中断
         CLRC      INTM                ;开总中断
;----------------------初始化结束-------------------------------------------------------------------



;-----------------------T1下溢中断处理子程序-----------------------------------------------------
_C_INT2
;-----------------------保存现场------------------------------------------------------------------------
         MAR       *,AR4                ;AR4作为堆栈指针
         MAR       *-
         SST        #1,*-                 ;保存状态寄存器1
         SST        #0,*-                 ;保存状态寄存器0
         SACH      *-                    ;保存ACC高位
         SACL       *-                    ;保存ACC低位
         LDP        #0E0H 
         LACC       PIVR                 ;读中断向量
         LDP       #0E8H
         SPLK      #0200H,EVAIFRA        ;清中断标志位
;-----------------------电流采样和AD转换------------------------------------------------------
         LDP       #0E1H
         SPLK      #2000H,ADCTRL2      ;启动AD转换,IA-ADCIN0,IB-ADCIN1
CONVERSION
         BIT       ADCTRL2,3             ;将忙状态位复制到TC
         BCND     CONVERSION,TC       ;等待
         LACC      RESULT0,10
         LDP       #0
         SACH     IA
         LDP       #0E1H
         LACC      RESULT1,10
         LDP       #0
         SACH      IB
;-----------------------相位初始化-----------------------------------------------------------------
         LACL      INITPHASE 
         BCND     RUN,NEQ               ;初始化?已初始过则跳转
         LACC      #0FC00H               ;设置TETA = 0FC00H= -90°,Q12
         SACL      TETA_E 
         LACC      #ISQREFINIT           ;Q轴电流等于参考电流
         SACL      ISQREF 
         LACC      #0                      ;对变量和标志清零
         SACL      ISDREF
         SACL      TETA_M 
         SACL      ENCODEROLD 
         SACL      N 
         SACL      SPEEDTMP 
         LACC      #SPEEDSTEP           ;SPEEDSTEP=28
         SACL      SPEEDSTEP
         LDP        #0E8H
         SPLK       #0,T2CNT              ;编码器计数清零
         LDP        #0
         LACC      #WAITTIME            ;循环次数A000H,等待
         SUB        #1
         SACL      WAITTIME
         BCND      WAIT,NEQ
         SPLK       #1, INITPHASE        ;INITPHASE=1,相位初始化完成
;-----------------------读编码器脉冲数,计算转角增量和转子绝对位置----------------------------------
RUN     
         LDP        #0E8H
         LACC       T2CNT                ;读编码脉冲
         ;NEG                              ;编码器反接线时
         LDP        #0
         SACL       TMP
         SUB       ENCODEROLD          ;减去前一个周期测的脉冲数
         SACL      ENCINCR              ;得到编码增量
         ADD       TETA_M               ;得到转子绝对位置
         BCND     ENCMAGZERO,GEQ     ;调整TETA_M的范围[0;ENCPULSES-1]
         ADD      #ENCPULSES           ;如果TETA_M是负值调整为正
ENCMAGZERO
         SACL      TETA_M 
         SUB       #ENCPULSES           ;检测TETA_M是否大于360°
         BCND      ENCMINMAX,LT       ;不大于则跳转
         SACL      TETA_M               ;大于则保存差值
ENCMINMAX 

⌨️ 快捷键说明

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