<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      PID 控制的51匯編程序

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2011-2-18

      ;//**************************************************************************************************************
      ;//功    能: 電機控制的PID(積分分離)  PID(void)    執行時間少于70uS/932-12MHz
      ;//設 計 者: 牟聯樹
      ;//日    期: 2003.12.28
      ;//版 本 號: 1.0
      ;//申    明:
      ;//**************************************************************************************************************
      $NOMOD51
          OCRAH  equ 0EFh
          OCRAL  equ 0EEh
          OCRBH  equ 0FBh
          OCRBL  equ 0FAh
          OCRCH  equ 0FDh
          OCRCL  equ 0FCh
          OCRDH  equ 0FFh
          OCRDL  equ 0FEh
          TCR21  equ 0f9h
      $include (REG52.INC)
             NAME       PIDWork
          ?PR?PID?PIDWork     SEGMENT    CODE
          ?PR?PID_MUL?PIDWork SEGMENT    CODE
          ?PR?PID_out?PIDWork SEGMENT    CODE
          ?DT?PID_k?PIDWork   SEGMENT    DATA

          PUBLIC   PID_Kp,PID_Ki,PID_Kd,PID_Umax,PID_Emax
          PUBLIC   PID_U,PID_En1,PID_En2,PID_Temp,PID_TempL
         RSEG  ?DT?PID_k?PIDWork
           PID_Kp:  DS   2                    ;比例系數
           PID_KpL  data PID_Kp+1
           PID_Ki:  DS   2                    ;積分系數
           PID_KiL  data PID_Ki+1
           PID_Kd:  DS   2                    ;微分系數
           PID_KdL  data PID_Kd+1           
         PID_Umax:  DS   2                    ;期望最大值設定
         PID_UmaxL  data PID_Umax+1         
         PID_Emax:  DS   2                    ;積分分離的誤差最大值設定
         PID_EmaxL  data PID_Emax+1
            PID_U:  DS   2                    ;當前的采樣值
            PID_UL  data PID_U+1
          PID_En1:  DS   2                    ;上一次計算的誤差值
          PID_En1L  data PID_En1+1
          PID_En2:  DS   2                    ;上一次計算的誤差的誤差值
          PID_En2L  data PID_En2+1
         PID_Temp:  DS   4                    ;計算過程中的暫存
         PID_TempL  data PID_Temp+1
         PID_Temp1  data PID_Temp+2
        PID_Temp1L  data PID_Temp+3

         PUBLIC  _PID
         RSEG  ?PR?PID?PIDWork
         _PID: push  acc
               push  psw
               clr   c                        ;有符號減法
               mov   a,PID_UmaxL              ;計算當前的誤差En(PID_U里暫存運算結果)
               subb  a,PID_UL
               mov   PID_UL,a
               mov   a,PID_Umax
               subb  a,PID_U
               mov   PID_U,a
               jnb   acc.7,PID_k
               mov   a,PID_UL
        cpl   a
        add   a,#1
        mov   r7,a
        mov   a,PID_U
        cpl   a
        addc  a,#0
        xch   a,r7
               sjmp  PID_g
        PID_k: mov   r7,PID_U
               mov   a,PID_UL
        PID_g: clr   c
        subb  a,PID_EmaxL
        mov   a,r7
               subb  a,PID_Emax
               jnb   acc.7,PID_a              ;如果En>Emax則轉
        mov   r7,PID_KiL               ;Ki*En
               mov   r6,PID_Ki
        mov   r5,PID_UL
               mov   r4,PID_U
        acall PID_MUL                  ;二字節偽有符號乘法(r4-r7里暫存結果)
        mov   a,PID_Temp1L             ;PID加法子程序(將結果加入輸出)
        add   a,r7
        mov   PID_Temp1L,a
               mov   a,PID_Temp1
               addc  a,r6
        mov   PID_Temp1,a
               mov   a,PID_TempL
               addc  a,r5
        mov   PID_TempL,a
               mov   a,PID_Temp
               addc  a,r4
        mov   PID_Temp,a
        PID_a: mov   a,PID_En1L               ;更新PID_En1
               xch   a,PID_UL
        mov   PID_En1L,a
        mov   a,PID_En1
        xch   a,PID_U
        mov   PID_En1,a
        clr   c                        ;有符號減法
               mov   a,PID_En1L               ;計算當前的誤差差(En-En1)
               subb  a,PID_UL
        mov   PID_UL,a
        mov   a,PID_En1
        subb  a,PID_U
        mov   PID_U,a
               mov   r7,PID_KpL               ;+Kp*(En-En1)
        mov   r6,PID_Kp
        mov   r5,PID_UL
               mov   r4,PID_U
        acall PID_MUL
        mov   a,PID_Temp1L             ;PID加法子程序(將結果加入輸出)
        add   a,r7
        mov   PID_Temp1L,a
               mov   a,PID_Temp1
               addc  a,r6
        mov   PID_Temp1,a
               mov   a,PID_TempL
               addc  a,r5
        mov   PID_TempL,a
               mov   a,PID_Temp
               addc  a,r4
        mov   PID_Temp,a
        clr   c                        ;有符號減法
               mov   a,PID_UL                 ;計算誤差差的差(En-En1-En2),同時更新En2
        subb  a,PID_En2L
        mov   PID_En2L,a
               mov   a,PID_U
        subb  a,PID_En2
        mov   PID_En2,a
               mov   r7,PID_KdL               ;+Kd*(En-En1-En2)
               mov   r6,PID_Kd
        mov   r5,PID_En2L
               mov   r4,PID_En2
               acall PID_MUL
        mov   a,PID_Temp1L             ;PID加法子程序(將結果加入輸出)
        add   a,r7
        mov   PID_Temp1L,a
               mov   a,PID_Temp1
               addc  a,r6
        mov   PID_Temp1,a
               mov   a,PID_TempL
               addc  a,r5
        mov   PID_TempL,a
               mov   a,PID_Temp
               addc  a,r4
        mov   PID_Temp,a
        pop   psw
        pop   acc
        ret
        ret
      ;//**************************************************************************************************************
      ;//功    能: 電機控制電流環的PI  PI_I(void)    執行時間少于50uS/932-12MHz
      ;//設 計 者: 牟聯樹
      ;//日    期: 2003.12.28
      ;//版 本 號: 1.0
      ;//申    明:
      ;//**************************************************************************************************************
             PUBLIC _PID_out
             RSEG ?PR?PID_out?PIDWork
      _PID_out: push acc
                push psw
                clr  c
                mov  a,r6
                rrc  a
                mov  r6,a
                mov  a,r7
                rrc  a
                mov  r7,a
      out_a: mov  OCRAH,r6               ;PWM更新
                mov  OCRAL,r7
                mov  a,r7
                add  a,#25
                mov  OCRBL,a
                mov  a,r6
                addc a,#0
                mov  OCRBH,a
                orl  TCR21,#080h            ;PWM更新
         out_b: pop  psw
         pop  acc
                ret
      ;//**************************************************************************************************************
      ;//功    能: 整形乘法  long int PID_MUL(int a,int b)    用時13.5uS/932-12MHz
      ;//設 計 者: 牟聯樹
      ;//日    期: 2003.12.28
      ;//版 本 號: 1.0
      ;//申    明:
      ;//**************************************************************************************************************
        PUBLIC _PID_MUL
        RSEG ?PR?PID_MUL?PIDWork
      _PID_MUL:
      PID_MUL: push acc
               push psw
               clr  f0                        ;符號判斷
               mov  a,r4
               jb   acc.7,PID_Ma
               sjmp PID_Md
      PID_Ma: setb f0
               mov  a,r5
               cpl  a
               add  a,#1
               mov  r5,a
               mov  a,r4
               cpl  a
               addc a,#0
               mov  r4,a       
      PID_Md:; mov  a,r6
              ; mov  c,acc.7
               ;jnb  f0,PID_Mf
              ; cpl  c
      PID_Mf:; mov  f0,c
              ; jb   acc.7,PID_Mb
              ; sjmp PID_Mc     
      PID_Mb:; clr  c
              ; mov  a,r7
              ; subb a,#1
              ; cpl  a
              ; mov  r7,a
              ; mov  a,r6
              ; subb a,#0
              ; cpl  a
              ; mov  r6,a

      PID_Mc: mov  a,r5
        mov  b,r7
        mul  ab
        xch  a,r7
        mov  r3,b
        mov  b,r4
        mul  ab
        add  a,r3
        mov  r3,a
        mov  a,b
        addc a,#0
        xch  a,r5
        mov  b,r6
        mul  ab
        addc a,r3
        xch  a,r6
        xch  a,r5
        addc a,b
        xch  a,r5
        mov  b,r4
        mul  ab
        addc a,r5
        mov  r5,a
        mov  a,b
        addc a,#0
        mov  r4,a
        jb   f0,PID_Me
        pop  psw
        pop  acc 
        ret
      PID_Me: mov  a,r7
               cpl  a
               add  a,#1
               mov  r7,a
               mov  a,r6
               cpl  a
               addc a,#0
               mov  r6,a
               mov  a,r5
               cpl  a
               addc a,#0
               mov  r5,a
               mov  a,r4
               cpl  a
               addc a,#0
               mov  r4,a
               pop  psw
               pop  acc
               ret
               END  

      Tags:51,單片機程序,pid,算法  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久综合丝袜日本网| 99久久综合精品五月天| 色综合色综合色综合| 天啪天天久久天天综合啪| 久久久久噜噜噜亚洲熟女综合 | 亚洲伊人色一综合网| 2020久久精品亚洲热综合一本| 色综合天天综合高清网国产| 国产成人亚洲综合| 色天天综合久久久久综合片 | 国产91久久综合| 亚洲av日韩av综合| 久久婷婷综合色丁香五月| 亚洲国产成人五月综合网| 久久婷婷五月综合色精品| 综合激情五月综合激情五月激情1| 日韩综合在线观看| 日韩亚洲人成在线综合日本| 狠狠色丁香婷婷综合尤物| 一本色道久久鬼综合88| 一本久久综合亚洲鲁鲁五月天| 色综合色综合久久综合频道 | 丁香婷婷激情综合俺也去| 中文字幕亚洲综合精品一区| 麻豆精品久久精品色综合| 久久婷婷丁香五月综合五| 色欲人妻综合AAAAA网| 色综合中文综合网| 久久婷婷综合中文字幕| 国产精品国色综合久久| 久久影院综合精品| 色婷五月综激情亚洲综合| 亚洲色偷偷偷综合网| 亚洲国产欧洲综合997久久| 婷婷五月综合激情| 国产99久久亚洲综合精品| 国产成人综合日韩精品无码| 六月丁香婷婷综合| 开心五月激情综合婷婷| 狠狠色综合久久婷婷色天使| 九色综合狠狠综合久久|