找回密码
 立即注册

QQ登录

只需一步,快速开始

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

上传一个PID调节例程(PID难点在参数,推荐ZN整定法)

[复制链接]
跳转到指定楼层
楼主
ID:264387 发表于 2021-6-4 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "pid.h"

PID pid; //存放PID算法所需要的数据

//          pid.Sv=120;        //用户设定温度
//        pid.Kp=30;         //比例系数
//        pid.T=500;         //PID计算周期
//          pid.Ti=5000000;         //积分时间
//        pid.Td=1000;         //微分时间
//        pid.pwmcycle=200;        //pwm周期1000
//        pid.OUT0=1;
void PID_Calc()  //pid计算
{
        float DelEk;
        float ti,ki;
        float td;
        float kd;
        float out;
if(pid.C10ms<(pid.T))  //计算周期未到
{
    return ;
}

pid.Ek=pid.Sv-pid.Pv;   //当前的偏差值 = 设定值 - 返回值
pid.Pout=pid.Kp*pid.Ek; //比例输出 = 比例系数*偏差

pid.SEk+=pid.Ek;        //历史偏差总和

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

ti=pid.T/pid.Ti;  //系数1

ki=ti*pid.Kp;     // 系数2

  pid.Iout=ki*pid.SEk*pid.Kp;  //积分输出 = 系数2 * 偏差和 * 比例系数

td=pid.Td/pid.T;   //系数3

kd=pid.Kp*td;      //系数4

pid.Dout=kd*DelEk; //微分输出 = 系数4 * 最近两次偏差和

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

///////////////////////////输出保护///////////////////////////////
if(out>pid.pwmcycle)
{
  pid.OUT=pid.pwmcycle;
}
else if(out<0)
{
  pid.OUT=pid.OUT0;
}
else
{
  pid.OUT=out;
}
//pid.OUT+=; //本次的计算结果
pid.Ek_1=pid.Ek;  //更新偏差

pid.C10ms=0;
}

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:462629 发表于 2021-12-28 10:07 | 只看该作者
这个能直接使用吗,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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