电流电压双闭环PID控制以及C语言实现

对于电流电压双闭环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)函数来等待采样周期,以确保控制器正常工作。

当然,实际应用中,还需要考虑许多因素,比如采样频率等。

【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
在这里插入图片描述文章来源地址https://uudwc.com/A/4P8nY

原文地址:https://blog.csdn.net/qq_33471732/article/details/129470738

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年07月25日 02:39
下一篇 2023年07月25日 02:40