对于电流电压双闭环PID控制,我们需要先了解一下PID控制的原理。PID控制器是由比例(P),积分(I)和微分(D)三个部分组成的控制器,用于控制具有惯性和滞后响应的过程。PID控制器需要通过测量误差,计算出控制输出,以便实现系统稳定。
在电流电压双闭环PID控制中,控制器需要同时控制电流和电压,在实际应用中,可以采用电压调节器来控制电压,并通过电流反馈控制电流。下面,我们来看一下如何实现电流电压双闭环PID控制的C语言程序:
// pid控制参数定义
#define Kp 0.5
#define Ki 0.2
#define Kd 0.1
// 采样周期
#define Ts 0.01
// 目标电压值
#define Vd 10
// 反馈电压值
volatile float Vf;
// 目标电流值
volatile float Id;
// 反馈电流值
volatile float If;
// 比例误差
volatile float Ep;
// 积分误差
volatile float Ei;
// 微分误差
volatile float Ed;
// PID控制器输出
volatile float Out;
// PID控制器
void pid_control()
{
// 计算比例误差
Ep = Vd - Vf;
// 计算积分误差
Ei = Ei + Ep * Ts;
// 计算微分误差
Ed = (Ep - Ed) / Ts;
// 计算PID控制器输出
Out = Kp * Ep + Ki * Ei + Kd * Ed;
// 限幅控制
if (Out > 10) Out = 10;
if (Out < -10) Out = -10;
// 输出PID控制器输出
SetOutput(Out);
}
// 电压调节器
void voltage_regulator()
{
// 获取电压反馈值
Vf = GetFeedback();
// 调用PID控制器进行控制
pid_control();
}
// 电流控制器
void current_controller()
{
// 获取电流反馈值
If = GetCurrentFeedback();
// 计算电压目标值
Vd = Id * ResistorValue;
// 调用电压调节器进行控制
voltage_regulator();
}
// 主函数
int main()
{
// 初始化控制器
InitController();
// 设置电流目标值
Id = 2;
// 循环调用电流控制器
while(1)
{
current_controller();
delay(Ts);
}
return 0;
}
上面的C语言程序中,利用宏定义定义了PID控制参数、采样周期和目标电压值等。在pid_control()函数中,计算出比例误差、积分误差和微分误差,并使用PID控制器计算出输出值Out。还加入了限幅控制,以防止输出值超出控制范围。
在voltage_regulator()函数中,获取电压反馈值,并调用pid_control()函数进行电压调节控制。在current_controller()函数中,获取电流反馈值,并计算出目标电压值Vd,然后调用voltage_regulator()函数进行电流控制。
在主函数中,初始化控制器,设置电流目标值Id,并循环调用current_controller()函数控制电流。在循环中,使用delay(Ts)函数来等待采样周期,以确保控制器正常工作。
当然,实际应用中,还需要考虑许多因素,比如采样频率等。文章来源:https://uudwc.com/A/4P8nY
【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
文章来源地址https://uudwc.com/A/4P8nY