• 外置式与增量式PID模板程序(51单片机c语言)


    外置式PID模板

    #define MuBiaoCS 0 //目标常数
    #define CHang_aCS 0 //比例常数
    #define CHang_bCS 0 //积分常数
    #define CHang_cCS 0 //微分常数
    /*******************************************************************************************/
    struct P_I_D {
    int MuBiao; //设定目标 Desired Value
    double CHang_a; //比例常数 Proportional Const
    double CHang_b; //积分常数 Integral Const
    double CHang_c; //微分常数 Derivative Const
    int Error1; //Error[-1]
    int Error2; //Error[-2]
    }Pidn;
    struct P_I_D *PID=&Pidn;
    /********************************************************************************************/
    void Pidinit(void) //pid初始化
    {
    PID->MuBiao=MuBiaoCS;
    PID->CHang_a=CHang_aCS;
    PID->CHang_b=CHang_bCS;
    PID->CHang_c=CHang_cCS;
    PID->Error1=0;
    PID->Error2=0;
    }

    int PID_WZ(int SRuu) //位置式PID
    {
    int Error0,SCuu;
    Error0 = PID->MuBiao - SRuu;
    PID->Error1+=Error0;
    SCuu = PID->CHang_a*Error0 //比例项
    + PID->CHang_b*PID->Error1 //积分项
    + PID->CHang_c*(Error0-PID->Error2);//微分项
    PID->Error2=Error0;
    return SCuu;
    }
    void main(void)
    {
    Pidinit();
    }

    增量式PID模板

    #define MuBiaoCS 0 //目标常数
    #define CHang_aCS 0 //比例常数
    #define CHang_bCS 0 //积分常数
    #define CHang_cCS 0 //微分常数
    /*******************************************************************************************/
    struct P_I_D {
    int MuBiao; //设定目标 Desired Value
    double CHang_a; //比例常数 Proportional Const
    double CHang_b; //积分常数 Integral Const
    double CHang_c; //微分常数 Derivative Const
    int Error1; //Error[-1]
    int Error2; //Error[-2]
    }Pidn;
    struct P_I_D *PID=&Pidn;
    /********************************************************************************************/
    void Pidinit(void) //pid初始化
    {
    PID->MuBiao=MuBiaoCS;
    PID->CHang_a=CHang_aCS;
    PID->CHang_b=CHang_bCS;
    PID->CHang_c=CHang_cCS;
    PID->Error1=0;
    PID->Error2=0;
    }

    int PID_WC(int SRuu) //增量式PID
    {
    int Error0,SCuu;
    Error0 = PID->MuBiao - SRuu; //偏差
    SCuu = PID->CHang_a*Error0 //Error项
    - PID->CHang_b*PID->Error1 //Error1项
    + PID->CHang_c*PID->Error2; //Error2项
    PID->Error2=PID->Error1; //将上次偏差存PID->Error2
    PID->Error1=Error0; //将这次偏差存PID->Error1
    return SCuu;
    }

    void main(void)
    {
    Pidinit();
    }
     

  • 相关阅读:
    Nbimer族助手 部分控件不能用的解决方法(转)
    jquery中通过全局变量来禁止多次ajax请求
    Three.JS 从世界坐标系转换到屏幕坐标系
    php 判断是手机版还是电脑端
    6个html5页面适配iphone6的技巧
    http://stackoverflow.com/questions/6065169/requestanimationframe-with-this-keyword
    javascript模仿php 函数 trim ltrim rtrim (原创)
    JavaScript中Trim(),TrimStart(),TrimEnd()的实现
    如何定位摄像机,使物体在屏幕上始终具有相同的像素宽度和高度?(threes)
    鸿基台式机安装
  • 原文地址:https://www.cnblogs.com/alan666/p/8312272.html
Copyright © 2020-2023  润新知