# PID_PROJECT **Repository Path**: fen_kai/pid_ ## Basic Information - **Project Name**: PID_PROJECT - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-11 - **Last Updated**: 2026-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 第二部分 PID算法改进 ### ![image-20260311210706614](D:\admin\学习文件\PID\pid_\assets\image-20260311210706614.png)2.1积分饱和现象 ![image-20260311212906828](D:\admin\学习文件\PID\pid_\assets\image-20260311212906828.png) 如果电机断电或者其他原因停止,积分会持续加到调控,但是实际是电机断电了,但是积分项并没有停止还在持续加到,当单机来电后会突然保持在最大速度,直到积分退出饱和 #### 2.1.1积分限幅实现思路 ![image-20260311213120677](D:\admin\学习文件\PID\pid_\assets\image-20260311213120677.png) ## 2.2积分分离 ![image-20260311214505589](D:\admin\学习文件\PID\pid_\assets\image-20260311214505589.png) ![image-20260311214841288](D:\admin\学习文件\PID\pid_\assets\image-20260311214841288.png) ![image-20260311215258743](D:\admin\学习文件\PID\pid_\assets\image-20260311215258743.png) ![image-20260311221611706](D:\admin\学习文件\PID\pid_\assets\image-20260311221611706.png) ``` 将Kp设置0.4,Kd设置0.1,Ki不设置 从波形中看到始终无法完全重合,且控制力不是很强 如果加上Ki的值就会导致非常严重的超调 原因是定位置控制在输出时,由于前期积分项累积了较大的力,但是定位位后位置不在变化,前面的积分项还存在,就必定导致超调 解决方式就是积分分离 ``` ## 2.3变速积分 ![image-20260311222504959](D:\admin\学习文件\PID\pid_\assets\image-20260311222504959.png) ![image-20260311223144025](D:\admin\学习文件\PID\pid_\assets\image-20260311223144025.png) ## 2.4微分先行 ![image-20260312205553094](D:\admin\学习文件\PID\pid_\assets\image-20260312205553094.png) ![image-20260312205617505](D:\admin\学习文件\PID\pid_\assets\image-20260312205617505.png) ![image-20260312205903063](D:\admin\学习文件\PID\pid_\assets\image-20260312205903063.png) ## 2.5不完全微分 ![image-20260312212719685](D:\admin\学习文件\PID\pid_\assets\image-20260312212719685.png) ![image-20260312212925140](D:\admin\学习文件\PID\pid_\assets\image-20260312212925140.png) ## 2.6输出偏移 ![image-20260312215354504](D:\admin\学习文件\PID\pid_\assets\image-20260312215354504.png) ![image-20260312220201399](D:\admin\学习文件\PID\pid_\assets\image-20260312220201399.png) ``` 1.执行器启动,需要一定力度,但是输出值较小时这个力不足以驱动电机 解决:给输出值加一个偏移,直接跳过这个输出较小的片段 2.加入偏移后,电机处于频繁的抖动,这是正常的,解决八法就是输入死区 ``` ## 2.7输入死区 ![image-20260312221500402](D:\admin\学习文件\PID\pid_\assets\image-20260312221500402.png) ![image-20260312221551549](D:\admin\学习文件\PID\pid_\assets\image-20260312221551549.png) ## 3.多环串级PID(2个PID) ![image-20260313204136490](./assets/image-20260313204136490.png) ![image-20260313204603341](./assets/image-20260313204603341.png) ``` 速度环一般使用PI控制 位置环一般使用PD控制 实现也是先内环,然后外环,调试时也是先内环再外环 ``` ### 3.1程序实现 ![image-20260313205837822](./assets/image-20260313205837822.png) ![image-20260313205934799](./assets/image-20260313205934799.png) ![image-20260313211152559](./assets/image-20260313211152559.png) ``` 外环调控周期大于等于内环调控周期 使用结构体分装变量 使用函数封装代码逻辑 双环PID调参方法 1.主要是确定内外PID的值,同时去调节内环和外环是不可行的(相互干扰),因为内环是独立工作,所系先调节内环参数,内环调节好后再在内环基础上调节外环参数 1.1速度环调试方法,先调Kp,逐渐加大Kp直到实际值(Act)出现超调抖动,然后适当减小Kp,让抖动消失。此时实际值和目标值存在稳态误差,定速控制中存在稳态误差直接加Ki消除稳态误差。当稳态误差消除后,调节目标值可以看到稳态误差消除的比较慢,因此继续加大Ki,直到稳态误差消除较快,抖动较小 ``` ### 3.1.1全局变量赋值 ​ 速度环PID参数确定后直接赋值 ```c float InnerKp = 0.36 ,InnerKi = 0.28, InnerKd = 0; ``` ​ 开始定位置调试 ![image-20260313221112967](./assets/image-20260313221112967.png) ![image-20260313221501867](./assets/image-20260313221501867.png) ``` 位置环一般用PD控制 1.增加P项,看到位置增加较为缓慢,加大P项,会产生超调现象(可以通过D控制),继续加大P相会产生更大超调和抖动,然后适当减小P,可以通过D控制,不能随便加入I项,否则会引起更大的震动(所以定位置控制I相一般给0)原因是本身没有稳态误差就不需要加I相。 2.开始调节D相,可以看到超调被抑制了一些,持续加到D,直到没有出现超调,但是D相是系统阻尼,如果一直加大会造成系统阻尼过大可能出现抖动和接近目标时出现停顿。 如果出现抖动但是能很快接近目标,或者很平滑,但是速度较慢,这都是没办法的只能做出取舍 实测得到(p = 0.3、i = 0、d = 0.4) ``` ### 3.1.2 按键控制 ​ 在6个参数确定后,观察得到最终的输出值和误差值几乎为0. ​ 代码分装总共有两步 ​ 1.使用结构体分装变量 ​ 2.函数分装PID ## 4.倒立摆控制 ![image-20260314222826677](./assets/image-20260314222826677.png) ``` 1.角度控制使用PD控制 2.移植AD读取角度传感器代码 ``` ## 5.自动起摆流程 ![image-20260316215553824](./assets/image-20260316215553824.png)