乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      增量式PID算法

       幾木夕 2014-08-09
          程序是自己編的,根據(jù)多方資料改寫了一部分,為增量式PID算法。程序采用浮點形式,如果MCU速度不夠快,可根據(jù)需求轉(zhuǎn)換定點運算。
          關(guān)鍵變量:ref——設(shè)置的參數(shù);feb——采樣反饋;根據(jù)實際情況修改這兩個變量即可。
          相關(guān)參數(shù):Kp、Ti、Td、T:根據(jù)各項目的控制對象不同而修改其定義值。

      //定義變量
      double ref = 0;//設(shè)置參數(shù)
      double feb = 0;//采樣反饋


      int pwm_var = 0;    //PID調(diào)整量
      Uint16 PWM_out = 0; //PWM輸出量


      double Uo = 0;
      double Ek = 0;
      double Ei = 0;
      double Ed = 0;

      #define Kp         //PID調(diào)節(jié)的比例常數(shù)
      #define Ti   0.05     //PID調(diào)節(jié)的積分常數(shù)
      #define Td   0.02     //PID調(diào)節(jié)的微分時間常數(shù)
      #define T    0.02     //采樣周期

      #define Kpp   Kp * ( 1 + (T / Ti) + (Td / T) )
      #define Ki   (-Kp) * ( 1 + (2 * Td / T ) )
      #define Kd    Kp * Td / T

      //#define Kpp 4
      //#define Ki  0.8
      //#define Kd  20

      //誤差的閥值,小于這個數(shù)值的時候,不做PID調(diào)整,避免誤差較小時頻繁調(diào)節(jié)引起震蕩
      #define Emin 3

      //調(diào)整值限幅,防止積分飽和
      #define Umax 100
      #define Umin -100

      //輸出值限幅
      #define Pmax 15500
      #define Pmin 200


      ///////////////////////////////////////////////////////////////////
      //////    PID運算    ///////
      void pid_ctrl(void)
      {
        Ek = ref - feb;       //差值運算
       
        if( fabs(Ek) < Emin ) //誤差的閥值(死區(qū)控制??)
        {
          pwm_var = 0;
        }
        else
        {
          Uo = Kpp*Ek + Ki*Ei + Kd*Ed;//PID計算
          Ed = Ei;
          Ei = Ek;
         
          pwm_var = (int)Uo;    //強制轉(zhuǎn)化調(diào)整量,PWM為整數(shù)
         
          if(pwm_var >= Umax)pwm_var = Umax;      //調(diào)整值限幅,防止積分飽和
          if(pwm_var <= Umin)pwm_var = Umin;    //調(diào)整值限幅,防止積分飽和
        }
       
        PWM_out += pwm_var;        //調(diào)整PWM輸出
       
        if(PWM_out > Pmax)PWM_out = Pmax;    //輸出值限幅
        if(PWM_out < Pmin)PWM_out = Pmin;    //輸出值限幅
       
        TBCCR1 = PWM_out;//輸出給寄存器,改變PWM占空比

      }

      ///////////////////////////////////////////////////////////////////


      調(diào)用示例:

      void main(void)
      {
        ref = 120.6;
       
        while(1)
        {
          feb = adc_sample();
         
          pid_ctrl();
        }
      }

      另外附上:PID調(diào)節(jié)經(jīng)驗總結(jié)(搜索資源)
          PID控制器參數(shù)選擇的方法很多,例如試湊法、臨界比例度法、擴充臨界比例度法等。但是,對于PID控制而言,參數(shù)的選擇始終是一件非常煩雜的工作,需要經(jīng)過不斷的調(diào)整才能得到較為滿意的控制效果。依據(jù)經(jīng)驗,一般PID參數(shù)確定的步驟如下:
      (1)確定比例系數(shù)Kp
          確定比例系數(shù)Kp時,首先去掉PID的積分項和微分項,可以令Ti=0、Td=0,使之成為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許輸出最大值的60%~70%,比例系數(shù)Kp由0開始逐漸增大,直至系統(tǒng)出現(xiàn)振蕩;再反過來,從此時的比例系數(shù)Kp逐漸減小,直至系統(tǒng)振蕩消失。記錄此時的比例系數(shù)Kp,設(shè)定PID的比例系數(shù)Kp為當(dāng)前值的60%~70%。
      (2)確定積分時間常數(shù)Ti
          比例系數(shù)Kp確定之后,設(shè)定一個較大的積分時間常數(shù)Ti,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,然后再反過來,逐漸增大Ti,直至系統(tǒng)振蕩消失。記錄此時的Ti,設(shè)定PID的積分時間常數(shù)Ti為當(dāng)前值的 150%~180%。
      (3)確定微分時間常數(shù)Td
          微分時間常數(shù)Td一般不用設(shè)定,為0即可,此時PID調(diào)節(jié)轉(zhuǎn)換為PI調(diào)節(jié)。如果需要設(shè)定,則與確定Kp的方法相同,取不振蕩時其值的30%。
      (4)系統(tǒng)空載、帶載聯(lián)調(diào)
         PID參數(shù)進行微調(diào),直到滿足性能要求。

          程序是自己編的,根據(jù)多方資料改寫了一部分,為增量式PID算法。程序采用浮點形式,如果MCU速度不夠快,可根據(jù)需求轉(zhuǎn)換定點運算。
          關(guān)鍵變量:ref——設(shè)置的參數(shù);feb——采樣反饋;根據(jù)實際情況修改這兩個變量即可。
          相關(guān)參數(shù):Kp、Ti、Td、T:根據(jù)各項目的控制對象不同而修改其定義值。

      //定義變量
      double ref = 0;//設(shè)置參數(shù)
      double feb = 0;//采樣反饋


      int pwm_var = 0;    //PID調(diào)整量
      Uint16 PWM_out = 0; //PWM輸出量


      double Uo = 0;
      double Ek = 0;
      double Ei = 0;
      double Ed = 0;

      #define Kp         //PID調(diào)節(jié)的比例常數(shù)
      #define Ti   0.05     //PID調(diào)節(jié)的積分常數(shù)
      #define Td   0.02     //PID調(diào)節(jié)的微分時間常數(shù)
      #define T    0.02     //采樣周期

      #define Kpp   Kp * ( 1 + (T / Ti) + (Td / T) )
      #define Ki   (-Kp) * ( 1 + (2 * Td / T ) )
      #define Kd    Kp * Td / T

      //#define Kpp 4
      //#define Ki  0.8
      //#define Kd  20

      //誤差的閥值,小于這個數(shù)值的時候,不做PID調(diào)整,避免誤差較小時頻繁調(diào)節(jié)引起震蕩
      #define Emin 3

      //調(diào)整值限幅,防止積分飽和
      #define Umax 100
      #define Umin -100

      //輸出值限幅
      #define Pmax 15500
      #define Pmin 200


      ///////////////////////////////////////////////////////////////////
      //////    PID運算    ///////
      void pid_ctrl(void)
      {
        Ek = ref - feb;       //差值運算
       
        if( fabs(Ek) < Emin ) //誤差的閥值(死區(qū)控制??)
        {
          pwm_var = 0;
        }
        else
        {
          Uo = Kpp*Ek + Ki*Ei + Kd*Ed;//PID計算
          Ed = Ei;
          Ei = Ek;
         
          pwm_var = (int)Uo;    //強制轉(zhuǎn)化調(diào)整量,PWM為整數(shù)
         
          if(pwm_var >= Umax)pwm_var = Umax;      //調(diào)整值限幅,防止積分飽和
          if(pwm_var <= Umin)pwm_var = Umin;    //調(diào)整值限幅,防止積分飽和
        }
       
        PWM_out += pwm_var;        //調(diào)整PWM輸出
       
        if(PWM_out > Pmax)PWM_out = Pmax;    //輸出值限幅
        if(PWM_out < Pmin)PWM_out = Pmin;    //輸出值限幅
       
        TBCCR1 = PWM_out;//輸出給寄存器,改變PWM占空比

      }

      ///////////////////////////////////////////////////////////////////


      調(diào)用示例:

      void main(void)
      {
        ref = 120.6;
       
        while(1)
        {
          feb = adc_sample();
         
          pid_ctrl();
        }
      }

      另外附上:PID調(diào)節(jié)經(jīng)驗總結(jié)(搜索資源)
          PID控制器參數(shù)選擇的方法很多,例如試湊法、臨界比例度法、擴充臨界比例度法等。但是,對于PID控制而言,參數(shù)的選擇始終是一件非常煩雜的工作,需要經(jīng)過不斷的調(diào)整才能得到較為滿意的控制效果。依據(jù)經(jīng)驗,一般PID參數(shù)確定的步驟如下:
      (1)確定比例系數(shù)Kp
          確定比例系數(shù)Kp時,首先去掉PID的積分項和微分項,可以令Ti=0、Td=0,使之成為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許輸出最大值的60%~70%,比例系數(shù)Kp由0開始逐漸增大,直至系統(tǒng)出現(xiàn)振蕩;再反過來,從此時的比例系數(shù)Kp逐漸減小,直至系統(tǒng)振蕩消失。記錄此時的比例系數(shù)Kp,設(shè)定PID的比例系數(shù)Kp為當(dāng)前值的60%~70%。
      (2)確定積分時間常數(shù)Ti
          比例系數(shù)Kp確定之后,設(shè)定一個較大的積分時間常數(shù)Ti,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,然后再反過來,逐漸增大Ti,直至系統(tǒng)振蕩消失。記錄此時的Ti,設(shè)定PID的積分時間常數(shù)Ti為當(dāng)前值的 150%~180%。
      (3)確定微分時間常數(shù)Td
          微分時間常數(shù)Td一般不用設(shè)定,為0即可,此時PID調(diào)節(jié)轉(zhuǎn)換為PI調(diào)節(jié)。如果需要設(shè)定,則與確定Kp的方法相同,取不振蕩時其值的30%。
      (4)系統(tǒng)空載、帶載聯(lián)調(diào)
         PID參數(shù)進行微調(diào),直到滿足性能要求。

          程序是自己編的,根據(jù)多方資料改寫了一部分,為增量式PID算法。程序采用浮點形式,如果MCU速度不夠快,可根據(jù)需求轉(zhuǎn)換定點運算。
          關(guān)鍵變量:ref——設(shè)置的參數(shù);feb——采樣反饋;根據(jù)實際情況修改這兩個變量即可。
          相關(guān)參數(shù):Kp、Ti、Td、T:根據(jù)各項目的控制對象不同而修改其定義值。

      //定義變量
      double ref = 0;//設(shè)置參數(shù)
      double feb = 0;//采樣反饋


      int pwm_var = 0;    //PID調(diào)整量
      Uint16 PWM_out = 0; //PWM輸出量


      double Uo = 0;
      double Ek = 0;
      double Ei = 0;
      double Ed = 0;

      #define Kp         //PID調(diào)節(jié)的比例常數(shù)
      #define Ti   0.05     //PID調(diào)節(jié)的積分常數(shù)
      #define Td   0.02     //PID調(diào)節(jié)的微分時間常數(shù)
      #define T    0.02     //采樣周期

      #define Kpp   Kp * ( 1 + (T / Ti) + (Td / T) )
      #define Ki   (-Kp) * ( 1 + (2 * Td / T ) )
      #define Kd    Kp * Td / T

      //#define Kpp 4
      //#define Ki  0.8
      //#define Kd  20

      //誤差的閥值,小于這個數(shù)值的時候,不做PID調(diào)整,避免誤差較小時頻繁調(diào)節(jié)引起震蕩
      #define Emin 3

      //調(diào)整值限幅,防止積分飽和
      #define Umax 100
      #define Umin -100

      //輸出值限幅
      #define Pmax 15500
      #define Pmin 200


      ///////////////////////////////////////////////////////////////////
      //////    PID運算    ///////
      void pid_ctrl(void)
      {
        Ek = ref - feb;       //差值運算
       
        if( fabs(Ek) < Emin ) //誤差的閥值(死區(qū)控制??)
        {
          pwm_var = 0;
        }
        else
        {
          Uo = Kpp*Ek + Ki*Ei + Kd*Ed;//PID計算
          Ed = Ei;
          Ei = Ek;
         
          pwm_var = (int)Uo;    //強制轉(zhuǎn)化調(diào)整量,PWM為整數(shù)
         
          if(pwm_var >= Umax)pwm_var = Umax;      //調(diào)整值限幅,防止積分飽和
          if(pwm_var <= Umin)pwm_var = Umin;    //調(diào)整值限幅,防止積分飽和
        }
       
        PWM_out += pwm_var;        //調(diào)整PWM輸出
       
        if(PWM_out > Pmax)PWM_out = Pmax;    //輸出值限幅
        if(PWM_out < Pmin)PWM_out = Pmin;    //輸出值限幅
       
        TBCCR1 = PWM_out;//輸出給寄存器,改變PWM占空比

      }

      ///////////////////////////////////////////////////////////////////


      調(diào)用示例:

      void main(void)
      {
        ref = 120.6;
       
        while(1)
        {
          feb = adc_sample();
         
          pid_ctrl();
        }
      }

      另外附上:PID調(diào)節(jié)經(jīng)驗總結(jié)(搜索資源)
          PID控制器參數(shù)選擇的方法很多,例如試湊法、臨界比例度法、擴充臨界比例度法等。但是,對于PID控制而言,參數(shù)的選擇始終是一件非常煩雜的工作,需要經(jīng)過不斷的調(diào)整才能得到較為滿意的控制效果。依據(jù)經(jīng)驗,一般PID參數(shù)確定的步驟如下:
      (1)確定比例系數(shù)Kp
          確定比例系數(shù)Kp時,首先去掉PID的積分項和微分項,可以令Ti=0、Td=0,使之成為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許輸出最大值的60%~70%,比例系數(shù)Kp由0開始逐漸增大,直至系統(tǒng)出現(xiàn)振蕩;再反過來,從此時的比例系數(shù)Kp逐漸減小,直至系統(tǒng)振蕩消失。記錄此時的比例系數(shù)Kp,設(shè)定PID的比例系數(shù)Kp為當(dāng)前值的60%~70%。
      (2)確定積分時間常數(shù)Ti
          比例系數(shù)Kp確定之后,設(shè)定一個較大的積分時間常數(shù)Ti,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,然后再反過來,逐漸增大Ti,直至系統(tǒng)振蕩消失。記錄此時的Ti,設(shè)定PID的積分時間常數(shù)Ti為當(dāng)前值的 150%~180%。
      (3)確定微分時間常數(shù)Td
          微分時間常數(shù)Td一般不用設(shè)定,為0即可,此時PID調(diào)節(jié)轉(zhuǎn)換為PI調(diào)節(jié)。如果需要設(shè)定,則與確定Kp的方法相同,取不振蕩時其值的30%。
      (4)系統(tǒng)空載、帶載聯(lián)調(diào)
         PID參數(shù)進行微調(diào),直到滿足性能要求。

          程序是自己編的,根據(jù)多方資料改寫了一部分,為增量式PID算法。程序采用浮點形式,如果MCU速度不夠快,可根據(jù)需求轉(zhuǎn)換定點運算。
          關(guān)鍵變量:ref——設(shè)置的參數(shù);feb——采樣反饋;根據(jù)實際情況修改這兩個變量即可。
          相關(guān)參數(shù):Kp、Ti、Td、T:根據(jù)各項目的控制對象不同而修改其定義值。

      //定義變量
      double ref = 0;//設(shè)置參數(shù)
      double feb = 0;//采樣反饋


      int pwm_var = 0;    //PID調(diào)整量
      Uint16 PWM_out = 0; //PWM輸出量


      double Uo = 0;
      double Ek = 0;
      double Ei = 0;
      double Ed = 0;

      #define Kp         //PID調(diào)節(jié)的比例常數(shù)
      #define Ti   0.05     //PID調(diào)節(jié)的積分常數(shù)
      #define Td   0.02     //PID調(diào)節(jié)的微分時間常數(shù)
      #define T    0.02     //采樣周期

      #define Kpp   Kp * ( 1 + (T / Ti) + (Td / T) )
      #define Ki   (-Kp) * ( 1 + (2 * Td / T ) )
      #define Kd    Kp * Td / T

      //#define Kpp 4
      //#define Ki  0.8
      //#define Kd  20

      //誤差的閥值,小于這個數(shù)值的時候,不做PID調(diào)整,避免誤差較小時頻繁調(diào)節(jié)引起震蕩
      #define Emin 3

      //調(diào)整值限幅,防止積分飽和
      #define Umax 100
      #define Umin -100

      //輸出值限幅
      #define Pmax 15500
      #define Pmin 200


      ///////////////////////////////////////////////////////////////////
      //////    PID運算    ///////
      void pid_ctrl(void)
      {
        Ek = ref - feb;       //差值運算
       
        if( fabs(Ek) < Emin ) //誤差的閥值(死區(qū)控制??)
        {
          pwm_var = 0;
        }
        else
        {
          Uo = Kpp*Ek + Ki*Ei + Kd*Ed;//PID計算
          Ed = Ei;
          Ei = Ek;
         
          pwm_var = (int)Uo;    //強制轉(zhuǎn)化調(diào)整量,PWM為整數(shù)
         
          if(pwm_var >= Umax)pwm_var = Umax;      //調(diào)整值限幅,防止積分飽和
          if(pwm_var <= Umin)pwm_var = Umin;    //調(diào)整值限幅,防止積分飽和
        }
       
        PWM_out += pwm_var;        //調(diào)整PWM輸出
       
        if(PWM_out > Pmax)PWM_out = Pmax;    //輸出值限幅
        if(PWM_out < Pmin)PWM_out = Pmin;    //輸出值限幅
       
        TBCCR1 = PWM_out;//輸出給寄存器,改變PWM占空比

      }

      ///////////////////////////////////////////////////////////////////


      調(diào)用示例:

      void main(void)
      {
        ref = 120.6;
       
        while(1)
        {
          feb = adc_sample();
         
          pid_ctrl();
        }
      }

      另外附上:PID調(diào)節(jié)經(jīng)驗總結(jié)(搜索資源)
          PID控制器參數(shù)選擇的方法很多,例如試湊法、臨界比例度法、擴充臨界比例度法等。但是,對于PID控制而言,參數(shù)的選擇始終是一件非常煩雜的工作,需要經(jīng)過不斷的調(diào)整才能得到較為滿意的控制效果。依據(jù)經(jīng)驗,一般PID參數(shù)確定的步驟如下:
      (1)確定比例系數(shù)Kp
          確定比例系數(shù)Kp時,首先去掉PID的積分項和微分項,可以令Ti=0、Td=0,使之成為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許輸出最大值的60%~70%,比例系數(shù)Kp由0開始逐漸增大,直至系統(tǒng)出現(xiàn)振蕩;再反過來,從此時的比例系數(shù)Kp逐漸減小,直至系統(tǒng)振蕩消失。記錄此時的比例系數(shù)Kp,設(shè)定PID的比例系數(shù)Kp為當(dāng)前值的60%~70%。
      (2)確定積分時間常數(shù)Ti
          比例系數(shù)Kp確定之后,設(shè)定一個較大的積分時間常數(shù)Ti,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,然后再反過來,逐漸增大Ti,直至系統(tǒng)振蕩消失。記錄此時的Ti,設(shè)定PID的積分時間常數(shù)Ti為當(dāng)前值的 150%~180%。
      (3)確定微分時間常數(shù)Td
          微分時間常數(shù)Td一般不用設(shè)定,為0即可,此時PID調(diào)節(jié)轉(zhuǎn)換為PI調(diào)節(jié)。如果需要設(shè)定,則與確定Kp的方法相同,取不振蕩時其值的30%。
      (4)系統(tǒng)空載、帶載聯(lián)調(diào)
         PID參數(shù)進行微調(diào),直到滿足性能要求。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多