潮州网站开发,下载app安装,网站怎么做脚注,wordpress主题文章列表的算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节#xff08;Proportion#xff09;■ PID 积分环节#xff08;Integral#xff09;■ PID 微分环节#xff08;Differential#xff09; ■ 位置式PID#xff0c;增量式PID介绍■ 位置式 PID 公式■ 增量式 PI… 算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节Proportion■ PID 积分环节Integral■ PID 微分环节Differential ■ 位置式PID增量式PID介绍■ 位置式 PID 公式■ 增量式 PID 公式■ 积分饱和问题■ PID 算法代码实现■ 控制量相关的结构体■ 位置式 PID 代码■ 增量式 PID 代码 ■ PID 参数整定■ 采样周期选择■ PID 参数整定方法■ 理论计算整定法■ 工程整定法■ 工程整定法-试凑法■ 工程整定法-临界比例法■ 工程整定法-一般调节法 ■ PID 各个系数调节的效果■ 实际调参演示 ■ 正点原子 PID 上位机ATK_PID.exe介绍■ 上位机通信协议■ ATK_PID.exe使用方法 ■ PID
PID 分别是 Proportion比例、 Integral积分、Differential微分 的首字母缩写。 它是一种结合比例、积分和微分三个环节于一体的闭环控制算法。
■ 闭环原理 ■ PID 控制流程 ■ PID 比例环节Proportion 举例大棚温控实例来理解这个公式 大棚温控需要调节棚内温度为 30℃而实际温度为 10℃此时的偏差 e20当 e 确定时 Kp 越大则输出u 越大。 图 8.2.1.1 中 当 Kp 的值越大时橙色曲线达到目标值的时间就越短橙色曲线出现了一定幅度的超调和振荡这会使得系统的稳定性下降
然而在实际的应用中如果仅有比例环节的控制可能会给系统带来一个问题 静态误差。 静态误差是指系统控制过程趋于稳定时目标值与实测值之间的偏差。 假设我们现在需要调节棚内温度为 30℃而实际温度为 25℃此时偏差 e5 Kp 为固定值如果此时的输出可以让大棚在半个小时之内升温 5℃而外部的温差可以让大棚在半个小时之内降温 5℃也就是说输出 u 的作用刚好被外部影响抵消了这就使得偏差会一直存在。
■ PID 积分环节Integral
为了消除静态误差我们引入了积分环节。 积分环节可以对偏差 e 进行积分只要存在偏差积分环节就会不断起作用主要用于消除静态误差提高系统的无差度。 假设 现在温控系统的比例环节作用被抵消 存在静态误差 5℃此时偏差存在积分环节会一直累计偏差以此增大输出从而消除静态误差。从上述公式中可以得知当积分系数 Ki 或者累计偏差越大时输出就越大系统消除静态误差的时间就越短 当 Ki 的值越大时其对应的橙色曲线达到目标值的时间就越短与此同时橙色曲线出现了一定幅度的超调和振荡这会使得系统的稳定性下降。因此 我们在设置积分系数的时候并不是越大越好而是要兼顾消除静态误差的时间以及整个系统的稳定性。
我们前面有说过只要系统还存在偏差积分环节就会不断地累计偏差。当系统偏差为 0的时候说明已经达到目标值此时的累计偏差不再变化但是积分环节依旧在发挥作用此时往往作用最大这就很容易产生超调的现象了。因此我们需要引入微分环节提前减弱输出抑制超调的发生。
■ PID 微分环节Differential
微分环节可以反应偏差量的变化趋势根据偏差的变化量提前作出相应控制减小超调克服振荡。 引入微分环节后比例积分微分环节的公式如下 假设温控系统目标温度为 30℃
时间当前温度偏差八点15℃15℃九点25℃5℃
偏差的变化量 九点的偏差第 k 次 -八点的偏差第 k-1 次 5℃ - 15℃ -10 结合上述公式可知此时微分环节会削弱比例和积分环节的作用减小输出以抑制超调。
■ 位置式PID增量式PID介绍
增量式 PID 公式输出的只是控制量的增量。 假设 电机实际转速为 50RPM现在我们要让它加速到 60RPM 位置式 PID系统将直接输出 60RPM 对应的控制量占空比 增量式 PID系统将输出提速 10RPM对应的控制量占空比此时我们还需要加上上次50RPM的输出。
对比项位置式增量式输出全量输出仅输出增量偏差需要一直累计偏差只考虑最近 3 次偏差积分作用有无限幅需要进行输出和积分限幅只需要进行输出限幅
PID优点缺点位置式位置式 PID 是一种非递推式算法带有积分作用适用于不带积分部件的对象。全量计算计算错误影响很大需要对偏差进行累加运算量大增量式只输出增量计算错误影响小不需要累计偏差运算量少实时性相对较好。积分截断效应大有稳态误差。
■ 位置式 PID 公式 ■ 增量式 PID 公式 ■ 积分饱和问题
在位置式 PID 中如果系统长时间无法达到目标值累计偏差积分就会变得很大此时系统的响应就很慢了。 假设某个电机能达到的最大速度为 300RPM而我们设置了目标速度为 350RPM这明显是一个不合理的目标值 由于系统长时间无法达到目标值累计偏差积分会变得越来越大逐渐 达到深度饱和的状态此时我们再设置一个合理范围的目标速度例如 200RPM系统就没 有办法在短时间内响应了。 为了避免位置式 PID 中可能出现的积分饱和问题可采取以下措施 ① 优化 PID 曲线系统越快达到目标值累计的偏差就越小 ② 限制目标值调节范围规避可以预见的偏差 ③ 进行积分限幅在调整好 PID 系数之后根据实际系统来选择限幅范围。
■ PID 算法代码实现
■ 控制量相关的结构体
typedef struct
{__IO float SetPoint; /* 目标值 */__IO float ActualValue; /* 期望输出值 */__IO float SumError; /* 偏差累计 */__IO float Proportion; /* 比例系数 P */__IO float Integral; /* 积分系数 I */__IO float Derivative; /* 微分系数 D */__IO float Error; /* Error[1],第 k 次偏差 */__IO float LastError; /* Error[-1],第 k-1 次偏差 */__IO float PrevError; /* Error[-2],第 k-2 次偏差 */
} PID_TypeDef;■ 位置式 PID 代码
/*
* brief pid 闭环控制
* param *PID PID 结构体变量地址
* param Feedback_value当前实际值
* retval 期望输出值
*/
int32_t increment_pid_ctrl(PID_TypeDef *PID,float Feedback_value)
{PID-Error (float)(PID-SetPoint - Feedback_value); /* 计算偏差 */PID-SumError PID-Error; /* 累计偏差 */PID-ActualValue (PID-Proportion * PID-Error) /* 比例环节 */ (PID-Integral * PID-SumError) /* 积分环节 */ (PID-Derivative * (PID-Error - PID-LastError)); /* 微分环节 */PID-LastError PID-Error; /* 存储偏差用于下次计算 */return ((int32_t)(PID-ActualValue)); /* 返回计算后输出的数值 */
}■ 增量式 PID 代码
/*
* brief pid 闭环控制
* param *PIDPID 结构体变量地址
* param Feedback_value当前实际值
* retval 期望输出值
*/
int32_t increment_pid_ctrl(PID_TypeDef *PID,float Feedback_value)
{PID-Error (float)(PID-SetPoint - Feedback_value); /* 计算偏差 */PID-ActualValue /* 比例环节 */(PID-Proportion * (PID-Error - PID-LastError))/* 积分环节 */ (PID-Integral * PID-Error)/* 微分环节 */ (PID-Derivative * (PID-Error - 2 * PID-LastError PID-PrevError));PID-PrevError PID-LastError; /* 存储偏差用于下次计算 */PID-LastError PID-Error;return ((int32_t)(PID-ActualValue)); /* 返回计算后输出的数值 */
}
■ PID 参数整定
每一个系统的 PID系数并不是通用的在不同的系统中运用同样的 PID 系数其最终所体现的效果可能是相差甚远的。PID 的参数整定调参。
■ 采样周期选择
采样周期指的是 PID 控制中实际值的采样时间间隔.我们可以使用理论或者经验方法来确定采样周期
属性描述理论方法香农采样定理。这个定理可以用来确定采样周期可选择的最大值当采样周期超出了这个最大的允许范围我们所得到的信号就会失真也就无法较好地还原信号了。经验方法根据控制对象突变能力选择。假设电机当前转速为 20RPM我们需要提高它的转速到 30RPM此电机的转速在 1s 之内最大可以突变 10RPM即电机速度的突变能力如果我们每 1ms 采集一次电机转速那么每一次采集到的速度变化量最大为 10RPM / 1000 0.01RPM很明显此时最大的变化量远远小于当前的速度这对于我们的 PID 控制效果并没有明显的提升但是却占用了很多的硬件资源因此我们需要根据控制对象的突变能力来选择采样周期。
■ PID 参数整定方法
■ 理论计算整定法
依据系统的数学模型经过理论计算确定 PID 参数。 这种方法是建立在理想化条件下的其得到的参数不一定能够直接使用 还需要结合经验以及实际的系统进行调整。
■ 工程整定法
试凑法 ,临界比例法 , 一般调节法
■ 工程整定法-试凑法
1内容 结合系统的具体情况以及经验先试凑几组合理的 PID 系数同时需要观察系 统的曲线变化确定每一个系数对于整个系统曲线的大致影响然后再根据具体的曲线进行 调整。
2调节思路 ① 先是比例P再积分I最后是微分D ② 按纯比例系统整定比例系数使其得到比较理想的调节过程曲线然后再把比例系数缩小 1.2 倍左右将积分系数从小到大改变使其得到较好的调节过程曲线 ③ 在这个积分系数下重新改变比例系数再看调节过程曲线有无改善 ④ 如有改善可将原整定的比例系数减少改变积分系数这样多次的反复就可得到合适的比例系数和积分系数 ⑤ 如果存在外界的干扰 系统的稳定性不好 可把比例、积分系数适当减小 使系统足够稳定 ⑥ 如果系统存在小幅度超调 可以将整定好的比例系数和积分系数适当减小 增大微分系数以得到超调量最小、调节作用时间最短的系统曲线
■ 工程整定法-临界比例法
1内容 在闭环的控制系统里将调节器置于纯比例作用下从小到大逐渐调节比例系 数 直到系统曲线出现等幅振荡再根据经验公式计算参数。
2调节思路 ① 将积分、 微分系数置零比例度取适当值平衡操作一段时间 使控制系统按纯比例作用的方式投入运行。 ② 慢慢地增大比例系数细心观察曲线的变化情况。如果控制过程的曲线波动是衰减的则把比例系数继续增大如果曲线波动是发散的则应把比例系数减小直至曲线波动呈等幅振荡 此时记下临界比例系数 δK 和临界振荡周期 Tk 的值。 ③ 根据记下的比例系数和周期采用经验公式计算调节器的参数。
■ 工程整定法-一般调节法
1内容这种方法针对一般的 PID 控制系统所以称之为一般调节法。 2调节思路 ① 首先将积分、微分系数置零 使系统为纯比例控制。 控制对象的值设定为系统允许的最大值的 60%~70% 接着逐渐增大比例系数直至系统出现振荡此时再逐渐减小比例系数 直至系统振荡消失 然后记录此时的比例系数 并设定系统的比例系数为当前值的 60%~70%。 ② 确定比例系数后设定一个较小的积分系数然后逐渐增大积分系数直至系统出现振荡此时在逐渐减小积分系数 直至系统振荡消失然后记录此时的积分系数并设定系统的积分系数为当前值的 55%~65%。 ③ 微分系数一般不用设定为 0 即可。若系统出现小幅度振荡 并且通过 PI 环节无法优化这可以采用与确定比例、积分系数相同的方法 微分系数取系统不振荡时的 30%左右。 ④ 系统空载、带载联调再对 PID 参数进行微调直至满足要求。
■ PID 各个系数调节的效果
PID 各个系数调节的效果描述比例系数调节作用快系统一出现偏差调节器立即将偏差放大输出。积分系数积分系数的调节会改变输入偏差对于系统输出的影响程度。积分系数越大消除静差的时间越短但是过大的积分系数则会导致系统出现超调现象这在具有惯性的系统中尤为明显。微分系数微分系数的调节是偏差变化量对于系统输出的影响程度。微分系数越大系统对于偏差量的变化越敏感越能提前响应进而抑制超调但是过大的微分系数则会让整个系统出现振荡。
■ 实际调参演示
① 先调整比例系数积分、 微分系数设置为 0此时的系统只有比例环节参与控制。 首先确定硬件上是否出现了故障例如电压不稳定、电机堵转等排除了这些之后那就说明比例系数调节的过大了这个时候我们可以把比例系数慢慢地减小并同时观察曲线的变化。 ② 当我们调小**比例系数之后曲线的大幅度振荡现象消失**但是曲线依旧存在小幅度的超调现象并且此时通过调节比例系数已经无法优化曲线如图 9.2.4.2 所示 此时我们可以慢慢地增大微分系数并同时观察曲线的变化从而找到最合适的参数。 增大微分系数之后如果系统的曲线已经较为理想则说明这个系统只需要比例和微分环节的控制。 ③ 如果在纯比例环节的控制下系统的实际值始终达不到目标值存在静态误差如图9.2.4.3 所示 此时我们可以逐渐增大积分系数 并同时观察曲线的变化如果消除静差的时间过长则可以再适当增大积分系数但是需要注意兼顾系统的超调量。经过调整之后如果系统的曲线已经较为理想则说明这个系统只需要比例和积分环节的控制。
④ 如果系统在比例和积分环节的控制下出现小幅度的超调现象 此时我们可以慢慢地增大微分系数并同时观察曲线的变化从而找到最合适的参数。以上就是在实际调参中经常遇到的一些问题以及解决方法。然而在实际应用中控制系统是多样且复杂的上述方法只能作为参考并不是通用的因此在 PID 调参过程中大家一定要注意经验的积累。
■ 正点原子 PID 上位机ATK_PID.exe介绍
为了方便大家调试 PID 参数以及控制电机 我们开发了 PID 调试助手上位机其采用串 口通信 支持多种波特率 具有以下功能 ① 16 路波形实时显示设备状态以及故障显示。 ② 总里程、设备位置、电机类型显示。 ③ 支持 10 组 PID 参数调节可以自定义参数调节范围。 ③ 支持多种电机控制指令。 大家可以打开 PID 调试助手来查看它的界面软件的路径 A 盘→6软件资料→1软件→6 PID 调试助手→ATK_PID.exe。
■ 上位机通信协议
上位机和下位机开发板之间使用整帧传输的方式进行通信 数据帧采用 CRC16 的校验方式 下面我们简单介绍一下数据帧的格式
① 帧头 一包数据的头部 固定为 0xC5长度为 1 个字节。 ② 数据类别 数据的属性例如电机速度温度等长度为 1 个字节。 ③ 数据域 某个数据类别的值长度为 0~32 个字节。 ④ 校验和 采用 CRC16-MODBUS 校验校验范围包括帧头、数据类别和数据域长度为 2 个字节。 ④ 帧尾一包数据的尾部固定为 0x5C长度为 1 个字节。具体的协议内容可查阅《PID 调试助手通信协议.pdf》这个文档路径 A 盘→6软件资料→1软件→6 PID 调试助手→《PID 调试助手通信协议.pdf》。
■ ATK_PID.exe使用方法
① 双击 ATK_PID.exe 即可打开上位机. ② 在设备连接处选择下位机对应的 COM 口、波特率点击“打开”按钮如果没有显示 COM 口可以尝试点击蓝色的刷新图标进行刷新 ③ 按需选择波形显示通道和缩放方式点击“开始”即可显示波形 ④ 观察设备的状态及故障指示 ⑤ 右侧界面可设置、获取参数下发控制指令及显示系统数据 ⑥ 上图 9.3.2.5 中点击右侧的“参数调整”按钮即可进入 PID 系数及多种参数设置的界面 进入到图 9.3.2.6 这个界面之后我们可以在区域①选择所需的 PID 参数组别1~10以及设置相应的 PID 系数。 PID 系数可以在输入框手动输入或者拉动横条来选择所需数值数值确定完后点击“设置 PID”按钮即可设置 PID 系数如果选择了自动发送指令当我们拉动完横条之后上位机就会自动设置对应的参数其他的参数设置方法同理。 注意参数的设置是有默认范围的如果上位机默认的范围不适用可以点击上图区域 ③的“参数范围设置”按钮 即可改变参数设置范围如图 9.3.2.7 所示 关于 PID 上位机调试助手的简单使用就介绍到这里其他的功能大家可以亲自去上手体验这只是一个非常简单的工具。