找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2136|回复: 0
打印 上一主题 下一主题
收起左侧

PID增量式 位置式代码

[复制链接]
跳转到指定楼层
楼主
ID:301186 发表于 2019-6-11 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//位置式PID
int32 PID_Realize(PID *sptr, float *PID, int32 NowData, int32 Point)
{
int32 iError, // 当前误差
   Realize; // 最后得出的实际增量
iError = Point - NowData; //计算当前误差
sptr->SumError += PID[KI] * iError; //误差积分
if (sptr->SumError >= PID[KT])
{
  sptr->SumError = PID[KT];
}
else if (sptr->SumError <= -PID[KT])
{
  sptr->SumError = -PID[KT];
}
Realize = PID[KP] * iError
   + sptr->SumError
   + PID[KD] * (iError - sptr->LastError)*100;
sptr->PrevError = sptr->LastError; // 更新前次误差
sptr->LastError = iError;     // 更新上次误差
sptr->LastData  = NowData;   // 更新上次数据
return Realize; // 返回实际值
}
//增量式PID
int32 PID_Increase(PID *sptr, float *PID, int32 NowData, int32 Point)
{
int32 iError, //当前误差
  Increase; //最后得出的实际增量
iError = Point - NowData; // 计算当前误差
Increase =  PID[KP] * (iError - sptr->LastError)
     + PID[KI] * iError
     + PID[KD] * (iError - 2 * sptr->LastError + sptr->PrevError);

sptr->PrevError = sptr->LastError; // 更新前次误差
sptr->LastError = iError;     // 更新上次误差
sptr->LastData  = NowData;   // 更新上次数据
return Increase; // 返回增量
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表