stm32控制器下经常会用到对温度控制,适度控制,转速控制等需要自动控制相关的操作,因此在使用中需要不断提高对自动控制 原理部分的学习,一个好的自动控制系统包含三个 主要因素:稳,快,准。稳即系统的稳定性,快即系统的快速性,准即控制的准确性。
在自动控制中比例增益,积分时间,微分时间三个主要变量。下面就这三个变量进行动态展示。
如上图所示,假设在单位阶跃响应下,比例控制幅值,kp越大值越高相关的,积分时间控制精确度,数值越大波形超调量越大,微分时间控制波形的平缓程度。
//实现增量式PID算法
#include "stdio.h"
void pid_init();//PID参数初始化
float pid_realise(float speed);//实现PID算法
struct {
float set_speed;//设定速度
float actual_speed;//实际速度
float error;//偏差
float error_next;//上一个偏差
float error_last;//上上一个偏差
float kp,ki,kd;//定义比例,积分,微分参数
}pid;
int main()
{
pid_init();
int count = 0;
while(count<400)//进行400次 PID 运算,使初始值从0开始接近200.0
{
float speed = pid_realise(200.0);//设定值设定为200.0
printf("%f\n",speed);//输出每一次PID 运算后的结果
count++;
}
}
void pid_init()
{
pid.set_speed = 0.0;
pid.actual_speed = 0.0;
pid.error = 0.0;
pid.error_next = 0.0;
pid.error_last = 0.0;
//可调节PID 参数。使跟踪曲线慢慢接近阶跃函数200.0 //
pid.kp = 0.2;
pid.ki = 0.01;
pid.kd = 0.2;
}
float pid_realise(float speed)//实现pid
{
pid.set_speed = speed;//设置目标速度
pid.error = pid.set_speed - pid.actual_speed;
float increment_speed;//增量
increment_speed = pid.kp*(pid.error-pid.error_next)+pid.ki*pid.error+\
pid.kd*(pid.error-2*pid.error_next+pid.error_last);//增量计算公式
pid.actual_speed+= increment_speed;
pid.error_last = pid.error_next;//下一次迭代
pid.error_next = pid.error;
return pid.actual_speed;
}
运行数据得到图标如下 :
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
控制器
+关注
关注
112文章
16092浏览量
177023 -
STM32
+关注
关注
2264文章
10854浏览量
354230 -
PID
+关注
关注
35文章
1468浏览量
85174
发布评论请先 登录
相关推荐
教你用C语言实现位置式PID和增量式PID
控制器”,拿控制电机来说,参考下面模型:下面引用一段网上经典的话:在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法
发表于 05-30 08:00
如何使用免疫粒子群优化算法实现增量式的PID控制
基于粒子群优化算法的收敛速度快简单易实现的特点和免疫算法的免疫记忆、免疫自我调节和多峰值收敛的特点,本文设计出免疫粒子群算法,并将其应用于PID
发表于 11-01 15:41
•7次下载
使用单片机和Arduino实现增量式PID位置式PID算法和PID库免费下载
本文档的主要内容详细介绍的是使用单片机和Arduino实现增量式PID位置式PID
发表于 05-28 16:30
•68次下载
评论