打印
[PIC®/AVR®/dsPIC®产品]

PID控制的中间数问题

[复制链接]
241|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的精度是由中间数决定的吗?

使用特权

评论回复
5
前功尽弃| | 2025-4-10 15:13 | 只看该作者
是不是把数值搞成归一化就可以了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

258

主题

5521

帖子

22

粉丝