打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PID公式的推导过程及实现代码
一、PID框图:



n0(t)是要稳定的值
n(t)是当前输出值
e(t) = n0(t) - n(t)


一、模拟PID控制原理
 
这个公式网络上很好找:

 二、数字PID控制
由于模拟的微积分运算对应计算机来说是不太好写代码的,所以要利用采样将数据离散化

于是公式就可以转换为:



 其中T为采样时间,由于T之类的参数是常量,所以将Kp乘入公式中可以转换成另一种写法
这个公式叫位置式算法

由于要不断的累加ej,增加了计算量,所以这个公式又可以转换为增量式算法:


然后u(k) = u(k-1) + u

三、参数的整定
先将Ti设置为无穷大,Td设置为0,调节Kp
然后再调节Ti,最后是Td

四、实现代码

typedef struct PID
{
    int SetPoint;    //设定目标 Desired Value
    long SumError;             //误差累计
    double Proportion;        //比例常数 ProportionalCons
    double Integral;          //积分常数Integral Const
    double Derivative;        //微分常数 Derivative Const
    int LastError;            //Error[-1]
    int PrevError;            //Error[-2]
} PID;

int IncPIDCalc(int NextPoint)
{
    int iError,iIncpid;
    //当前误差
    iError =sptr->SetPoint - NextPoint;
    //增量计算
    iIncpid =sptr->Proportion * iError             //E[k]项
            - sptr->Integral   *sptr->LastError    //E[k-1]项
            + sptr->Derivative * sptr->PrevError;  //E[k-2]项
    //存储误差,用于下次计算
    sptr->PrevError =sptr->LastError;
    sptr->LastError =iError;
    //返回增量值
    return(iIncpid);
}
int LocPIDCalc(int NextPoint)
{
    int iError,dError;
    iError =sptr->SetPoint - NextPoint;      //偏差
    sptr->SumError +=iError;      //积分
    dError = iError -sptr->LastError;    //微分
    sptr->LastError =iError;
   return(sptr->Proportion * iError          //比例项
          +sptr->Integral * sptr->SumError  //积分项
          +sptr->Derivative * dError);       //微分项
}
 





本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
增量式PID控制C语言代码
PID通俗教程
PID的各种算法优缺点
PID控制器开发笔记之四:梯形积分PID控制器的实现
PID控制算法通俗理解
51单片机PID算法程序(三)增量式PID控制算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服