电赛控制类PID算法实现
一、什么是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算法实现的更多相关文章
- PID算法通俗理解,平衡车,倒立摆,适合不理解PID算法的人来看!
先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线(PID资料再我的另一篇博客里) 倒立摆资料连接↓ https://www.cnblogs.com/LiuXinyu ...
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- PID算法控制简单理解
1 传统的位式控制算法 用户期望值Sv(设定值)经控制算法输出一个输出信号OUT,输出信号加载到执行部件上(像MOS管等)对控制对象进行控制(步进电机.加热器等),控制对象的当前值(Pv)如速度通过传 ...
- PID算法控制直流电机笔记
1.将偏差的比例.积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器.简单说就是根据系统的误差,利用比例.积分.微分计算出控制量进行控制. 2.为什么需要P ...
- c# PID算法入门
离开工控行业已经有一段时间了,最近回忆起以前的工作,又对 PID 算法有了兴趣.所以写了一个小项目,希望可以帮到需要的人,也算是对那段工作经历的一个总结. 这是一个 winform 的项目.负载是一个 ...
- PID算法的C语言实现
1.根据我控制算法类文章中关于PID的理论的一些描述,同时也根据网络上一些其他的PID文章,以及自己最近一个项目的实践后,总结了几套基于C语言的PID算法,由于网络中很少有人进行分享完整的PID算法实 ...
- 【系列】关于NJUPT电赛自控方向第一次积分赛的总结
本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...
- 线性控制原理——PID算法应用
使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...
- 位置式PID与增量式PID算法
位置式PID与增量式PID算法 PID控制是一个二阶线性控制器 定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能. 优点 ...
- PID算法笔记2
总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...
随机推荐
- WebSocket服务器
//创建websocket 服务器 ws_server.php //https://wiki.swoole.com/wiki/page/479.html //创建websocket服务器对象,监听0 ...
- 三分钟速览GPT系列原理
其中,Transformer和BERT来自Google,GPT系列[GPT.GPT-1.GPT-2.GPT-3.ChatGPT.GPT-4]来自OpenAI. GPT Paper名为Improving ...
- Mybatis 框架下 SQL 注入攻击的方式
前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少. 新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手 ...
- RDIFramework.NET开发框架WinForm版新增编码管理
1.概述 编码管理是企业管理和信息化建设过程中一个至关重要的环节.各信息化系统是通过编码来标识业务对象的,统一的编码方案可以作为各系统的通话语言,也可以为信息化系统的集成提供便利.建设数据编码的基本原 ...
- C++重载的奥义之运算符重载
0.引言 重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样. 正如在之前的文章<重 ...
- Nacos注册中心
介绍 Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册.服务发现规范.因此使用Nacos和使用Eureka对于 ...
- 纯前端使用xlsx实现导出表格
列表数据纯前端使用xlsx实现导出功能 基础写法 let filename = "资产导出.xlsx"; 定义导出数据 let data = [ ["第一列", ...
- PostgreSQL-HA 高可用集群在 Rainbond 上的部署方案
PostgreSQL 是一种流行的开源关系型数据库管理系统.它提供了标准的SQL语言接口用于操作数据库. repmgr 是一个用于 PostgreSQL 数据库复制管理的开源工具.它提供了自动化的复制 ...
- Python NumPy 广播(Broadcast)
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...
- 2023-05-09:石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。 有 n 块石子排成一排。 每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头, 并获得与该行中剩余石头值
2023-05-09:石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排. 每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头, 并获得与该行中剩余石头值 ...