您的位置:控制工程论坛网论坛 » 嵌入式系统 » 什么是PID?

  • xxxz

    xxxz   |   当前状态:离线

    总积分:85  2024年可用积分:0

    注册时间: 2008-08-19

    最后登录时间: 2008-09-23

    空间 发短消息加为好友

    xxxz   发表于 2008/9/18 15:59:34

    32楼 回复本楼

    引用 xxxz 2008/9/18 15:59:34 发表于32楼的内容

  • tigersharc

    tigersharc   |   当前状态:离线

    总积分:287  2024年可用积分:0

    注册时间: 2008-09-19

    最后登录时间: 2012-10-15

    空间 发短消息加为好友

    tigersharc   发表于 2008/9/19 11:58:35

     

    33楼 回复本楼

    引用 tigersharc 2008/9/19 11:58:35 发表于33楼的内容

  • laladolphin

    laladolphin   |   当前状态:离线

    总积分:390  2024年可用积分:0

    注册时间: 2008-07-17

    最后登录时间: 2008-10-07

    空间 发短消息加为好友

    laladolphin   发表于 2008/9/26 18:03:25

    34楼 回复本楼

    引用 laladolphin 2008/9/26 18:03:25 发表于34楼的内容

  • chyw_927

    chyw_927   |   当前状态:在线

    总积分:3299  2024年可用积分:0

    注册时间: 2007-01-31

    最后登录时间: 2019-06-24

    空间 发短消息加为好友

    chyw_927   发表于 2008/9/26 20:13:52

    在实际控制中应用很多,具体要看实际的工艺要求。可以对三个参数进行弱化和加强。
    35楼 回复本楼

    引用 chyw_927 2008/9/26 20:13:52 发表于35楼的内容

  • yszhao

    yszhao   |   当前状态:离线

    总积分:2452  2024年可用积分:0

    注册时间: 2008-09-25

    最后登录时间: 2008-12-05

    空间 发短消息加为好友

    yszhao   发表于 2008/9/27 13:48:03

    ;//**************************************************************************************************************
    ;//功    能: 电机控制的PID(积分分离)  PID(void)    执行时间少于70uS/932-12MHz
    ;//**************************************************************************************************************
    $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
    ;//**************************************************************************************************************
    ;//**************************************************************************************************************
           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
    ;//**************************************************************************************************************
    ;//**************************************************************************************************************
      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  

    36楼 回复本楼

    引用 yszhao 2008/9/27 13:48:03 发表于36楼的内容

  • shirley1010

    shirley1010   |   当前状态:在线

    总积分:998  2024年可用积分:0

    注册时间: 2008-08-20

    最后登录时间: 2019-06-16

    空间 发短消息加为好友

    shirley1010   发表于 2008/10/17 17:43:43

    37楼 回复本楼

    引用 shirley1010 2008/10/17 17:43:43 发表于37楼的内容

  • 独影夜舞

    独影夜舞   |   当前状态:离线

    总积分:157  2024年可用积分:0

    注册时间: 2009-09-17

    最后登录时间: 2009-10-13

    空间 发短消息加为好友

    独影夜舞   发表于 2009/9/17 13:29:04


    请问各位工控行业的前辈、师兄师姐们,我是刚入道的后生,我想请教你们是:PID的含义,若有答案,请发送至Emal-jixiewuzyh@sina.com
    38楼 回复本楼

    引用 独影夜舞 2009/9/17 13:29:04 发表于38楼的内容

总共 , 当前 /, 【上一页】1234