STM32通过PID调节混水比例调节阀开度的调试心得

18 篇文章 2 订阅
1 篇文章 0 订阅

有关PID的理论相关的内容,网上有很多介绍很全很专业,然而看完后并不能应用于项目落地,本文描述一个真实的PID控制混水中心出水温度的案例。

关于PID控制,借用一下网上的图片:

本案例目的是混水中心输出温度基本恒定的水温,在一定误差范围内。故Setpoint为出水设定温度(该数据保留1位小数,并乘以10,按照整数形式计算);实际出水温度通过PT100采样,并经过A/D转换相关计算后得到(该数据保留1位小数,并乘以10,按照整数形式计算);执行机构是混水比例调节阀,控制方式是通过固定时间的脉冲形式,令阀向左或向右调节固定的步数,从而调节混水中心的出水温度。

PID调节的代码如下:

#ifndef __Z_UTIL_PID_H
#define __Z_UTIL_PID_H
#include "z_util_pid.h"
#endif

Obj_pid obj_pid;

void init_pid(float sv, float fv)
{
	obj_pid.set_target = sv;
	obj_pid.actual_value = fv;
	obj_pid.err = 0;
	obj_pid.err_next = 0;
	obj_pid.err_last = 0;
	obj_pid.kp = 2;
	obj_pid.ki = 2;
	obj_pid.kd = 0.2;
}

float func_pid_acting(float sv, float fv)
{
	float incr;
	obj_pid.set_target = sv;
	obj_pid.err = obj_pid.set_target - fv;
	incr = obj_pid.kp*(obj_pid.err - obj_pid.err_next) + obj_pid.ki*obj_pid.err + 
		obj_pid.kd*(obj_pid.err - 2*obj_pid.err_next + obj_pid.err_last);
	obj_pid.actual_value += incr;
	obj_pid.err_last = obj_pid.err_next;
	obj_pid.err_next = obj_pid.err;
	return incr;
}

该PID调节方式为增量型的。

在主函数中,如何使用PID的计算结果,控制阀的向左和向右的动作,是我们关心的,以及如何调节PID的系数。控制阀的向左和向右,可以这样:

pred_v = func_pid_acting(C_TARGET, temp);
//mprintf((s16)pred_v);
				
if(pred_v <= -5)
{
	if(step_cur < MIXED_VALVE_DEFAULT_STEP)
	{
		func_turn_right_steps((u8)(-pred_v/5));
		step_cur += (u8)(-pred_v/5);
	}					
}
else if(pred_v >= 5)
{
	if(step_cur > MIXED_VALVE_MIN_STEP)
	{
		func_turn_left_steps((int)pred_v/5);
		step_cur -= (int)pred_v/5;
	}					
}

通过PID计算出的增量值,与系统设计要求的误差做比较来控制向左调阀还是向右调阀。当然阀所在位置是有极限位置的。

关于PID系数的选择,P在PID调节公式中,当I和D均为0时,公式为 obj_pid.kp*(obj_pid.err - obj_pid.err_next),解释为误差的误差,当实际值下降时,该值总为负数;当实际值平稳时,该值总为0;当实际值上升时,该值为正数。

I在PID调节公式中,当P和D均为0时,公式为 obj_pid.ki*obj_pid.err,表示了当前的实际值和设定值相差有多远,值越大相差越远,值越小相差越近。

D在PID调节公式中,当P和I均为0时,公式为 obj_pid.kd*(obj_pid.err - 2*obj_pid.err_next + obj_pid.err_last), 表示了实际值的变化程度有多剧烈。当测量值稳定不变时,该值总为0;当实际值平稳上升或平稳下降时,该值总为0。当实际值逐渐快速增长时,该值总为正;当实际值逐渐快速减小时,该值总为负。

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32 PID库是用于实现PID比例-积分-微分)控制算法的软件库。PID控制算法是一种常用的闭环控制方法,广泛应用于各种自动控制系统中。 STM32 PID库提供了一套完整的PID控制算法实现,方便开发者在STM32控制器上进行PID控制系统的开发。该库提供了丰富的函数接口,可以方便地进行PID参数的配置、控制输入信号的获取以及输出信号的计算。 使用STM32 PID库,开发者只需简单地调用相应的函数接口,就能够实现PID控制的各个环节。首先,开发者需要调用函数对PID参数进行配置,包括设置比例、积分和微分系数等。然后,通过调用函数获取控制输入信号,这可以是传感器读取的实际值或者其他输入信号。接下来,PID库将根据配置的参数和获取的输入信号进行计算,得出控制输出信号。最后,开发者可以将输出信号送入执行器或者其他被控制对象,来实现闭环控制。 使用STM32 PID库的好处是可以大大简化PID控制系统的开发过程。开发者无需从零开始编写PID控制算法,而是直接使用库中封装好的函数,减少了代码量和开发时间。此外,PID库还提供了一些辅助函数和工具,方便开发者进行调试和性能优化。 总之,STM32 PID库是一种实现PID控制算法的软件库,在STM32控制器上提供了完整的PID控制功能,方便开发者进行PID控制系统的开发。它简化了开发过程,提高了开发效率,使得PID控制更易于实现调试
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值