新手必看!嵌入式STM32-PID

news/2024/10/18 18:28:38/

本文目录

  • 一、知识点
    • 1. 位置式pid
      • (1)公式
      • (2)代码
    • 2. 串级PID
      • 简易代码

  

一、知识点

pid_5">1. 位置式pid

(1)公式

在这里插入图片描述

(2)代码

pid.c

typedef struct PID {float  Kp;         //  Proportional Const  P系数float  Ki;           //  Integral Const      I系数float  Kd;         //  Derivative Const    D系数float  LastError;          //  Error[-1]  float  Error;              //  Error[0 ]  float  DError;            //pid->Error - pid->LastError	float  SumError;           //  Sums of Errors  float  output;float  Integralmax;      //积分项的最大值float  outputmax;        //输出项的最大值
} PID;//为了防止积分项过度累积,引入积分项的限幅是一种常见的做法。
//限制积分项的幅值可以防止积分项过度增加,从而限制了系统的累积误差。这样可以避免系统过度响应或者不稳定。
float abs_limit(float value, float ABS_MAX)   //积分限幅,设置最大值。
{if(value > ABS_MAX)value = ABS_MAX;if(value< -ABS_MAX)value = -ABS_MAX;return value;
}//函数里传入指针,修改时会修改指针里的值。
float PID_Position_Calc( PID *pid,  float  Target_val,  float Actual_val)  //位置式PID
{   pid->Error =  Target_val - Actual_val;      //与pid P系数相乘。比例误差值 当前差值=目标值-实际值pid->SumError += pid->Error;                 //与pid I系数相乘。稳态误差值 误差相加作为误差总和,给积分项pid->DError = pid->Error - pid->LastError;   //与pid D系数相乘。 微分项-消除震荡pid->output =  pid->Kp* pid->Error +   \      //这里的\是续航符,表示和下面的内容是连着的。abs_limit( pid->Ki* pid->SumError, pid->Integralmax ) +   \pid->Kd* pid->DError ;  pid->LastError = pid->Error; //更新误差//限制输出最大值,防止出现突发意外。if(pid->output > pid->outputmax )  pid->output = pid->outputmax; if(pid->output < - pid->outputmax )  pid->output = -pid->outputmax;return pid->output ;
}//PID初始化
void PIDInit(PID *pid, float Kp , float Ki , float Kd ,  float Limit_value)  
{  pid->Kp= Kp;pid->Ki= Ki;pid->Kd= Kd;pid->LastError = pid->Error =pid->SumError= pid->output =  0; pid->Integralmax = pp->outputmax  = Limit_value;
}  

2. 串级PID

利用位置式pid的方法将位置环和速度环组合在一起使用。
在这里插入图片描述

简易代码

将目标位置和实际位置传入PID中,计算出期望转速。

#include "stdio.h"PID postion_pid;
PID speed_pid;int main(void) {// 初始化系统时钟SystemClock_Config();// 初始化PID控制器PID_Init(&postion_pid, 1.0f, 0.1f, 0.01f); // PID参数根据实际情况调整PID_Init(&speed_pid, 1.0f, 0.1f, 0.01f); // PID参数根据实际情况调整// 设置目标位置float target_position = 100.0f; // 假设目标位置为100while (1) {float current_position = GetPosition();    // 获取当前位置float current_speed = GetSpeed ();        // 获取当前转速// 更新PID控制器并计算控制量,这个输出值为当前位置向目标位置变换的一个速度或力。float control_output = PID_Position_Calc(&pid, target_position, current_position); //位置环float velocity_output = PID_Position_Calc(&speed_pid, control_output , current_speed );  //速度环Set_Pwm(velocity_output); //电机转动HAL_Delay(10); // 这里延时10毫秒,可根据实际情况调整}
}// 用于模拟读取位置的函数,这里假设返回的是传感器测量到的位置
float GetPosition() {// 在这里替换为获取位置的实际代码return 0.0f; // 这里暂时返回0,表示初始位置
}
// 用于模拟读取转速的函数。
float GetSpeed () {// 在这里替换为获取位置的实际代码return 0.0f; // 这里暂时返回0,表示初始位置
}
void Set_Pwm(int pwm)  //设置速度
{TIM4->CCR1=1550-pwm;    //速度环设置--
}


http://www.ppmy.cn/news/1426483.html

相关文章

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统

产品概述 煤矿安全知识基础学习VR系统 系统内容&#xff1a; 煤矿安全知识基础学习VR系统内容包括&#xff1a;下井流程&#xff08;正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全&#xff09;&#xff1b;运煤流程…

Home Assistant OS转 Hassio Supervisor(docker 版本)

这是一个失败案例&#xff0c;请忽略。 原因 HAOS缺点&#xff1a;系统不是很好用&#xff0c;无法满足我在上面使用python开发插件的小需求&#xff08;或许有方法满足&#xff0c;但是我没找到&#xff09;。 HAOS优点&#xff1a;方便安装&#xff0c;配置非常方便。 数据…

excel表导入导出

excel表导入导出 导出excel 调用导出员工接口-----接收二进制流blob-----下载文件 导出员工接口返回的是二进制流blobaxios配置responseType为blob&#xff0c;接收二进制流格式是blobfile-saver 实现下载blob文件 步骤 1.封装一个导出的api接口 // 导出员工的excel export…

React间接实现一个动态组件逻辑

在开发一个浏览器插件的时候&#xff0c;用的plasmo框架和react支持的&#xff0c;里面使用react开发一个菜单功能&#xff0c;但是又不想使用react-router&#xff0c;所以就想着能不能使用一个很简单的方式做一个替代方案&#xff1f;那肯定是可以。 我在引入一个组件后&…

优思学院|ISO45001职业健康安全管理体系是什么?

ISO45001:2018是新公布的国际标准规范&#xff0c;全球备受期待的职业健康与安全国际标准&#xff08;OH&S&#xff09;于2018年公布&#xff0c;并将在全球范围内改变工作场所实践。ISO45001将取代OHSAS18001&#xff0c;成为全球工作场所健康与安全的参考。 ISO45001:201…

NLP_知识图谱_介绍、构建、问答知识

文章目录 知识图谱的介绍图图能做些什么任务基于图的推荐系统图的一些基本概念与表述有向图与无向图节点的度节点的边的数量有向图又分为入度和出度 什么是知识图谱知识图谱属于异质图知识图谱的schema知识图谱的应用场景 知识图谱的构建三元组如何构建知识图谱构建知识图谱通常…

基于Hadoop的石油大数据平台设计

基于Hadoop的石油大数据平台设计 Design of an oil big data platform based on Hadoop 完整下载链接:基于Hadoop的石油大数据平台设计 文章目录 基于Hadoop的石油大数据平台设计摘要第一章 绪论1.1 研究背景1.2 研究意义1.3 国内外研究现状1.4 本文研究内容与结构 第二章 Ha…

Destroy销毁速度慢导致的错误

Destroy的销毁速度慢&#xff0c;而导致新加载的UI内容在Destroy代码后面&#xff0c;也随Destroy的GameObect销毁了。改用DestroyImmediate就可以保证新加入的内容不会被在此之前的销毁行为而销毁。 DestroyImmediate应当谨慎&#xff0c;因为它会立即销毁对象&#xff0c;不受…