亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? calcvel.s

?? 使用dsPIC30F 實現交流感應電機的矢量控制源代碼
?? S
字號:
;*******************************************************************
; Routines: InitCalcVel, CalcVel
;
;*******************************************************************

; Common to all routines in file

          .include "general.inc"
          .include "encoder.inc"

;*******************************************************************
; void InitCalcVel(void)
;         Initialize private velocity variables.  
;         iIrpPerCalc must be set on entry.
;*******************************************************************

; Register usage for InitCalcVel

          .equ Work0W,  w4   ; Working register
          .equ PosW,    w5   ; current position: POSCNT

;*******************************************************************

          .global   _InitCalcVel
          .global   InitCalcVel
_InitCalcVel:
InitCalcVel:

     ;; Disable interrupts for the next 5 instructions 
          DISI      #5

     ;; Load iPrevCnt & zero Delta
     ;; encoder value. Note: To get accurate velocity qVelMech must be 
     ;; calculated twice.
          mov.w     POSCNT,PosW         ; current encoder value
          mov.w     PosW,_EncoderParm+Encod_iPrevCnt
          clr.w     _EncoderParm+Encod_iAccumCnt

     ;; Load iVelCntDwn
          mov.w     _EncoderParm+Encod_iIrpPerCalc,WREG
          mov.w     WREG,_EncoderParm+Encod_iVelCntDwn

          return

;*******************************************************************
; CalcVelIrp
;
; Called from timer interrupt at specified intervals. 
;
; The interrupt interval, VelPeriod, MUST be less than the minimum time 
; required for 1/2 revolution at maximum speed.
; 
; This routine will accumulate encoder change for iIrpPerCalc interrupts,
; a period of time  = iIrpPerCalc * VelPeriod, and then copy the accumulation
; to iDeltaCnt for use by the CalcVel routine to calculate velocity.
; The accumulation is set back to zero and a new accumulation starts.
;
;Functional prototype:  void CalcVelIrp( void );
;
;On Entry:   EncoderParm must contain iPrevCnt, iAccumCnt, iVelCntDwn
;
;On Exit:    EncoderParm will contain iPrevCnt, iAccumCnt and iDeltaCnt
;                   (if countdown reached zero).
;
;Parameters: 
; Input arguments: None
;
; Return:
;   Void
;
; SFR Settings required: None
;
; Support routines required: None
;
; Local Stack usage: 3
;
; Registers modified: None
;
; Timing: About  29 instruction cycles (if new iDeltaCnt produced)
;
;=====================================================
; Equivalent C code
;{
;    register short Pos, Delta; 
;
;    Pos = POSCNT;
;
;    Delta = Pos - EncoderParm.iPrevCnt;
;    EncoderParm.iPrevCnt = Pos;
;
;    if( iDelta >= 0 )
;        {
;        // Delta > 0 either because 
;        //       1) vel is > 0 or 
;        //       2) Vel < 0 and encoder wrapped around 
;
;        if( Delta >=  EncoderParm.iCntsPerRev/2 )
;            {
;            // Delta >= EncoderParm.iCntsPerRev/2 => Neg speed, wrapped around
;
;            Delta -= EncoderParm.iCntsPerRev;
;            }
;        }
;    else
;        {
;        // Delta < 0 either because 
;        //       1) vel is < 0 or 
;        //       2) Vel > 0 and wrapped around
;
;        if( Delta < -EncoderParm.iCntsPerRev/2 )
;            {
;            // Delta < -EncoderParm.iCntsPerRev/2 => Pos vel, wrapped around
;
;            Delta += EncoderParm.iCntsPerRev;
;            }
;        }
;
;    EncoderParm.iAccumCnt += Delta;
;
;    EncoderParm.iVelCntDwn--;
;    if(EncoderParm.iVelCntDwn)
;        return;
;
;    iVelCntDwn = iIrpPerCalc; 
;    qVelMech = qKvel * iAccumCnt * 2^Nvel;
;    EncoderParm.iAccumCnt = 0;
;}
;=================== CODE =====================
; Register usage for CalcVelIrp 
          .equ PosW,    w0   ; current position: POSCNT

          .equ WorkW,   w4   ; Working register
          .equ DeltaW,  w6   ; NewCnt - PrevCnt

          .global   _CalcVelIrp
          .global   CalcVelIrp

_CalcVelIrp:
CalcVelIrp:

     ;; Save registers
          push      w0
          push      w4
          push      w6

     ;; Pos = uTestPos;

 .ifdef SIMU
          mov.w     _uTestPos,PosW     ; encoder value  ??
 .else
          mov.w     POSCNT,PosW        ; encoder value
 .endif

          mov.w     _EncoderParm+Encod_iPrevCnt,WorkW
          
     ;; Update previous cnt with new cnt
          mov.w     PosW,_EncoderParm+Encod_iPrevCnt

     ;; Calc Delta = New - Prev
          sub.w     PosW,WorkW,DeltaW     
          bra       N,jEncoder5         ; Delta < 0

     ;; Delta > 0 either because 
     ;;       1) vel is > 0 or 
     ;;       2) Vel < 0 and wrapped around

          lsr.w     _EncoderParm+Encod_iCntsPerRev,WREG   ; WREG = CntsPerRev/2

     ;; Is Delta < CntsPerRev/2
          sub.w     DeltaW,w0,WorkW  ; Delta-CntsPerRev/2
          bra       N,jEncoder20        ; 0 < Delta < CntsPerRev/2, Vel > 0

     ;; Delta >= CntsPerRev/2 => Neg speed, wrapped around
     ;; Delta = Delta - CntsPerRev
          
          mov.w     _EncoderParm+Encod_iCntsPerRev,w0  
          sub.w     DeltaW,w0,DeltaW

     ;; Delta < 0, Vel < 0
          bra       jEncoder20 

jEncoder5:
     ;; Delta < 0 either because 
     ;;       1) vel is < 0 or 
     ;;       2) Vel > 0 and wrapped around

          lsr.w     _EncoderParm+Encod_iCntsPerRev,WREG   ; WREG = CntsPerRev/2

     ;; Is Delta + CntsPerRev/2 < 0
          add.w     DeltaW,w0,WorkW  ; Delta+CntsPerRev/2
          bra       NN,jEncoder20       ; -CntsPerRev/2 <= Delta < 0, Vel > 0

     ;; Delta < -CntsPerRev/2 => Pos vel, wrapped around
     ;; Delta = Delta + CntsPerRev
          
          mov.w     _EncoderParm+Encod_iCntsPerRev,w0  
          add.w     DeltaW,w0,DeltaW

     ;; Delta < -CntsPerRev/2, Vel > 0

jEncoder20: 

     ;; Delta now contains signed change in position

     ;; EncoderParm.Delta += Delta;
          mov.w     DeltaW,w0
          add.w     _EncoderParm+Encod_iAccumCnt

     ;; EncoderParm.iVelCntDwn--;
     ;; if(EncoderParm.iVelCntDwn) return;

          dec.w     _EncoderParm+Encod_iVelCntDwn
          cp0.w     _EncoderParm+Encod_iVelCntDwn
          bra       NZ,jEncoder40

     ;; Reload iVelCntDwn: iVelCntDwn = iIrpPerCalc; 
          mov.w     _EncoderParm+Encod_iIrpPerCalc,WREG
          mov.w     WREG,_EncoderParm+Encod_iVelCntDwn

     ;; Copy iAccumCnt to iDeltaCnt then iAccumCnt = 0
          mov.w     _EncoderParm+Encod_iAccumCnt,DeltaW
          mov.w     DeltaW,_EncoderParm+Encod_iDeltaCnt
          clr.w     _EncoderParm+Encod_iAccumCnt

jEncoder40:

     ;; Restore registers
          pop       w6
          pop       w4
          pop       w0
          return

;*******************************************************************
; CalcVel
;
; Calculate qVelMech from the last iDeltaCnt produced by the
; interrupt routine CalcVelIrp.
;
;Functional prototype:  void CalcVel( void );
;
;On Entry:   EncoderParm must contain iDeltaCnt, qKvel
;
;On Exit:    EncoderParm will contain qVelMech
;
;Parameters: 
; Input arguments: None
;
; Return:
;   Void
;
; SFR Settings required: None
;
; Support routines required: None
;
; Local Stack usage: none
;
; Registers modified: None
;
; Timing: About  8 instruction cycles
;  
;*******************************************************************

          .global   _CalcVel
          .global   CalcVel
_CalcVel:
CalcVel:
     ;; qVelMech = qKvel * ( Delta / 2^Nvel / 2^15)


     ;; iDeltaCnt is an integer but as Q15 it = (iDeltaCnt/2^15)
          mov.w     _EncoderParm+Encod_iDeltaCnt,DeltaW
          mov.w     _EncoderParm+Encod_qKvel,WorkW

          mpy       WorkW*DeltaW,A                ; dKvel * (Delta/2^15)
          sac       A,#(Nvel-15),WorkW            ; left shift by 15-Nvel


     ;; qVelMech = qKvel * Q15( Delta / 2^Nvel )
          mov.w     WorkW,_EncoderParm+Encod_qVelMech
          return


          .end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清不卡一二三区| 免费观看一级特黄欧美大片| 欧美www视频| 日韩一区二区三区电影在线观看 | 亚洲成在人线在线播放| 亚洲日本一区二区| 亚洲精品国产精品乱码不99| 亚洲天堂a在线| 亚洲成人一区在线| 蜜臀av亚洲一区中文字幕| 免费成人结看片| 懂色av一区二区在线播放| va亚洲va日韩不卡在线观看| gogo大胆日本视频一区| 欧美亚洲图片小说| 日韩欧美国产电影| 国产欧美日韩不卡| 亚洲制服欧美中文字幕中文字幕| 天堂成人国产精品一区| 紧缚捆绑精品一区二区| 处破女av一区二区| 91成人免费在线| 日韩午夜电影av| 综合久久国产九一剧情麻豆| 亚洲成人一区二区在线观看| 国内精品免费**视频| 99国产精品99久久久久久| 欧美日韩一区国产| 久久久久久久综合日本| 一区二区三区免费网站| 日本不卡高清视频| 99视频国产精品| 日韩一区二区三区电影在线观看| 亚洲国产激情av| 五月天精品一区二区三区| 国产成人免费视频网站| 欧美日韩一区高清| 中文字幕日韩av资源站| 久久精品免费观看| 91在线视频官网| 欧美精品一区二区三区蜜臀| 亚洲欧美另类小说视频| 久久99精品久久久久久动态图| 99精品欧美一区| 欧美精品一区二区三区四区| 亚洲电影在线免费观看| 91丨porny丨中文| 精品国产精品网麻豆系列 | 欧美性猛交xxxx乱大交退制版| 日韩精品一区二区三区三区免费| 亚洲精品美国一| 久草这里只有精品视频| 欧美性大战久久久久久久| 亚洲国产精品99久久久久久久久| 老司机午夜精品| 欧美视频在线一区| 自拍偷拍亚洲欧美日韩| 国产福利电影一区二区三区| 欧美日韩不卡一区二区| 一个色在线综合| 99精品国产99久久久久久白柏| 精品欧美黑人一区二区三区| 午夜精品一区二区三区电影天堂 | 精品一区二区精品| 9191国产精品| 亚洲国产精品久久久久婷婷884 | 在线观看日韩国产| 中文字幕亚洲视频| 97久久超碰精品国产| 中文字幕+乱码+中文字幕一区| 久久国产乱子精品免费女| 欧美大肚乱孕交hd孕妇| 美女精品自拍一二三四| 日韩天堂在线观看| 国产一区二区三区在线观看免费视频 | 国产剧情在线观看一区二区| 日韩一区二区三区免费观看| 日本美女一区二区| 精品乱人伦小说| 国产福利一区二区三区视频| 国产日韩精品一区二区三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产欧美精品国产国产专区| 国产九九视频一区二区三区| 国产清纯白嫩初高生在线观看91| 国产激情偷乱视频一区二区三区| 国产日韩三级在线| 91浏览器在线视频| 亚洲成人一区在线| 久久综合九色综合97婷婷女人| 国产成人综合精品三级| 最新欧美精品一区二区三区| 欧美亚洲一区二区在线| 麻豆精品一二三| 国产午夜三级一区二区三| 91视频你懂的| 欧美bbbbb| 中文字幕免费一区| 欧美天堂亚洲电影院在线播放| 日本不卡1234视频| 中文久久乱码一区二区| 欧美色综合网站| 久久99久久久欧美国产| 中文字幕在线一区二区三区| 欧美日韩一区三区四区| 国产精品12区| 午夜欧美在线一二页| 久久久99免费| 在线一区二区三区四区五区| 蜜桃av噜噜一区| 亚洲视频免费在线观看| 欧美一级精品在线| 91视频你懂的| 国产一区二区免费在线| 亚洲国产精品一区二区www在线| 精品久久久网站| 欧美亚洲动漫另类| 成人免费视频caoporn| 日韩综合小视频| 国产精品伦一区| 精品av久久707| 欧美日韩综合在线| 成人午夜在线播放| 美女网站在线免费欧美精品| 亚洲精品自拍动漫在线| 久久久电影一区二区三区| 7777精品伊人久久久大香线蕉 | 日韩一级在线观看| 日本大香伊一区二区三区| 国产中文字幕精品| 日韩成人午夜电影| 亚洲在线一区二区三区| 国产精品全国免费观看高清| 日韩片之四级片| 精品视频在线视频| 色欧美88888久久久久久影院| 国产福利一区二区三区在线视频| 日韩精品一二三四| 一卡二卡三卡日韩欧美| 国产精品国产三级国产a| 欧美成人三级在线| 欧美一级高清大全免费观看| 欧美日韩高清一区二区不卡| 在线精品视频小说1| 一本一道久久a久久精品| 99久久久无码国产精品| av在线不卡电影| jlzzjlzz亚洲日本少妇| 99久久99久久综合| 色一情一乱一乱一91av| 色综合夜色一区| 色狠狠色噜噜噜综合网| 91精彩视频在线| 欧美日韩黄色一区二区| 欧美一区二区三区视频在线观看| 欧美久久久久中文字幕| 337p亚洲精品色噜噜| 欧美久久一二区| 正在播放一区二区| 日韩免费电影网站| 久久精品一级爱片| 亚洲欧洲成人精品av97| 亚洲人成人一区二区在线观看 | 欧美一区二区精品| 日韩欧美不卡在线观看视频| 精品国产免费久久| 欧美极品美女视频| 亚洲精品国产成人久久av盗摄| 亚洲欧美怡红院| 亚洲成av人片在线观看| 激情五月激情综合网| 不卡电影一区二区三区| 欧美视频在线一区| 亚洲精品在线观| 亚洲精品国产无天堂网2021| 日韩精品免费视频人成| 国产高清一区日本| 欧美日韩一区二区三区不卡| 日韩一级视频免费观看在线| 欧美激情在线看| 午夜一区二区三区在线观看| 久久99久国产精品黄毛片色诱| 成人激情电影免费在线观看| 欧美丝袜丝nylons| 国产色爱av资源综合区| 亚洲成人黄色影院| 国产成a人亚洲| 欧美揉bbbbb揉bbbbb| 欧美韩国日本一区| 亚洲成人综合网站| 成人爽a毛片一区二区免费| 欧美日韩精品电影| 综合自拍亚洲综合图不卡区| 久久精品国产亚洲高清剧情介绍| 成人黄色电影在线| 欧美成人在线直播| 午夜久久电影网| 91理论电影在线观看| 国产亚洲成年网址在线观看| 日本视频一区二区三区|