如何使用pid

一、背景:

        PID控制器是一种常见的反馈控制器,用于控制系统中的物理量:温度,速度,位置等。PID的名称来自于其三个组成部分:比例项(P), 积分项(I), 微分项(D)。PID控制的目标是使输入的参数(例如温度)趋近于目标点(例如目标温度),并保持在设定点附近。
        比例项(P):用于根据当前误差计算输出。若误差较大,则输出也较大,从而加快系统的响应速度。

        积分项(I): 用于消除稳态误差。若稳态误差持续存在,则积分项会逐渐增加,从而增加输出,直到误差消失。

        稳态误差举例:设目标温度为30°C,实际25°C,此时差值e为5。比例项(P)为固定值。若此时输出u可令温度在0.5h内上升5°C,但环境影响可令温度在0.5h内降低5°C,则输出u的作用被抵消,则偏差一直存在。该偏差即为稳态误差。

        微分项(D):用于减少系统的超调和震荡。若误差变化速度较快,则微分项会增加输出,从而较少超调和震荡。
二、简单实现:
 

// PID控制器参数
#define KP             1.0f
#define KI             0.1f
#define KD             0.01f

// 温度传感器参数
#define TARGET_TEMP    25.0f
#define ROOM_TEMP      20.0f
#define MAX_TEMP       100.0f
#define MIN_TEMP       0.0f

//PID控制器变量
float error       = 0.0f;
float integral    = 0.0f;
float derivative  = 0.0f;
float last_err    = 0.0f;
float output      = 0.0f;

//温度传感器变量
float current_temp = ROOM_TEMP;

//PID控制器函数
float pid_ctrl(float set_point, float input, float dt) {
    error      =  set_point - input;
    integral   += error * dt;
    derivative =  (error - last_error) / dt;
    output     =  KP * error + KI * intergal + KD * derivative;
    last_error = error;
    
    return output;
}

int main(void) {
    //模拟时间步长
    float dt = 0.1f;

    //模拟时间
    float t = 0.0f;

    //模拟循环
    while(1) {
        //计算PID输出
        output = pid_ctrl(TARGET_TEMP, current_temp, dt);

        //限制输出范围
        if (output > MAX_TEMP) {
            output = MAX_TEMP;
        } else if (output < MIN_TEMP) {
            output = MIN_TEMP;
        }

        //模拟温度变化
        current_temp += (output - current_temp) * dt;
        //输出结果
        printf("Time: %f, set_point: %f, input: %f, output: %f\n", t, TARGET_TEMP, current_temp, output);   
        //时长变化
        t += dt;
    }

    return 0;
}

在该例程中,创建了一个简单的PID控制器,定义了一些常量来表示PID控制器的参数和温度传感器的反馈的参数。主函数中使用while循环模拟时间变化,并在每个时间步长中计算PID输出和温度变化。最后输出结果并令时间变化。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘉禾天成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值