OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2558|回复: 1

C语言问题,PID算法问题,求助大神

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2019-8-13
在线时间
7 小时
发表于 2019-8-14 01:18:33 | 显示全部楼层 |阅读模式
5金钱
我在网上找的一个程序,请问调用float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID)此函数中,PID_IncTypeDef *PID这个是填什么内容?什么数据的地址还是啥,另外这个函数用到简易风洞实验中该怎么用,需要注意些什么?
typedef struct



{



  float Kp;                       //比例系数Proportional



  float Ki;                       //积分系数Integral



  float Kd;                       //微分系数Derivative







  float Ek;                       //当前误差



  float Ek1;                      //前一次误差 e(k-1)



  float Ek2;                      //再前一次误差 e(k-2)



}PID_IncTypeDef;







/************************************************



函数名称 : PID_Inc



功    能 : PID增量(Increment)计算



参    数 : SetValue ------ 设置值(期望值)



            ActualValue --- 实际值(反馈值)



            PID ----------- PID数据结构



返 回 值 : PIDInc -------- 本次PID增量(+/-)



作    者 : strongerHuang



*************************************************/



float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID)



{



  float PIDInc;                                  //增量







  PID->Ek = SetValue - ActualValue;



  PIDInc = (PID->Kp * PID->Ek) - (PID->Ki * PID->Ek1) + (PID->Kd * PID->Ek2);







  PID->Ek2 = PID->Ek1;



  PID->Ek1 = PID->Ek;  return PIDInc;



}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-8-15 08:46:55 | 显示全部楼层
定义一个结构体,在结构体中设置初值,然后将结构体传入:
如:
PID pid = {
        100,        //输出限幅
        0,        //目标控制量
        0,        //反馈控制量

        1,        //Kp
        0.5f,        //Ki
        0.1f,        //Kd
       
        0, 0, 0        //e
};
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 03:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表