基于STM32的位置式PID控制器函数

基于STM32的位置式PID控制器函数:


声明:本篇博客不会讲解PID的原理与定义(默认你会了),只提供一个stm32实现PID的函数,并分享另外一个大佬的PID调参经验

今天成功用差速PID驱动循迹小车了,非常高兴,所以很久没更新CSDN了,今天就把这次循迹小车的核心----PID控制器函数公开一下哈!

GuiStar_PID.h:

/**
  ****************************************************************************************
  * @file    GuiStar_PID.h
  * @author  GuiStar-李什么恩
  * @version V1.1.0
  * @date    2022-11-19
  * @brief   该文件含有一个PID控制器函数,使用方法是:首先初始化一个叫做GuiStar_PIDTypedef
  *			 的结构体,结构体成员是P,I,D三个参数,你需要根据实际情况进行PID调参,然后使用
  * 		 一个叫做GuiStar_P_PID的函数来完成闭环控制,详细使用方法请查看结构体和函数的说明
  *			 文档.
  ****************************************************************************************
  */
#ifndef __GUISTAR_PID_H__
#define __GUISTAR_PID_H__

#include "stm32f10x.h"                  // Device header

//PID调参结构体///
typedef struct
{
	float KP;//PID比例参数(影响达到预期的速度)
	float KI;//PID积分参数(消除由KP参数产生的静态误差)
	float KD;//PID微分参数(消除达到预期过程中的震荡行为)
}GuiStar_PIDTypedef;
/*PID调参是重中之重,应用不同,参数也不同,并且还与经验有一定关系
很遗憾,这里帮不到大家了,自己努力钻研摸索吧!*/


/****************************PID控制器函数********************************/
float GuiStar_P_PID (int Current, int Target, GuiStar_PIDTypedef *PID);

#endif


GuiStar_PID.c:

#include "GuiStar_PID.h"

/**	
  * @brief  	PID控制器
  * @param  	Current 			 当前值(反馈值或初始值)
  * @param  	Target  			 目标值(预期达到的目标)
  * @param  	GuiStar_PIDTypedef*  PID参数结构体的地址,需要你自己去初始化以指定PID参数,
  *									 结构体的声明请在GuiStar_PID.h文件中查看
  * @retval 	output  			 本次控制输出值(整型值)
  * @suggestion 推荐这样使用PID控制器
  *             定时中断,每次进入中断输入参数调用PID返回下一次输出值,
  *				然后退出中断;最后在函数外部根据实际的逻辑,来
  *				控制对象做相应的动作(例如:控制PWM占空比来控制电机)
  */
float GuiStar_P_PID (int Current, int Target, GuiStar_PIDTypedef* PID)
{ 	
	 static float error,output,Integral_error,Last_error;
	 error=Target-Current;
	 Integral_error+=error;
	 output=(PID->KP)*error+(PID->KI)*Integral_error+(PID->KD)*(error-Last_error);
	 Last_error=error;
	 return output;
}

至于如何使用这两个文件,里面的注释已经很详尽了,但是不足之处就是PID调参没有具体说明,这也是我无奈的地方,因为PID调参真的很吃经验,不过基本的步骤还是有的:

请看这位大佬的博客
PID调参的步骤

OK今天就分享到这里,其实我写的PID控制器函数只是一个工具而已,PID的重中之重是调参,所以学习PID必须在实践中不断地总结经验。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuiStar_李什么恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值