当前位置: 首页 > news >正文

PID教程:离散PID程序实现思路

目录

1.连续形式PID与离散形式PID公式

连续形式PID:

离散形式PID:

若将T并入K_i 和K_d ,则:

2.连续形式PID离散化示意图(积分和微分)

3.位置式PID与增量式PID公式

位置式PID(就是离散形式PID公式):

位置式PID,当k=k−1时:

两式相减(位置式PID公式,代入K减代入k-1),得到增量式PID:

4.位置式PID与增量式PID比较

5.PID程序实现定时方案

第一种方法,使用Delay延时实现调控周期T

优点:

弊端:

第二种方法,定时器定时中断方法

优点:

弊端:

第三种方法,定时器定时中断方法增强版

优点:

弊端:

6.位置式PID程序实现

7.增量式PID程序实现(控制器内积分,输出全量)


1.连续形式PID与离散形式PID公式

连续形式PID:

这种PID形式在单片机上不好实现,需要用模拟电路实现

离散形式PID:

单片机使用,离散后,单片机需要设定一个调空周期T,单片机每隔T时间,才会进行一次PID计算和调控

K取1,2……n,表示第几次调控,error(K)第几次调控时当前的误差值;T是离散后的调控周期,也就是系统每隔T时间,调控一次;大Σ符号,表示求和,error(j)每一次的误差,j从0到K,意思就是把第K次调控之前所有的error累加起来;error(k)是本次误差,error(k-1)表示的是上一次误差

若将T并入K_i 和K_d ,则:


2.连续形式PID离散化示意图(积分和微分)


3.位置式PID与增量式PID公式

位置式PID(就是离散形式PID公式):

位置式PID,当k=k−1时:

两式相减(位置式PID公式,代入K减代入k-1),得到增量式PID:

如果把增量式PID看成一个模块,那么给这个模块输入本次、上次、上上次的error,模块直接就能给出PID输出值的增量,且模块内,不需要有任何记忆或累加单元

结论:增量式PID输出的结果△out,只是本次、上次、上上次这3次error的线性组合


4.位置式PID与增量式PID比较

位置式PID由连续形式PID直接离散得到,每次计算得到的是全量的输出值,可以直接给被控对象

位置式PID适合大部分场景,只要需要用单片机实现PID,那么优先考虑位置式PID,速度控制、温度控制、位置控制、姿态控制等等,位置式PID都可以完成

增量式PID由位置式PID推导得到,每次计算得到的是输出值的增量,这个增量一般不能直接给被控对象,如果直接给被控对象,则需要被控对象内部有积分功能

比如,阀门控制;位置式PID说,阀门状态30%、阀门状态50%、阀门状态40%等等,位置式PID,每次告诉完整的阀门状态;而增量式PID说,阀门加大5%、阀门加大8%、阀门状态减小2%等等,增量式PID,每次告诉阀门状态改变的大小,这个改变值,是基于上一次的阀门状态进行的,因此,如果被控对象不能记住上一次的状态,或者不能实现在上次状态的基础上加减调节的功能,那么这个被控对象就不能直接接收输出值的增量

增量式PID也可在控制器内进行积分,然后输出积分后的结果,此时增量式PID与位置式PID整体功能没有区别

位置式PID和增量式PID计算时产生的中间变量不同,如果对这些变量加以调节,可以实现不同的特性

比如,位置式PID的中间变量是误差积分,可以单独进行积分限幅,防止积分饱和,内部积分的增量式PID,没法单独对积分环节限幅,换一种说法,就是内部积分的增量式PID,只需要对输出值限幅,就可以同时实现积分限幅和输出限幅两个功能,而位置式PID,输出限幅和积分限幅得分开进行

另外位置式PID每次计算得到的是全量输出值,如果信号有噪声干扰,不同输出值可能会相差很大,这会导致执行机构大幅度变化,而增量式PID,或者内部积分的增量式PID,都可以单独对输出值增量进行限幅,防止执行机构大幅度变化


5.PID程序实现定时方案

确定一个调控周期T,每隔时间T,程序执行一次PID调控,一般在20ms、10ms、5ms、1ms就要进行一次调控,比如电机周期是20ms~100ms

第一种方法,使用Delay延时实现调控周期T

优点:

简单

弊端:

不准确,上面的代码加Delay时间,会比设定的T,长,还会阻塞代码的执行

第二种方法,定时器定时中断方法

优点:

定时准确,不会阻塞代码运行

弊端:

就是在中断里执行PID调控的时候,一定要注意,其中涉及硬件操作的函数,不能既在中断里调用,又在主函数中调用,因为,中断函数和主程序,相当于多线程,多线程操作同一个硬件,会导致资源访问冲突

比如,在主循环里读取了传感器,然后中断函数执行PID调控的时候,也读取了这个传感器,那么在执行主循环里读取传感器函数的时候,有可能产生中断,在中断函数里又读取了这个传感器,这就导致了冲突

因此,这个方法一定要注意资源访问冲突的问题

第三种方法,定时器定时中断方法增强版

第三种方法,和第二种方法一样都是定时器中断,但是,定时中断函数进来后,不直接在中断函数中执行PID调控,而是定义一个标志位flag,定时时间到了,flag置1,之后,中断函数退出,在主循环里不断检查,如果flag置1,说明定时时间到,然后,在清零flag,再执行PID调控

优点:

所以涉及硬件的操作,在主程序中进行,不会产生资源访问冲突,中断定时使用一个标志位来传递信号即可

弊端:

如果,主程序执行其他代码过多,或者主程序阻塞,那么PID调控代码,可能无法及时执行,这会导致调控周期T不准确,因此,这种方法一定保证主程序不阻塞


6.位置式PID程序实现


7.增量式PID程序实现(控制器内积分,输出全量)

增量式PID代码这里是处理好了,然后,将全量输出给被控对象

如果想输入一个DeltaOut给被控对象,那么定义变量可以将Out变为DeltaOut,然后,PID计算直接DeltaOut等于公式,直接传给被控对象,但是,需要注意被控对象需要有能接收并处理增量的功能

http://www.cnnetsun.cn/news/685177.html

相关文章:

  • python青年民宿酒店旅舍服务系统
  • 基于大数据的共享单车用户行为分析系统设计与实现
  • Questions for the Technical Advisory Board - 2
  • SKF轴承动力学仿真信号分析代码功能说明
  • VisionMaster之上下相机对位贴合
  • 【气动学】基于短程攻击导弹的最短时间约束并解决策梅洛问题附Matlab代码和报告
  • 散热效率提升80%!3D VC如何解决AI算力“发热危机”?
  • leetcode 883. Projection Area of 3D Shapes 三维形体投影面积-耗时100
  • 谁是 2026 微振动控制领域领军者?三大企业对比为何恒帆实力领跑
  • 基于SpringBoot的社区防疫物资申报系统毕业设计源码
  • 人工智能之数学基础:概率学中的总体分布
  • 即插即用系列 | AAAI 2026 LWGANet:一种解决遥感图像小目标“空间注意力与通道注意力双重冗余”的轻量级模块
  • AI写论文新选择,4款AI论文生成工具为你的毕业论文保驾护航!
  • AI写论文新选择!4个AI论文生成工具,高质量论文轻松搞定!
  • AI写论文福音!揭秘4款AI论文生成神器,搞定各类论文写作难题!
  • 医院HIS系统集成百度编辑器时如何解决Word图片粘贴问题?
  • 基于SpringBoot的社区帮扶对象管理系统
  • 教育行业站群程序如何配置百度UE的图文混排功能?
  • django+vue3协同过滤算法的基于python影视推荐系统
  • 车辆动力学十年演进
  • 地图引擎十年演进
  • AUTOSAR十年演进
  • 数据闭环十年演进
  • 影子模式十年演进
  • Python+django+vue3电力设备维修工单管理系统设计与实现
  • 文件的应用命令
  • 软件测试报告万字文档,潮流鞋店管理系统软件测试报告万字文档,潮流鞋店管理系统(web)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 计算机毕业设计 java 前后端分离在线云盘系统 Java 在线云盘文件管理平台 基于 SpringBoot 的前后端分离资源存储与分享系统
  • Python+django+vue3科技文献推荐系统
  • 亲测好用9个AI论文平台,助本科生轻松搞定毕业论文!