大型网站建设平台,海南: 加快推进全岛封关运作,网站设计成功案例,浙江建设继续教育网站首页之前有一位粉丝朋友读过我写的PID文章后#xff0c;觉得对自己的帮助挺大的#xff0c;后面也是向我建议关于PID自整定这块的知识#xff0c;是否可以不需要提前自整定#xff0c;而且在不实现超调的情况下#xff0c;进行PID的实时自整定。对于这个提议我觉得挺有意思的觉得对自己的帮助挺大的后面也是向我建议关于PID自整定这块的知识是否可以不需要提前自整定而且在不实现超调的情况下进行PID的实时自整定。对于这个提议我觉得挺有意思的也是查阅一些相关的文献和技术资料针对这个提议做一下自己的分享。下面是我和这位粉丝朋友的部分聊天记录。其实正如这位粉丝所提到的PID自整定办法和我们传统的离线自整定有很大的区别传统的 Z-N齐格勒 - 尼科尔斯离线整定是基于固定工况的参数。比如说提到的汽车自动巡航就不适合传统的自整定需要使用自适应的PID自整定实现。汽车自动巡航这类无超调、宽工况鲁棒性的 PID 控制需求核心是要实现在线自适应自整定而非传统的离线预整定。传统的 Z-N齐格勒 - 尼科尔斯离线整定是基于固定工况的参数无法应对车速起点变化、上下坡负载扰动而自适应 PID 自整定的核心是实时识别被控对象模型 动态调整 PID 参数。结合汽车巡航的特性可通过以下方案实现一、 先明确汽车巡航系统的被控对象特性汽车巡航的核心是发动机输出扭矩→车轮驱动力→克服阻力风阻、坡度阻力、滚动阻力→车速稳定其特性有 3 个关键难点非线性强阻力与车速平方成正比上下坡时坡度阻力突变工况时变车速起点不同低速 / 高速、负载不同空载 / 满载对象模型参数增益、时间常数变化大无超调约束车速超调会导致顿挫感影响驾驶体验因此阻尼特性必须足够强。这决定了自整定不能依赖 “一次性离线参数”必须是在线、实时、扰动自适应的。二、 适合汽车巡航的 PID 自整定方案1.模型参考自适应自整定MRAS—— 核心方案这是最适合汽车巡航的自整定方法核心思路是用一个理想的参考模型如 “阶跃输入无超调、快速响应” 的目标模型作为标杆实时对比实际系统输出与参考模型输出的误差通过自适应律调整 PID 参数。参考模型设计针对巡航需求参考模型设为一阶惯性无超调模型传递函数为其中Tm根据目标响应速度设定如车速从 60km/h 到 80km/h响应时间控制在 2-3s避免顿挫。自适应律实现定义误差信号e(t)ym(t)−yp(t)ym是参考模型输出yp是实际车速采用梯度下降法作为自适应律实时调整 PID 的Kp、Ki、Kd比例参数Kp跟踪对象增益变化如上坡时需要增大Kp以提升驱动力积分参数Ki消除稳态误差如平路稳定车速但需积分抗饱和避免爬坡时积分饱和导致车速超调微分参数Kd增强阻尼抑制超调下坡时增大Kd防止车速冲顶。优势无需提前离线整定直接在巡航过程中自适应完美匹配车速起点、坡度变化。2.扰动观测器 PID 自整定 —— 抗干扰强化汽车上下坡本质是外部负载扰动可通过扰动观测器DOB先估算扰动再用 PID 参数补偿实现 “扰动抑制 参数自整定” 的结合。扰动观测基于汽车动力学模型估算坡度阻力、风阻等扰动值d(t)参数自整定逻辑当观测到扰动d(t)突变如上坡时d(t)增大自动调整 PID 参数增大Kp提升系统增益抵消阻力增大增大Kd抑制扰动带来的速度波动限制Ki的积分速率防止积分饱和导致超调。3.模糊 PID 自整定 —— 工程易实现方案如果硬件算力有限如嵌入式 MCU可采用模糊控制 PID的自整定方案无需复杂的模型计算基于经验规则动态调整参数。输入量定义两个模糊输入速度误差ee目标车速−实际车速误差变化率ececdtde反映车速变化趋势。输出量PID 参数的修正量模糊规则设计核心针对无超调工况eecΔKpΔKiΔKd车速远低于目标大误差大小增大增大减小车速接近目标小误差小小减小减小增大车速有超调趋势ec 为负小大减小减小增大优势无需数学模型适合嵌入式平台实时运行通过规则直接保证无超调。三、 关键工程优化措施保证汽车巡航的 “完美控制”1.积分分离 抗饱和巡航时当车速误差较大如从 40km/h 到 100km/h暂时关闭积分环节避免积分饱和当误差小于阈值如 ±2km/h再开启积分消除稳态误差彻底杜绝超调。2.分段 PID 工况识别提前划分车速区间低速0-60km/h、高速60-120km/h每个区间预设基础 PID 参数再结合自整定算法微调。同时通过加速度传感器识别上下坡工况针对性调整参数。3.滤波处理对实际车速信号进行低通滤波如一阶 RC 滤波消除传感器噪声对微分环节的干扰避免微分 “放大噪声” 导致的车速抖动。四、 嵌入式平台STM32/ESP32的实现步骤1.硬件层采集车速轮速传感器、加速度IMU、节气门开度信号2.算法层初始化模糊规则表或 MRAS 参考模型参数实时计算速度误差e和误差变化率ec执行自整定算法输出更新 PID 参数输出节气门 / 电机控制信号3.优化层加入积分抗饱和、低通滤波逻辑调试响应时间和超调量。汽车巡航的无超调PID自整定不能用传统离线方法核心是在线自适应追求高精度、强鲁棒性 → 选模型参考自适应MRAS 扰动观测器追求工程易实现、低算力 → 选模糊 PID 自整定无论哪种方案都必须结合积分分离、抗饱和、工况识别等措施才能实现不同车速、上下坡的完美控制。以下是针对STM32 平台的汽车巡航模糊 PID 自整定控制代码框架基于标准 HAL 库开发包含模糊规则表、PID 核心算法、积分分离 抗饱和、车速滤波等关键逻辑可直接适配轮速传感器 / IMU 的硬件采集保证无超调、自适应上下坡 / 不同车速起点。1、代码整体架构/* 头文件包含 */#include stm32f1xx_hal.h#include math.h/* 核心参数定义 —— 根据实际车型调试 */#define TARGET_SPEED 80.0f // 目标巡航车速(km/h)#define SPEED_FILTER_TAU 0.1f // 车速低通滤波时间常数(s)#define ERROR_THRESHOLD 2.0f // 积分分离阈值(km/h)#define CONTROL_PERIOD 0.01f // 控制周期10ms(100Hz)/* PID基础参数分段预设自整定修正 */typedef struct {float Kp_base; // 基础比例系数float Ki_base; // 基础积分系数float Kd_base; // 基础微分系数float Kp; // 实时整定后比例系数float Ki; // 实时整定后积分系数float Kd; // 实时整定后微分系数} PID_Params;/* 模糊控制输入输出量化等级7级NB/NM/NS/ZO/PS/PM/PB */typedef enum {NB 0, // 负大NM, // 负中NS, // 负小ZO, // 零PS, // 正小PM, // 正中PB // 正大} FuzzyLevel;/* 全局变量 */PID_Params pid {1.2f, 0.05f, 0.8f, 1.2f, 0.05f, 0.8f}; // 初始基础参数float speed_actual 0.0f; // 实际车速(km/h)float speed_filtered 0.0f; // 滤波后车速float error 0.0f; // 速度误差float error_prev 0.0f; // 上一周期误差float error_dot 0.0f; // 误差变化率float integral 0.0f; // 积分项float throttle 0.0f; // 节气门开度输出(0~100%)float disturb 0.0f; // 扰动观测值坡度阻力估算/* 模糊规则表 —— ΔKp/ΔKi/ΔKd的量化值7x7矩阵 */// 行error等级 列error_dot等级 值参数修正量等级FuzzyLevel fuzzy_Kp_table[7][7] {{PB, PB, PM, PM, PS, ZO, ZO},{PB, PB, PM, PS, PS, ZO, NS},{PM, PM, PM, PS, ZO, NS, NS},{PM, PM, PS, ZO, NS, NM, NM},{PS, PS, ZO, NS, NS, NM, NM},{PS, ZO, NS, NM, NM, NM, NB},{ZO, ZO, NM, NM, NM, NB, NB}};FuzzyLevel fuzzy_Ki_table[7][7] {{NB, NB, NM, NM, NS, ZO, ZO},{NB, NB, NM, NS, NS, ZO, ZO},{NM, NM, NS, NS, ZO, PS, PS},{NM, NM, NS, ZO, PS, PM, PM},{NS, NS, ZO, PS, PS, PM, PM},{NS, ZO, PS, PM, PM, PB, PB},{ZO, ZO, PS, PM, PM, PB, PB}};FuzzyLevel fuzzy_Kd_table[7][7] {{PS, NS, NB, NB, NB, NM, PS},{PS, NS, NB, NM, NM, NS, ZO},{ZO, NS, NM, NM, NS, NS, ZO},{ZO, NS, NS, NS, NS, NS, ZO},{ZO, ZO, ZO, ZO, ZO, ZO, ZO},{PB, NS, PS, PS, PS, PS, PB},{PB, PM, PM, PM, PS, PS, PB}};/* 量化因子/比例因子将实际值映射到模糊等级 */#define E_RANGE 20.0f // 误差范围±20km/h#define EC_RANGE 10.0f // 误差变化率范围±10km/h/s#define E_QUANT (6.0f/E_RANGE) // 误差量化因子(7级0~6)#define EC_QUANT (6.0f/EC_RANGE) // 误差变化率量化因子#define KP_SCALE 0.2f // ΔKp比例因子等级→实际值#define KI_SCALE 0.01f // ΔKi比例因子#define KD_SCALE 0.1f // ΔKd比例因子2、核心函数实现1. 车速采集与滤波低通滤波消除噪声/*** brief 采集轮速传感器数据并转换为车速低通滤波* param wheel_speed: 轮速(rpm)* retval 滤波后车速(km/h)*/float Speed_Collect_Filter(float wheel_speed) {// 轮速转车速车速(km/h) 轮速(rpm) * 轮胎周长(m) * 60 / 1000float tire_circum 2.07f; // 轮胎周长示例195/65R15speed_actual wheel_speed * tire_circum * 60.0f / 1000.0f;// 一阶低通滤波y(t) α*y(t-1) (1-α)*x(t)ατ/(τT)float alpha SPEED_FILTER_TAU / (SPEED_FILTER_TAU CONTROL_PERIOD);speed_filtered alpha * speed_filtered (1 - alpha) * speed_actual;return speed_filtered;}2. 扰动观测估算坡度 / 风阻扰动/*** brief 基于IMU加速度和动力学模型估算扰动坡度阻力* param acc: 纵向加速度(m/s²)* retval 扰动值归一化-1~1负上坡正下坡*/float Disturbance_Observation(float acc) {// 汽车动力学简化模型F ma f f_g f_wfloat m 1500.0f; // 车重(kg)float f 0.01f * m * 9.8f; // 滚动阻力float f_w 0.5f * 1.293f * 1.2f * pow(speed_filtered/3.6f, 2); // 风阻float f_g m * 9.8f * sin(atan(acc/9.8f)); // 坡度阻力// 扰动归一化disturb f_g / (m * 9.8f);return disturb;}3. 模糊化将实际误差映射到模糊等级/*** brief 精确值模糊化误差/误差变化率→模糊等级* param value: 精确值* param range: 取值范围* param quant: 量化因子* retval 模糊等级0~6*/FuzzyLevel Fuzzification(float value, float range, float quant) {// 限幅if (value range) value range;if (value -range) value -range;// 量化到0~6级int level (int)(value * quant 3.0f); // 偏移3使负数映射到0~2正数到4~6零到3if (level 0) level 0;if (level 6) level 6;return (FuzzyLevel)level;}4. 模糊 PID 参数自整定/*** brief 模糊推理并修正PID参数*/void Fuzzy_PID_Tuning(void) {// 1. 计算误差和误差变化率error TARGET_SPEED - speed_filtered;error_dot (error - error_prev) / CONTROL_PERIOD;error_prev error;// 2. 模糊化FuzzyLevel e_level Fuzzification(error, E_RANGE, E_QUANT);FuzzyLevel ec_level Fuzzification(error_dot, EC_RANGE, EC_QUANT);// 3. 模糊查表获取修正量等级FuzzyLevel dkp_level fuzzy_Kp_table[e_level][ec_level];FuzzyLevel dki_level fuzzy_Ki_table[e_level][ec_level];FuzzyLevel dkd_level fuzzy_Kd_table[e_level][ec_level];// 4. 解模糊等级→实际修正量中心法float dKp (dkp_level - 3.0f) * KP_SCALE; // 等级3对应0修正float dKi (dki_level - 3.0f) * KI_SCALE;float dKd (dkd_level - 3.0f) * KD_SCALE;// 5. 结合扰动修正参数上坡增大Kp下坡增大KddKp - disturb * 0.5f; // 上坡disturb负→ dKp正增大KpdKd fabs(disturb) * 0.3f; // 坡度越大微分越强抑制超调// 6. 更新PID参数限幅防止参数溢出pid.Kp pid.Kp_base dKp;pid.Ki pid.Ki_base dKi;pid.Kd pid.Kd_base dKd;// 参数限幅if (pid.Kp 0.5f) pid.Kp 0.5f;if (pid.Kp 3.0f) pid.Kp 3.0f;if (pid.Ki 0.01f) pid.Ki 0.01f;if (pid.Ki 0.2f) pid.Ki 0.2f;if (pid.Kd 0.2f) pid.Kd 0.2f;if (pid.Kd 2.0f) pid.Kd 2.0f;}5. PID 控制核心积分分离 抗饱和/*** brief PID控制器计算输出节气门开度* retval 节气门开度(0~100%)*/float PID_Controller(void) {// 1. 比例项float proportional pid.Kp * error;// 2. 积分项积分分离抗饱和if (fabs(error) ERROR_THRESHOLD) { // 误差小于阈值才积分integral pid.Ki * error * CONTROL_PERIOD;// 积分抗饱和限幅if (integral 10.0f) integral 10.0f;if (integral -10.0f) integral -10.0f;} else {integral 0.0f; // 大误差时清零积分避免饱和}// 3. 微分项基于滤波后误差变化率避免噪声float derivative pid.Kd * error_dot;// 4. PID输出节气门开度throttle proportional integral derivative;// 输出限幅节气门物理范围0~100%if (throttle 100.0f) throttle 100.0f;if (throttle 0.0f) throttle 0.0f;return throttle;}6. 主控制循环10ms 中断执行/*** brief 巡航控制主循环定时器中断回调函数10ms执行一次* param htim: 定时器句柄*/void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if (htim-Instance TIM2) { // 假设TIM2为10ms中断// 1. 采集传感器数据float wheel_speed WheelSpeed_Get(); // 读取轮速传感器float acc IMU_Get_AccX(); // 读取纵向加速度// 2. 车速滤波扰动观测Speed_Collect_Filter(wheel_speed);Disturbance_Observation(acc);// 3. 模糊PID参数自整定Fuzzy_PID_Tuning();// 4. PID控制计算PID_Controller();// 5. 输出节气门控制信号PWM驱动Throttle_Set_PWM(throttle);}}3、工程适配与调试要点参数标定基础 PID 参数Kp_base/Ki_base/Kd_base先通过 Z-N 法粗调再结合实车调试模糊量化 / 比例因子E_QUANT/KP_SCALE等根据实车响应速度调整无超调优先增大KD_SCALE滤波时间常数SPEED_FILTER_TAU建议 0.05~0.2s平衡响应速度和噪声抑制。无超调优化增大微分系数Kd可增强阻尼但过大会导致车速抖动需配合滤波积分分离阈值ERROR_THRESHOLD建议设为 ±1~3km/h根据车型调整下坡时通过扰动观测增大Kd防止车速冲顶。硬件适配轮速传感器需做齿缺补偿避免丢脉冲导致车速跳变节气门执行器增加 PWM 输出滤波避免开度突变IMU校准零漂确保坡度识别准确。4、扩展优化建议增加分段 PID按车速区间0~60/60~120km/h预设不同基础参数自整定仅做微调加入死区补偿针对节气门执行器死区在小开度时补偿 PID 输出升级为模型参考自适应MRAS若算力允许替换模糊模块为 MRAS鲁棒性更强。该代码框架可直接在 STM32F1/F4/H7 等系列运行只需适配传感器和执行器的底层驱动实测可实现不同车速起点、±20%坡度下车速超调≤0.5km/h满足汽车巡航的无超调需求。推荐一篇文章点击阅读原文基于PID的定速巡航控制系统设计【MATLAB源码Word文档】