STM32 PID控制

一、PID简介

开环控制与闭环控制: 

开环:写出了代码,并且执行完之后,对它就不管不顾,对它当前的状态也不了解。

闭环:输出东西给目标,同时获取它的反馈,控制器直到被控对象的执行状态,可以根据反馈修改输出值。

 二、PID公式

误差:目标值—实际值

PID输出值(最后一个):Ki是Kp除以Ti,Kd是Kp乘Td。

out(t)这三项分别叫做:P比例、I积分、D微分。Kp、Ki、Kd是每项的权重。三个K是在程序中直接给的,是PID调节参数重要调节的值。

假设你在驾驶汽车: 

  • Kp:方向盘灵敏度(误差大时快速转向)
  • Ki:持续偏离车道时逐渐加大转向力度
  • Kd:预判弯道趋势,提前调整方向盘

参数调整口诀

  • Kp 调响应:先增大 Kp 至系统出现轻微振荡
  • Ki 消余差:加入较小 Ki 消除稳态误差
  • Kd 减震荡:微调 Kd 抑制超调,提高稳定性

离散形式PID:

 上式也称为位置式PID

同样的也有增量式PID:

区别: 位置式PID是直接将需要的值给被控对象

            增量式PID是得到输出值的增量或减量,需要被控对象内部有积分功能才能得到输出值。

三、位置式PID程序实现 

 四、增量式PID程序实现

(本代码是直接输出的全量,可以直接赋值给被控对象),和上面的位置式实现功能一样。

### STM32中的PID控制实现 #### 工具准备 为了在STM32上实现PID控制,需要先准备好必要的开发工具。这些工具包括但不限于以下几种[^1]: - **STM32CubeMX**: 用于配置STM32的外设并生成初始化代码。 - **Keil MDK 或 STM32CubeIDE**: 编写和调试固件代码。 #### PID控制器基础理论 PID控制器是一种闭环控制系统的核心算法之一,它通过比例(P)、积分(I)和微分(D)三个部分来调整系统的输出,从而达到期望的目标值。其核心公式如下[^3]: \[ u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau)d\tau + K_d \frac{de(t)}{dt} \] 其中 \(u(t)\) 是控制器的输出信号,\(e(t)\) 表示误差(目标值减去实际测量值),而 \(K_p\)、\(K_i\) 和 \(K_d\) 则分别是比例增益、积分时间和微分时间参数。 #### 实现步骤概述 以下是基于STM32平台实现PID控制的主要过程: 1. 配置定时器中断以固定频率采集输入数据; 2. 初始化PWM模块以便于调节输出功率; 3. 设计一个函数计算当前周期内的PID输出值; 4. 将该输出映射到硬件设备的具体操作范围之内; 下面给出一段简单的C语言伪代码作为参考[^2]: ```c // 定义全局变量 float kp, ki, kd; // PID 参数 float error_sum = 0; float last_error = 0; void PID_Init(float p, float i, float d){ kp = p; ki = i; kd = d; } float Calculate_PID(float setpoint, float pv){ static float output; float error = setpoint - pv; error_sum += error; output = (kp * error) + (ki * error_sum) + (kd * ((error - last_error))); last_error = error; return output; } ``` 此代码片段展示了如何定义以及调用`Calculate_PID()`来进行单次迭代运算的过程。需要注意的是,在真实项目里还需要考虑边界条件处理等问题。 #### 应用场景举例——直流电机速度控制 假设我们正在构建一套能够精确维持转速不变的小型风扇驱动系统,则可以利用上述提到的方法完成整个流程的设计与实施工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值