[PIC®/AVR®/dsPIC®产品] PID控制的中间数问题

[复制链接]
 楼主| 598330983 发表于 2025-4-10 09:01 | 显示全部楼层 |阅读模式
使用PID调节,比如通过ADC采集温度,来控制PWM占空比。
那么是传递设置的温度给PID还是先将温度转换为对应的ADC采集值,再来进行做差比对,这样,PID传入的误差就是一个整数了,就不是小数了。
另外占空比上也可以对寄存器的原始值进行计算。这样就都是整数了,会不会更好呢?
 楼主| 598330983 发表于 2025-4-10 09:05 | 显示全部楼层
在PID温度控制系统中,选择使用整数(ADC原始值)还是浮点数(实际温度值)处理数据需综合考虑精度、资源效率和实现复杂度。以下是分步解决方案:

1. 确定系统需求
精度要求:若温度设定需精确到小数(如50.5℃),建议使用浮点数;若允许整数设定(如50℃),整数处理可能足够。

硬件资源:若微控制器无FPU且资源紧张,优先整数或定点数运算。

2. 数据表示选择
方案A:使用ADC整数值
步骤:

设定点转换:将目标温度转换为对应的ADC整数值(如50℃ → ADC值2048)。

误差计算:误差 = 当前ADC值 - 设定ADC值(整数运算)。

PID计算:使用整数或定点数进行PID运算,避免浮点。

输出映射:将PID输出映射到PWM寄存器范围(如0-1000)。

优点:高效,适合资源有限系统。

缺点:设定点存在量化误差,需确保ADC分辨率足够。

方案B:使用浮点温度值
步骤:

ADC转换:将ADC读数转为实际温度(如ADC值 × 0.0244)。

误差计算:误差 = 当前温度 - 设定温度(浮点)。

PID计算:浮点运算,参数调节直观。

输出映射:浮点结果转为PWM整数值。

优点:精度高,避免量化误差。

缺点:需要浮点支持,资源消耗较大。

3. 定点数折中方案
步骤:

缩放数据:将温度值放大(如×1000)转为整数(50.5℃ → 50500)。

PID运算:所有变量和参数按相同比例缩放,用整数运算。

结果还原:输出时缩小回实际范围(如÷1000)。

优点:平衡精度与效率,避免浮点开销。

 楼主| 598330983 发表于 2025-4-10 09:11 | 显示全部楼层
比如对水加热,低功率加热,升温缓慢,就需要考虑很多内容。
1. 系统热力学建模(理论参考)
基础参数:
水的热容:2kg × 4184 J/(kg·°C) = 8368 J/°C

加热功率:10W(即10J/s)

理论升温速率:10J/s ÷ 8368J/°C ≈ 0.0012°C/s(约14分钟/°C)

实际升温速率:受散热影响会更低(假设散热功率为P_loss,需实测)。

系统特性:
大惯性:水温变化缓慢(积分项主导)。

滞后性:NTC传感器响应延迟需考虑。

非线性:散热速率随温差变化(温差越大,散热越快)。

2. PID参数整定流程
(1) 确定控制目标
温度精度:±0.5°C(典型值)。

超调容忍度:水温允许超调(如医疗应用需严格无超调)。

响应时间:根据需求设定(例如:30分钟内从20°C升至50°C)。

(2) 初始参数估算(齐格勒-尼古拉斯法)
关闭PID积分(I)和微分(D),仅用比例控制(P)。

逐步增大Kp,直到系统出现持续振荡(临界振荡状态)。

假设实验测得临界增益Kc = 8,振荡周期Tc = 300秒。

计算初始参数:

P控制:Kp = 0.5Kc = 4

PI控制:Kp = 0.45Kc = 3.6,Ti = 0.83Tc = 249秒

PID控制:Kp = 0.6Kc = 4.8,Ti = 0.5Tc = 150秒,Td = 0.125Tc = 37.5秒

(3) 经验参数推荐(温度控制典型值)
比例(Kp):1~10(从低值开始,逐步增加)。

积分时间(Ti):100~600秒(大惯性系统需较长积分时间)。

微分时间(Td):5~30秒(滞后严重时可省略D项)。

单片小菜 发表于 2025-4-10 11:06 | 显示全部楼层
PID的精度是由中间数决定的吗?
前功尽弃 发表于 2025-4-10 15:13 | 显示全部楼层
是不是把数值搞成归一化就可以了?
kepe 发表于 2025-4-24 14:43 | 显示全部楼层
这样就都是整数了,会不会更好呢?
flycamelaaa 发表于 2025-7-17 14:47 | 显示全部楼层
推荐直接使用温度值。
flycamelaaa 发表于 2025-7-17 14:47 | 显示全部楼层
谨慎使用ADC值。
powerantone 发表于 2025-7-17 15:48 | 显示全部楼层
优先使用温度值若MCU性能不足,可改用定点数运算替代浮点。
powerantone 发表于 2025-7-17 16:49 | 显示全部楼层
误差整数化可以通过放大倍数选择及抗饱和处理。
stormwind123 发表于 2025-7-17 19:50 | 显示全部楼层
定点数运算结合适当的放大倍数是比较折中的方案。
probedog 发表于 2025-7-17 20:51 | 显示全部楼层
精度优先的话就直接使用温度值和浮点运算。
wahahaheihei 发表于 2025-7-19 18:35 | 显示全部楼层
参数是个问题,不知道有没有一劳永逸的自动调参函数。
夜晚有三年 发表于 2025-7-20 15:26 | 显示全部楼层
PID 控制中 “中间数”(如输出限幅中值)需匹配系统动态范围,通常设为电源电压或 PWM 满值一半,确保正反调节对称,避免静态误差。
mintspring 发表于 2025-7-28 10:25 | 显示全部楼层
如果有一劳永逸的参数就好了
734774645 发表于 2025-7-29 09:54 | 显示全部楼层
PID的参数设定都依赖什么呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

266

主题

5573

帖子

22

粉丝
快速回复 在线客服 返回列表 返回顶部