標(biāo)題: 上傳一個(gè)PID調(diào)節(jié)例程(PID難點(diǎn)在參數(shù),推薦ZN整定法) [打印本頁]

作者: 秦延雷    時(shí)間: 2021-6-4 14:53
標(biāo)題: 上傳一個(gè)PID調(diào)節(jié)例程(PID難點(diǎn)在參數(shù),推薦ZN整定法)
#include "pid.h"

PID pid; //存放PID算法所需要的數(shù)據(jù)

//          pid.Sv=120;        //用戶設(shè)定溫度
//        pid.Kp=30;         //比例系數(shù)
//        pid.T=500;         //PID計(jì)算周期
//          pid.Ti=5000000;         //積分時(shí)間
//        pid.Td=1000;         //微分時(shí)間
//        pid.pwmcycle=200;        //pwm周期1000
//        pid.OUT0=1;
void PID_Calc()  //pid計(jì)算
{
        float DelEk;
        float ti,ki;
        float td;
        float kd;
        float out;
if(pid.C10ms<(pid.T))  //計(jì)算周期未到
{
    return ;
}

pid.Ek=pid.Sv-pid.Pv;   //當(dāng)前的偏差值 = 設(shè)定值 - 返回值
pid.Pout=pid.Kp*pid.Ek; //比例輸出 = 比例系數(shù)*偏差

pid.SEk+=pid.Ek;        //歷史偏差總和

DelEk=pid.Ek-pid.Ek_1;  //最近兩次偏差之差

ti=pid.T/pid.Ti;  //系數(shù)1

ki=ti*pid.Kp;     // 系數(shù)2

  pid.Iout=ki*pid.SEk*pid.Kp;  //積分輸出 = 系數(shù)2 * 偏差和 * 比例系數(shù)

td=pid.Td/pid.T;   //系數(shù)3

kd=pid.Kp*td;      //系數(shù)4

pid.Dout=kd*DelEk; //微分輸出 = 系數(shù)4 * 最近兩次偏差和

out= pid.Pout+ pid.Iout+ pid.Dout; //PID輸出 = 比例輸出 + 積分輸出 + 微分輸出

///////////////////////////輸出保護(hù)///////////////////////////////
if(out>pid.pwmcycle)
{
  pid.OUT=pid.pwmcycle;
}
else if(out<0)
{
  pid.OUT=pid.OUT0;
}
else
{
  pid.OUT=out;
}
//pid.OUT+=; //本次的計(jì)算結(jié)果
pid.Ek_1=pid.Ek;  //更新偏差

pid.C10ms=0;
}

作者: woyaodwn    時(shí)間: 2021-12-28 10:07
這個(gè)能直接使用嗎,




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1