什么东西可以代替阴茎| 羊白是什么| 塌方是什么意思| 耳鸣是什么引起的| 属虎的五行属什么| 紫苏是什么| 12583是什么电话| 甲功是什么| 激素六项是查什么的| 骨折吃什么好的快| 乳房有溢液是什么原因| 下午1点是什么时辰| 海参不能和什么一起吃| 甘草有什么作用| 甲亢和甲状腺有什么区别| 为什么呀| 婴儿哭久了有什么危害| 天蝎座是什么象| 下午7点是什么时辰| 低聚木糖是什么| 腱鞘炎在什么位置| 胰腺炎什么症状| 眩晕症是什么症状| 男人结扎有什么危害| 一吃东西就牙疼是什么原因引起的| 八大碗都有什么菜| 什么菜好消化又养胃| 失眠吃什么食物效果最好| 剖腹产可以吃什么| 肠炎不能吃什么东西| 肺火旺吃什么药最有效| 事业有成是什么意思| a型血和b型血生的孩子是什么血型| 沙门是什么意思| 门诊号是什么意思| 挑染什么颜色好看| 宫颈糜烂有什么症状和现象| 通草长什么样图片| 少年班是什么意思| 解酒喝什么好| mg是什么意思| 静脉注射是什么意思| 虾仁炒什么| 水命中什么水命最好| 心脏造影是什么| 鼻中隔偏曲是什么意思| 虾仁配什么蔬菜包饺子| 中午12点到1点是什么时辰| 男孩学什么专业好| 代入感是什么意思| 徐州有什么好吃的美食| 喉咙发炎咳嗽吃什么药好得快| 薏米有什么作用| 虾吃什么| 惶恐是什么意思| 眼睛有重影是什么原因| 钙是什么| 生育登记有什么用| 吉和页念什么| 维生素d3什么牌子好| 花苞裤不适合什么人穿| 为什么会得淋巴肿瘤| 人体的三道防线是什么| 什么是同性恋| 闭合性骨折是什么意思| 巨蟹男和什么星座最配| 颈静脉怒张见于什么病| 老人脚肿吃什么药消肿| 一级军士长是什么级别| 白癜风不能吃什么| 什么颜色加什么颜色等于绿色| 眉毛上的痣代表什么| 巨细胞病毒igm阳性是什么意思| 乙肝病毒表面抗体高是什么意思| 夜间尿多是什么原因| 到底是什么意思| 射手座有什么特点| 双是什么意思| 吃苹果是什么意思| 尿酸为什么会高| 湿气重的人喝四物汤会有什么| 疤痕增生是什么| 三尖瓣少量反流是什么意思| 衰竭是什么意思| 一代宗师是什么意思| 不够时间好好来爱你是什么歌| 降钙素原检测是查什么的| 肠胃消化不好吃什么食物| 扭曲是什么意思| 发光免疫是检查什么的| 防晒霜什么牌子好| 四离日是什么意思| 身上发热是什么原因| 祖庭是什么意思| 梦见掉牙齿是什么征兆| 柴火饭是什么意思| ltp是什么意思| 深圳市市长是什么级别| 水牛吃什么| 入职体检挂什么科| 病理切片是什么意思| 疝囊是什么| 什么情况下需做肠镜| 2月15日是什么星座| borel手表是什么牌子| 地包天什么意思| 老年人脚肿什么原因| 腰肌劳损吃什么药| 银屑病为什么会自愈| 薄荷有什么功效| 上午九点半是什么时辰| 什么可以| 看望病人买什么东西好| 世界上最大的湖是什么湖| 内裤发霉是什么原因| 高烧后拉稀说明什么| 查甲状腺应该挂什么科| 2028是什么年| 阑尾炎可以吃什么水果| 衬衫配什么裤子好看| 剁椒鱼头是什么鱼头| 晚上睡觉脚抽筋是什么原因| onemore是什么牌子| 小日子是什么意思| 六月份出生的是什么星座| editor是什么意思| 鳞状上皮乳头状瘤是什么| 委曲求全是什么生肖| 遨游是什么意思| 1961年属什么生肖| 文爱是什么| 6.21什么星座| 手凉是什么原因| 纳肛是什么意思| 加息是什么意思| 嘴唇薄的男人面相代表什么意味| 肚子有水声是什么原因| 对偶是什么| ua是什么| biw医学上是什么意思| 海东青是什么鸟| 女性腰疼应该挂什么科| 吃皮蛋不能和什么一起吃| 腹泻吃什么好| cyl是什么意思| 托人办事送什么礼物较好| 睡觉喉咙干燥是什么原因| 睾丸扭转是什么意思| 射手男和什么星座最配| 梦见男婴儿是什么意思| 急性鼻窦炎吃什么药| 天河水是什么意思| 挖墙脚是什么意思| 拔智齿后需要注意什么| 不动明王是什么属相的本命佛| 车厘子什么时候成熟| 动物的脖子有什么作用| 细小是什么| 用红笔写名字代表什么| 圣女果是什么水果| 骨密度t值是什么意思| 心电图是什么| snp是什么意思| 肾功能不好吃什么药调理| 苏轼是什么朝代的| 水浒传有什么故事| 瘦脸针的危害有什么副作用| 牙齿痛吃什么药最管用| 亭字五行属什么| 三月八号什么星座| 牙齿掉了一小块是什么原因| 惊蛰什么意思| 浆细胞肿瘤是什么病| 不发烧流鼻涕打喷嚏吃什么药| 吃什么能胖起来| 香草是什么意思| 苹果什么季节成熟| 查血常规挂什么科| 为什么叫六小龄童| 胃不好吃什么蔬菜| bi是什么意思| 小孩风寒感冒吃什么药| hb是什么意思医学| 为什么一躺下就头晕目眩| 优雅知性是什么意思| 黄色配什么颜色好看| 左小腹疼是什么原因| 位数是什么意思| 12度穿什么衣服| 恐龙是什么时候灭绝的| 2022什么年| 疝气是什么意思| 房水是什么| 祁是什么意思| 镀18k金是什么意思| 怀璧其罪是什么意思| 邪犯少阳证是什么意思| 心梗是什么症状| 与什么隔什么| 什么叫偏光眼镜| 红斑狼疮的症状是什么| 颠是什么意思| 小孩睡觉磨牙是什么原因引起的| 1968属什么| 一个口四个又念什么| 甲状腺结节有什么症状| 什么叫私人会所| 李时珍的皮是什么意思| 2024年属什么年| 农历六月是什么生肖| 脾虚的人有什么症状| 是什么货币符号| xl代表什么尺码| 归脾丸和健脾丸有什么区别| 总免疫球蛋白e是什么| dha每天什么时候吃最好| 咳嗽吃什么食物好得快| 备皮什么意思| 最好的红酒是什么牌子| 平舌音是什么意思| 小孩流鼻血是什么原因| 什么是根管治疗牙齿| 脚扭伤挂什么科| 什么是文爱| 巨蟹座什么性格| 月经一个月来两次什么原因| 特别容易出汗是什么原因| 口琴买什么牌子好| 胆结石不能吃什么东西| 阴道口出血是什么原因| 什么动物菩萨心肠| 晴空万里什么意思| 六十而耳顺是什么意思| 今天开什么码| 梦见扫墓是什么预兆| 孕晚期破水是什么症状| 有什么不能说| 什么是手淫| 肚脐左下方疼是什么原因| 队友是什么意思| 考试前不能吃什么| CHANDO是什么牌子的化妆品| 什么的故事填词语| 摸摸唱是什么| 什么是势能| 产妇吃什么水果| 老专家药膏有什么功效| 物欲横流是什么意思| 肺不张是什么意思| 花牛是什么| 91视频是什么| 马的尾巴有什么作用| 打呼噜是什么引起的| 出家当和尚有什么要求| 吃什么药通气放屁最快| 胶体金法是什么意思| 146是什么意思| 肠癌吃什么药| 竟然是什么意思| 冬虫夏草长什么样| 工作是为了什么| ku是什么单位| 鸡肉与什么食物相克| tc什么意思| 百度
打印
[学习资料]

西安市人民代表大会常务委员会公告【十五届】第58..

[复制链接]
17663|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 dongnanxibei 于 2025-6-24 14:14 编辑

使用PID算法控制占空比(0-100%)来实现热水恒温加热是一个非常经典且有效的应用。

系统核心组件:
  • 温度传感器: 测量当前水温(PV - Process Variable)。
  • 控制器(运行PID算法): 可以是微控制器(如Arduino, STM32, Raspberry Pi Pico)、PLC或工业控制器。
  • 执行器: 通常是固态继电器(SSR) 或功率MOSFET/IGBT模块,用于根据控制器的指令(占空比)快速开关加热元件(电热棒、PTC加热器等)。
  • 加热元件: 将电能转化为热能。
  • 设定点(SP - SetPoint): 你想要保持的目标水温(例如,45°C)。

PID控制占空比的实现步骤:
  • 读取当前温度(PV):

    • 通过ADC(模数转换器)读取温度传感器的信号(如热电偶、热敏电阻、DS18B20数字传感器)。
    • 将ADC值转换为实际的温度值(PV)。

  • 计算误差(e(t)):

    • e(t) = SP - PV
    • 这是当前目标温度与实际温度之间的差值。如果PV低于SP(水太冷),误差为正,需要加热。如果PV高于SP(水太热),误差为负,需要停止或减少加热。

  • 计算PID输出(u(t)):

    • 这是PID算法的核心。标准位置式PID公式为:
      u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
    • 比例项 (Kp * e(t)):对当前误差做出即时反应。误差越大,输出变化越大。Kp过大会导致系统震荡;过小会使响应迟钝。
    • 积分项 (Ki * ∫e(t)dt):累积历史误差。消除稳态误差(当PV稳定在接近但不等于SP时)。Ki过大容易导致超调和震荡;过小则消除稳态误差慢。
    • 微分项 (Kd * de(t)/dt):预测未来误差趋势(基于误差变化率)。有助于抑制超调、增加稳定性。Kd过大对噪声敏感;过小抑制超调效果差。
    • 离散化: 微控制器是离散系统,需将连续公式离散化。常用方法:

      • u[k] = Kp * e[k] + Ki * sum(e[j] for j=0 to k) * dt + Kd * (e[k] - e[k-1]) / dt
      • 其中:

        • u[k]:当前时刻k的PID计算输出值。
        • e[k]:当前时刻k的误差。
        • e[k-1]:上一时刻k-1的误差。
        • sum(e[j]):从起始时刻到当前时刻k的误差累积和(即积分项的近似)。
        • dt:采样时间(控制周期)。非常重要! 需要根据系统特性(热惯性)合理选择(通常1-10秒对热水系统较合适)。



  • 将PID输出映射到占空比(0-100%):

    • PID计算出的u[k]是一个理论上的控制量,需要映射到实际可用的占空比范围。
    • 输出限幅(Output Clamping): 这是关键一步!必须将u[k]限制在[0, 100](或[0, MaxOutput])范围内。

      • duty_cycle[k] = constrain(u[k], 0, 100);

    • 为什么重要?

      • 防止积分项累积过大(积分饱和),导致系统长时间饱和输出,产生严重超调。
      • 确保输出符合执行器(占空比)的物理限制。


  • 抗积分饱和(Anti-Windup):

    • 当PID输出被限幅(饱和)时(例如u[k]计算值大于100,但被限制在100),积分项仍在持续累积误差(即使输出已经最大),这称为“积分饱和”。当系统需要反向调节时(如水温接近设定点需要减小加热),积分项的巨大累积值会导致输出无法及时减小,造成严重超调和震荡。
    • 解决方法:

      • 积分分离: 当误差e(t)很大时(例如|e(t)| > Threshold),只使用P或PD控制,禁用积分项(I),防止初始升温阶段积分项过度累积。当误差减小到阈值以下时,再启用积分项消除稳态误差。
      • 积分限幅: 直接限制积分项累积值的范围(min_integral 到 max_integral)。
      • 回算(Back Calculation): 当输出饱和时,根据饱和程度按比例减小实际的积分累积值(sum(e[j]))。这是效果较好的常用方法。
      • 条件积分: 仅在满足特定条件(如误差符号不变或输出未饱和)时才累加积分项。


  • 输出占空比信号:

    • 将计算得到的duty_cycle[k](0-100)值,通过控制器的PWM(脉宽调制)输出引脚输出。
    • PWM信号驱动固态继电器(SSR)或功率开关管(MOSFET/IGBT)。
    • PWM的频率需要根据加热元件和SSR的特性选择:

      • 电阻丝加热:较低频率(如1-10 Hz)即可,热惯性大。
      • 半导体加热(PTC):可能需要稍高频率(如10-100 Hz)。
      • 避免使用过高频率(如kHz以上),SSR的开关损耗会增加,且对温度控制无明显益处(热惯性太大)。

    • PWM占空比直接决定了在一个PWM周期内,加热元件通电时间的比例(duty_cycle %),从而控制平均加热功率。

  • 等待下一个采样周期:

    • 在精确的dt时间间隔后(使用定时器中断实现最准确),回到步骤1,开始新一轮的控制循环。



沙发
dongnanxibei|  楼主 | 2025-6-24 14:14 | 只看该作者
关键考虑点和优化:

PID参数整定(Tuning): 这是最具挑战性也最重要的步骤。Kp, Ki, Kd的值需要根据你的具体系统(水箱大小、加热功率、保温性能、散热情况、传感器位置)进行调整。

方法:

手动试凑法: 先设Ki=0, Kd=0,增大Kp直到系统开始等幅振荡。记录此时的临界增益Kc和振荡周期Pc。然后根据经验公式(如Ziegler-Nichols法)设置初始Kp, Ki, Kd(例如 Kp = 0.6*Kc, Ki = Kp / (0.5*Pc), Kd = Kp * 0.125*Pc),再微调。

软件自整定: 一些高级控制器或库提供自动整定功能(如阶跃响应分析)。

经验值: 对于热水系统,通常Kp在1-20范围内,Ki在0.001-0.1范围内(取决于dt),Kd在0-5范围内是比较常见的起点。务必从较小的值开始逐步增加!

目标: 响应快速、超调小、稳态误差小、抗干扰能力强。

采样时间(dt):

必须远小于系统的主要时间常数(热惯性)。对于家用热水器,1-10秒通常是合适的。

太短:计算开销大,对噪声更敏感,微分项可能不稳定。

太长:控制不及时,可能导致超调或振荡。

保持恒定! 使用硬件定时器中断来保证精确的采样间隔。

传感器精度、位置和滤波:

使用精度和响应速度合适的温度传感器。

传感器安装位置要能代表水体的平均温度(避免靠近加热器或出水口)。

对传感器读数进行适当滤波(如移动平均、低通滤波)以减少噪声对微分项的影响(噪声会被微分放大)。

执行器特性:

SSR或MOSFET的开关速度要足够快,确保能精确实现要求的占空比。

考虑最小导通时间限制。

设定点变化处理:

当设定点SP大幅改变(如从25°C调到50°C)时,积分项可能需要复位或限幅,防止初始阶段过度积分导致严重超调。积分分离法对此很有帮助。

安全机制:

温度上限保护: 绝对限制最高水温(如硬件或软件限制SP最大值,或在PV超过安全值时强制duty_cycle=0)。

传感器故障检测: 检测传感器是否开路、短路或读数超出合理范围,并采取安全措施(如关闭加热)。

看门狗定时器: 防止控制器程序跑飞导致持续加热。

板凳
dongnanxibei|  楼主 | 2025-6-24 14:16 | 只看该作者

代码示例框架
// 定义PID参数和变量
float Kp = 10.0;   // 比例系数 - 需调整
float Ki = 0.05;   // 积分系数 - 需调整
float Kd = 2.0;    // 微分系数 - 需调整
float dt = 1.0;    // 采样时间 (秒) - 需调整

float setpoint = 45.0;  // 目标水温 (°C)
float prev_error = 0.0;
float integral = 0.0;
float max_integral = 100.0; // 积分限幅值 - 需调整
float min_integral = -100.0; // 积分限幅值 - 需调整

// 主循环 (由定时器中断触发,间隔 dt 秒)
void controlLoop() {
    // 1. 读取当前温度 PV
    float pv = readTemperatureSensor(); // 实现此函数

    // 2. 计算误差
    float error = setpoint - pv;

    // 3. 计算积分项 (带限幅)
    integral += error * dt;
    // 抗积分饱和 - 方法1: 积分限幅
    if (integral > max_integral) integral = max_integral;
    if (integral < min_integral) integral = min_integral;
    // 可选:方法2 - 积分分离 (当|error|很大时,integral保持不变)

    // 4. 计算微分项 (近似)
    float derivative = (error - prev_error) / dt;
    prev_error = error; // 保存本次误差用于下次微分

    // 5. 计算PID输出
    float output = Kp * error + Ki * integral + Kd * derivative;

    // 6. 输出限幅 (0 - 100)
    float duty_cycle = output;
    if (duty_cycle > 100.0) duty_cycle = 100.0;
    if (duty_cycle < 0.0) duty_cycle = 0.0;

    // 7. 设置PWM占空比 (假设有 setPWM(duty) 函数)
    setPWM(duty_cycle); // 实现此函数,将duty_cycle(0-100)映射到实际的PWM寄存器值

    // (可选:更高级的抗饱和 - 回算法,当输出饱和时修正integral)
}
开始实施建议:

搭建好硬件(传感器、控制器、SSR、加热器、电源)。

实现基本的数据读取(PV)和PWM输出功能。

先实现简单的P控制(Ki=0, Kd=0)。调整Kp,观察系统响应(上升速度、是否有稳态误差、是否震荡)。

加入积分控制I(Ki > 0)。务必同时加入积分限幅(max_integral, min_integral)。调整Ki消除稳态误差,注意观察是否会引入超调和震荡。

如果需要抑制超调或增加稳定性,再加入微分控制D(Kd > 0)。调整Kd,注意传感器噪声会被放大,可能需要滤波。

在整个过程中,密切关注安全保护机制!

地板
zcyxh12345| | 2025-7-8 10:21 | 只看该作者
good  
5
dongnanxibei|  楼主 | 2025-7-8 11:35 | 只看该作者
感谢认可。这贴是我总结的,都是实际操作获得的经验。
6
GIVN| | 2025-7-8 17:43 | 只看该作者
感谢分享,学习了
7
zjsx8192| | 2025-7-9 09:11 | 只看该作者
感谢分享pid
8
kissdb| | 2025-7-9 11:02 | 只看该作者
感谢分享pid
9
似清风| | 2025-7-15 16:28 | 只看该作者
去年自己DIY加热台,也是用PID调温,不过没调好PID
10
时光迷宫| | 2025-7-20 20:12 | 只看该作者
问下这个PID算法是开源的吗
11
R2D2| | 2025-7-22 14:57 | 只看该作者
时光迷宫 发表于 2025-7-20 20:12
问下这个PID算法是开源的吗

PID算法超级简单,网上随便一搜就大把,几行程序的事儿,用模拟电路实现也不到20个元件。

PID的难度在于如何确定P、I、D三个参数的值,楼主显然还没有入门,这种没营养的口水贴也能推荐真是B了狗了。建议你搜“Ziegler-Nichols method”,有first和second两种。
12
leoeric| | 2025-7-23 13:51 | 只看该作者
感谢分享,学习了
13
cooldog123pp| | 2025-7-24 17:28 | 只看该作者
R2D2 发表于 2025-7-22 14:57
PID算法超级简单,网上随便一搜就大把,几行程序的事儿,用模拟电路实现也不到20个元件。

PID的难度在于 ...

也不能这么说吧,还是需要实际调试的,几个参数调优的话还是需要时间的。
14
GlenX| | 2025-7-25 18:25 | 只看该作者
本帖最后由 GlenX 于 2025-7-28 09:17 编辑

方法、过程都不错!感谢楼主的细心和分享!
---------------------------------------   带好安全帽,安全第一预防为主,可能有板砖飞过来  -----------------------------------------
但我反对很多对PID的“理解”,包括楼主对“积分增益”“微分增益”的理解和应用,当然不是你个人的错误,毕竟很多这么复制粘贴的。
积分和微分是有实际“单位”和“意义”的,不是一个用“增益系数”描述的“参数”,
我有员工也是这么理解,被我“纠正”了一番,希望大家正确理解积分和微分的实际意义,
也就是你提到的“采样周期”,和这个是有直接关系的,这个关系:采样周期和“一秒”之间的比例关系才叫系数。
自从没有电子管的时候就有了“气动仪表”的PID,到了现在的微处理器时代,
PID有微妙级的快速应用,也有常规的秒级应用,但始终都是和“时间”紧密相连的,积分、微分就是时间的概念,
在控制原理中有准确的定义和定量,不是一个没有单位的“系数”。
希望控制行业的同行不要延续这样的概念COPY。

15
幸福小强| | 2025-7-29 19:28 | 只看该作者
采用阈值法更合适。
16
zhuotuzi| | 2025-7-29 22:55 | 只看该作者
真不错,看看如何用的。
17
破晓战神| | 2025-7-30 17:10 | 只看该作者
这个帖子非常详细,提供了PID算法在水温控制中的应用步骤,对于学习PID控制很有帮助。
18
cmyldd| | 2025-7-30 19:20 | 只看该作者
实际调整的,
19
暖茶轻语| | 2025-7-31 12:53 | 只看该作者
这个PID控制流程描述得很详细,对于实现恒温加热系统来说非常有帮助。你提到了离散化处理和输出限幅,这些都是实际应用中的关键点。
20
暖茶轻语| | 2025-7-31 22:34 | 只看该作者
这个方法很实用,我之前用Arduino做过类似的项目,PID算法确实能够很好地控制水温。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3842

帖子

18

粉丝
百度