电赛控制类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); //返回计算值 }

__EOF__

本文作者xiaohu
本文链接https://www.cnblogs.com/xiaohuzaixue/p/17438460.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   EternalH  阅读(538)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示