0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

就增量式PID的函数进行编写

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-06-17 14:27 次阅读

首先,就增量式PID的函数进行编写:

头文件,全局变量与宏定义如下:


#include "stdio.h"
#include "math.h"
void pid_init();//PID参数初始化
float pid_realise(float speed);//实现PID算法

#define value 1400.0

首先定义结构体pid的相关内容,后面将根据PID里面的相关参数进行修改调整,观察波形情况。

struct {
   float set_speed;//设定速度 
   float actual_speed;//实际速度
   float error;//偏差  
   float error_next;//上一个偏差  
   float error_last;//上上一个偏差 
   float kp,ki,kd;//定义比例,积分,微分参数  
}pid;

将PID结构体中的参数进行初始化设置,其中的参数是我经过调整后的参数

void pid_init()
{
    pid.set_speed = 0;
    pid.actual_speed = 10000.0;//原始值0.0
    pid.error = 0.0;
    pid.error_next = 0.0;
    pid.error_last = 0.0;
    //可调节PID 参数。使跟踪曲线慢慢接近阶跃函数200.0 // 
    pid.kp = 0.33333;//原始值0.2
    pid.ki = 0.2111;//原始值0.1
    pid.kd = 0.1;//原始值0.3
}

接下来实现PID实现的过程函数:

float pid_realise(float speed)//实现pid  
{   float increment_speed;//增量
    pid.set_speed = speed;//设置目标速度  
    pid.error = pid.set_speed - pid.actual_speed;
 
     
    increment_speed = pid.kp*(pid.error-pid.error_next)+pid.ki*pid.error+\
    pid.kd*(pid.error-2*pid.error_next+pid.error_last);//增量计算公式  
    
    pid.actual_speed+= increment_speed;
    pid.error_last = pid.error_next;//下一次迭代  
    pid.error_next = pid.error;
    return pid.actual_speed; 
}

接着就是主函数,主函数这里将进行设置,逻辑如下:初始化参数,进行运算,运算次数设置为400次,可以提高,因为调整后的参数,后面又有break可以跳出while循环因此不需要在意这里,接下来就是不断判断期望值与实际值误差书否在5以内

int main()
{ int count = 1;
 int num = 0;
 int type;
   pid_init();
   while(count<400)//进行400次 PID 运算可以提高,使初始值从0开始接近200.0   
   {
       float speed = pid_realise(value);//设定值设定为200.0
 type=abs(speed-value);
 printf("%f\n",speed);//
 if( type <= 5)    ///判断每次的误差是否在5以内
 {
       num++;
  if(num==6)
  {
    printf("run number is %d\r\n",count);
    break;
  }
  else count++;
 }
 else count++;
   }
}

运行函数之后得到如下图所示的曲线,可以看到,假设单位阶跃相应的过程中期望值发生改变,假设初始值为7000,要调整到理想值按照当前参数大约需要47次变换。

poYBAGKsIpGAdvXzAACd9Wm_4Fo256.pngpYYBAGKsIDGAU2BLAAA_s1izcYg029.png
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PID
    PID
    +关注

    关注

    35

    文章

    1470

    浏览量

    85250
  • 函数
    +关注

    关注

    3

    文章

    4299

    浏览量

    62372
  • 编写
    +关注

    关注

    0

    文章

    29

    浏览量

    8429
收藏 人收藏

    评论

    相关推荐

    浅析位置PID增量PID算法

    位置PID增量PID算法通常依据控制器输出与执行机构的对应关系,将基本数字PID算法分为位
    发表于 01-15 18:35

    教你用C语言实现位置PID增量PID

    ,对那些噪声较大的系统一般不用微分, 或在微分起作用之前先对输入信号进行滤波。ⅢPID算法代码 PID 控制算法可以分为位置 PID
    发表于 05-30 08:00

    位置PID增量PID的区别在哪?

    什么是PIDPID控制器主要有哪些应用?位置PID增量
    发表于 07-13 08:13

    如何实现增量PID

    虽然PID不是什么牛逼的东西,但是真心希望以后刚刚接触这块的人能尽快进入状态。特地分享一些自己如何实现的过程。首先说说增量PID的公式,这个关系到MCU算法公式的书写,实际上两个公式
    发表于 09-13 08:19

    什么是增量PID

    目录:一、什么是增量PID二、硬件部分三、软件部
    发表于 09-13 09:05

    位置PID增量PID简介

    位置PID公式增量PID公式位置增量
    发表于 01-20 07:40

    位置PID增量PID区别是什么?

    位置 PID增量 PID有什么区别。在小车调速里一般用增量
    发表于 10-26 06:54

    请问如何调节增量pid

    增量pid中的kpkikd对应位置的中的pi d 的值吗,调节增量
    发表于 11-09 07:27

    增量PID控制算法

    增量PID控制算法-2011,有需要的下来看看。
    发表于 04-01 14:54 30次下载

    增量pid分析及参数整定

    PID算法是工程控制领域常用的一种算法,其有着技术成熟,不需要建立数学模型,参数整定灵活,适用性强,鲁棒性强,控制效果好等优点,得到了广泛的应用,其参数整定对控制效果影响极大,针对增量PI
    发表于 11-24 16:27 1.6w次阅读
    <b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>pid</b>分析及参数整定

    增量与位置PID

    最近看了一些文献,发现其中一些文献标题写着是用增量PID控制,但是看表达式乎仍是位置PID控制。不知是他弄错了,还是我的理解错了,下面根
    发表于 11-25 11:31 1540次阅读

    增量pid参数调整公式及策略

    增量PID控制,数字PID控制算法的一种基本形式,是通过对控制量的增量(本次控制量和上次控制量的差值)
    的头像 发表于 02-26 14:57 5.5w次阅读

    使用单片机和Arduino实现增量PID位置PID算法和PID库免费下载

    本文档的主要内容详细介绍的是使用单片机和Arduino实现增量PID位置PID算法和PID
    发表于 05-28 16:30 68次下载
    使用单片机和Arduino实现<b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>PID</b>位置<b class='flag-5'>式</b><b class='flag-5'>PID</b>算法和<b class='flag-5'>PID</b>库免费下载

    PID:智能小车入门(位置增量

    PID:智能小车入门(位置增量PID的公式今年大二,以一个新人的角度来说一下PID及其用
    发表于 01-14 11:22 17次下载
    <b class='flag-5'>PID</b>:智能小车入门(位置<b class='flag-5'>式</b>和<b class='flag-5'>增量</b><b class='flag-5'>式</b>)

    位置PID增量PID的区别

    PID(比例-积分-微分)控制器作为工业自动化领域中的核心控制算法,广泛应用于各种需要精确控制的系统中。在PID控制器的实现中,有两种主要的控制模式:位置PID
    的头像 发表于 06-05 16:23 5902次阅读