⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handcode_pid.c

📁 直流电机控制MATLAB仿真(国外文献)含金量高
💻 C
字号:

#include "handcode_pid.h"

struct
{
    float K;
    float Ti;
    float Td;
    float Ts;
    float b;
    float N;
    float state_I;
    float state_y;
    float state_Dk;
} pid_params;

void
pid_controller_init()
{
    pid_params.K = 0.1F;
    pid_params.Ti = 0.01F;
    pid_params.Td = 0.00001F;
    pid_params.Ts = 0.0001F;
    pid_params.b = 0.7F;
    pid_params.N = 4.0F;
    pid_params.state_I = 0.0F;
    pid_params.state_y = 0.0F;
    pid_params.state_Dk = 0.0F;
}

void
pid_controller_step(float y, float uc, float *u_out)
{
    float e;
    float Pk;
    float Ik;
    float Dk;
    float Kd;
    float Kdd;
    float tmp;

    /* Calculate the proportional path
     */
    Pk = pid_params.K * (uc * pid_params.b - y);

    /* Calculate the integral path
     */
    Ik = pid_params.state_I;
    e = (uc - y);
    pid_params.state_I = (e*pid_params.K*pid_params.Ts/pid_params.Ti) + pid_params.state_I;

    /* Calculate the derivative path
     */
    Kd = pid_params.K * pid_params.Td * pid_params.N /
         (pid_params.Td + pid_params.N * pid_params.Ts);  
    Kdd = pid_params.Td /
         (pid_params.Td + pid_params.N * pid_params.Ts);  
    tmp = Kd * (y - pid_params.state_y);

    Dk = pid_params.state_Dk * Kdd - tmp;

    pid_params.state_y = y;
    pid_params.state_Dk = Dk;

    /* Sum the parts to the final output
     */
    u_out[0] = Pk + Ik + Dk;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -