一、什么是PID

学过自动控制原理的对PID并不陌生,PID控制是对偏差信号e(t)进行比例、积分和微分运算变换后形成的一种控制规律。PID 算法的一般形式:

  • PID控制系统原理框图


二、PID离散化

对PID连续系统离散化,从而方便在处理器上实现,PID 离散表示形式:

离散化后最终得到位置式PID:

u(k)为控制器输出的控制量;(输出)

e(k)为偏差信号,它等于给定量与输出量之差;(输入)

Kp 为比例系数;

Ti 为积分时间常数;

Td 为微分时间常数。


1. 位置式PID公式

2. 增量式PID公式


三、两种PID的不同点

  • 位置式

    是一种非递推算法,输出值U(k)和执行机构的实际位置一一对应,在不带积分部件的对象中可以很好的应用。但是每次输出均与过去的状态有关,计算量大。
  • 增量式

    输出的是增量,控制增量的值仅与最近3次采样值有关,不需要累计偏差,运算量小,计算错误影响小。但会积分截断效应大,有稳态误差。

四、C语言程序实现

  • pid.c
#include "pid.h"

/*定义PID参数结构体*/
typedef struct _PID
{
float Kp,Ki,Kd;//比例系数、积分系数、微分系数
float SetValue,ActualValue;//目标值、实际值
float Error;//第K次误差
float LastError;//第K-1次误差
float PreError;//第K-2次误差
float SumError;//累计偏差
float Integral,MaxI;//积分、积分限幅
float Output,MaxOut;//输出、输出限幅
}PID; /************************************************
*@brief :位置式PID控制器
*@param :PID结构体变量地址,当前实际值
*@retval : 期望输出值
*************************************************/
int32_t Position_PID_Control(PID *pid,float Cur_Value)
{
pid->Error=pid->SetValue-Cur_Value; //计算偏差
pid->SumError +=pid->Error;//累计偏差
pid->ActualValue=(pid->Kp*(pid->Error-pid->LastError))//比例环节
+(pid->Ki*pid->SumError)//积分环节
+(pid->Kd*(pid->Error-pid->LastError);//微分环节
pid->LastError=pid->Error;
return ((int32_t)pid->ActualValue); //返回计算值
} /************************************************
*@brief :速度闭环PID控制
*@param :PID结构体变量地址,当前实际值
*@retval : 期望输出值
*************************************************/
int32_t Inc_Pid_Ctrl(PID *pid,float Cur_Value)
{
pid->Error=pid->SetValue-Cur_Value; //计算偏差
pid->ActualValue +=(pid->Kp*(pid->Error-pid->LastError))//比例环节
+(pid->Ki*(pid->Error))//积分环节
+(pid->Kd*(pid->Error-2*pid->LastError+pid->PreError));//微分环节
pid->PreError=pid->LastError;//存储偏差,进行下次计算
pid->LastError=pid->Error;
return ((int32_t)pid->ActualValue); //返回计算值
}

电赛控制类PID算法实现的更多相关文章

  1. PID算法通俗理解,平衡车,倒立摆,适合不理解PID算法的人来看!

    先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线(PID资料再我的另一篇博客里) 倒立摆资料连接↓ https://www.cnblogs.com/LiuXinyu ...

  2. PID控制及整定算法

    一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...

  3. PID算法控制简单理解

    1 传统的位式控制算法 用户期望值Sv(设定值)经控制算法输出一个输出信号OUT,输出信号加载到执行部件上(像MOS管等)对控制对象进行控制(步进电机.加热器等),控制对象的当前值(Pv)如速度通过传 ...

  4. PID算法控制直流电机笔记

    1.将偏差的比例.积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器.简单说就是根据系统的误差,利用比例.积分.微分计算出控制量进行控制. 2.为什么需要P ...

  5. c# PID算法入门

    离开工控行业已经有一段时间了,最近回忆起以前的工作,又对 PID 算法有了兴趣.所以写了一个小项目,希望可以帮到需要的人,也算是对那段工作经历的一个总结. 这是一个 winform 的项目.负载是一个 ...

  6. PID算法的C语言实现

    1.根据我控制算法类文章中关于PID的理论的一些描述,同时也根据网络上一些其他的PID文章,以及自己最近一个项目的实践后,总结了几套基于C语言的PID算法,由于网络中很少有人进行分享完整的PID算法实 ...

  7. 【系列】关于NJUPT电赛自控方向第一次积分赛的总结

    本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...

  8. 线性控制原理——PID算法应用

    使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...

  9. 位置式PID与增量式PID算法

    位置式PID与增量式PID算法  PID控制是一个二阶线性控制器     定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.     优点             ...

  10. PID算法笔记2

    总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...

随机推荐

  1. 关于js通过修改行内样式来修改元素样式

    关于js通过修改行内样式来修改元素样式 1.当我们通过使用js来修改html元素的样式时,使用的方法是为元素添加行内样式, 此时的js样式是生效的,因为行内样式优先级高于类名 2.如果已有同属性的行内 ...

  2. 手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3-RestNet50-VGG16(附python源代码及数据库)——改变世界经典人工智能项目实战(一)手把手教学迁移学习

    目录 1.迁移学习简介 2.项目简介 3.糖尿病视网膜病变数据集 4.考虑类别不平衡问题 5.定义模型质量 6.定义损失函数 7.预处理图像 8.搭建迁移学习网络 VGG16 迁移学习网络 Incep ...

  3. VUE中的$set与$delete的原理

    我们上文说了,Vue 是通过 Object.defineProperty 和重写数组的原型方法来达到监控数据的目的.但是,在某些情况下,上面两种方案无法做到监控数据的变化,例如: (1):当我们给对象 ...

  4. 快来玩AI画图!StableDiffusion模型搭建与使用入门~

    前言 最近AI很火,先是AI画图,然后就ChatGPT,后者我已经用了一段时间了,用来写作文挺不错的,但OpenAI屏蔽了中国IP,加上用户太多啥的,用起来没那么爽,但没办法全球只此一家,只能捏着鼻子 ...

  5. [操作系统]记一次未尽的三星 Galaxy A6s(SM-G6200)刷机过程

    给女王大人刷机,第一次刷机,很遗憾,遇到了三星的"锁三键"问题,没有搞成.记录一下这个过程所涉猎的一些刷机基本知识,不妨当作一次学习过程. 1 刷机过程 Step1 查看手机基本信 ...

  6. [Linux]Linux中安装软件的方式?

    近日处理安全漏洞时,出现了这样一个问题: 判断某软件组件是通过何种方式安装的. 知道是何种方式安装,才方便做进一步的解决(升级/配置/卸载等操作) 1 解压即用 例如: sublime_text.py ...

  7. JQuery日期选择控件-兼容手机端

    在项目中经常使用到日期时间控件. 用的时候总是临时去找,现在记录下,以备下次使用. 官网http://www.bootcss.com/p/bootstrap-datetimepicker/ 需要引用一 ...

  8. LeeCode 318周赛复盘

    T1: 对数组执行操作 思路:模拟 public int[] applyOperations(int[] nums) { int n = nums.length; for (int i = 0; i ...

  9. Terraform 系列-什么是 IaC?

    系列文章 Terraform 系列文章 前言 聊到 Terraform, 必然绕不开 IaC 这个概念?那么,什么是 IaC? 基本概念 基础架构即代码 (Infrastructure as Code ...

  10. windows系统git使用ssh方式和gitee/github进行同步

    前言 在从github/gitee远程仓库获取代码时,除了使用https方式,我们还可以使用ssh连接的方式与远程仓库服务器通信,其好处是有时会比https更方便.稳定.快速. 和与普通的linux服 ...