首页 > 编程语言 >电赛控制类PID算法实现

电赛控制类PID算法实现

时间:2023-05-28 18:56:42浏览次数:33  
标签:积分 电赛 PID float pid 算法 Error LastError

一、什么是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,float,pid,算法,Error,LastError
From: https://www.cnblogs.com/xiaohuzaixue/p/17438460.html

相关文章

  • 《数据结构与算法》之栈结构
    导言:在计算机发明之初是为了计算,所以叫计算机,对我们给定的一个算式,然后给定的一套规则加,减,乘,除,等,它就可以自己进行计算了,然后返回一个结果给我们对于一般的算式:2+3+4很显然,从左往右依次扫描,依次相加很简单的计算出来,因为它们是同级运算,可以很简单的做到但是,常见的运算不只......
  • 数据结构与算法脉络总结
    目录一、数据结构1.链表2.栈3.队列4.散列表5.集合6.字典树7.堆8.优先队列9.并查集二、算法1.排序2.字符串3.图论4.贪心5.动态规划6.其他:分治、二分查找、双指针、多路归并一、数据结构1.链表2.栈3.队列4.散列表5.集合6.字典树7.堆8.优先队列9.......
  • FIT3155 S1 加解密算法
    FIT3155S1/2023:Assignment3(Duemidnight11:55pmonSunday28May2023)[Weight:10=5+5marks.]Yourassignmentwillbemarkedontheperformance/efficiencyofyourprograms.Youmustwriteallthecodeyourself,andshouldnotuseanyexternallibrary......
  • 算法学习day28回溯part04-93、78、90
    packageLeetCode.backtrackpart04;importjava.util.ArrayList;importjava.util.List;/***93.复原IP地址*有效IP地址正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。*例如:"0.1.2.201"和"192.168.1.1"是有效IP地......
  • 操作系统(3.1)--处理机调度的层次和调度算法的目标
    一、处理机调度层次1.高级调度(HighLevelScheduling)高级调度又称长程调度或作业调度,它的调度对象是作业。其主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程、分配必要的资源,并将它们放入就绪队列。主要用于多道批处理系统中,而在分时和实......
  • m基于MATLAB的发票数字信息识别算法仿真,通过形态学处理进行字符分割,通过模板匹配实
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等......
  • 算法刷题记录:回行矩阵(未AC,TLE了)
    题目链接:https://ac.nowcoder.com/acm/contest/19306/1026题目分析这种题,画个图,模拟就对啦。TLE代码#include<iostream>usingnamespacestd;intn,cnt;intw[25][25];intmain(){cin>>n;//构建框架intdx=1,dy=1;while(1)......
  • m基于ABC人工蜂群优化的无线传感器网络路由优化算法matlab仿真,对比优化前后网络寿命,
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要无线传感器网络通常使用电池电源,因此能量有限,属于一次性使用。因此,无线传感器网络在原理和应用平台上都有自己的特点:•有限的能源和存储容量传感器节点通常布置在无人值守的运行环境中,节点能量由电池提供,但在......
  • m基于ABC人工蜂群优化的无线传感器网络路由优化算法matlab仿真,对比优化前后网络寿命,
    1.算法仿真效果matlab2022a仿真结果如下:       2.算法涉及理论知识概要       无线传感器网络通常使用电池电源,因此能量有限,属于一次性使用。因此,无线传感器网络在原理和应用平台上都有自己的特点: •有限的能源和存储容量        传感器......
  • 算法
    练习1-递归与分治铺砖对于一个2行N列的走道。现在用1×2,2×2的砖去铺满。问有多少种不同的方式。下图是一个2行17列的走道的某种铺法。讲解视频:https://blog.csdn.net/Keven_11/article/details/119645827算法思路: 主要还是一个拆分的思想,前两列的摆法无法拆解,所以事先......