永发信息网

求一下增量式和位置式PID的C语言程序

答案:2  悬赏:80  手机版
解决时间 2021-11-20 11:34
求一下增量式和位置式PID的C语言程序
最佳答案
增量式PID:
typedef struct{  
    float scope;        //输出限幅量  
    float aim;       //目标输出量  
    float real_out;     //实际输出量   
    float Kp;     
    float Ki;     
    float Kd;     
    float e0;          //当前误差  
    float e1;          //上一次误差  
    float e2;          //上上次误差  
}PID_Type;  

#define min(a, b)           (a#define max(a, b)           (a>b? a:b)  
#define limiter(x, a, b)      (min(max(x, a), b))  
#define exchange(a, b, tmp) (tmp=a, a=b, b=tmp)  
#define myabs(x)            ((x<0)? -x:x)  
  
float pid_acc(PID_Type *pid)  
{  
    float out;  
    float ep, ei, ed;  
      
    pid->e0 = pid->aim - pid->real_out;  
    ep = pid->e0  - pid->e1;  
    ei = pid->e0;  
    ed = pid->e0 - 2*pid->e1 + pid->e2;  
    out = pid->Kp*ep + pid->Ki*ei + pid->Kd*ed;  
    out = limiter(out, -pid->scope, pid->scope);  
    pid->e2 = pid->e1;  
    pid->e1 = pid->e0;  
    return out;  
}位置式PID:
typedef struct{  
    float scope;    //输出限幅量  
    float aim;   //目标输出量  
    float real_out; //反馈输出量  
    float Kp;         
    float Ki;  
    float Kd;  
    float Sum;  
    float e0;       //当前误差  
    float e1;       //上一次误差  
}PID_Type;  
  
#define max(a, b)           (a>b? a:b)  
#define min(a, b)           (a#define limiter(x, a, b)      (min(max(x, a), b))  
  
float pid_pos(PID_Type *p)  
{  
    float pe, ie, de;  
    float out = 0;  
  
    p->e0 = p->aim - p->real_out;      //计算当前误差    
  
    p->Sum += p->e0;       //误差积分  
  
    de = p->e0 - p->e1;     //误差微分  
  
    pe = p->e0;  
    ie = p->Sum;  
  
    p->e1 = p->e0;  
  
    out = pe*(p->Kp) + ie*(p->Ki) + de*(p->Kd);  
  
    out = limiter(out, -p->scope, p->scope);       //输出限幅
    return out;  
}亲手移植到我的stm32小车上 调试3个参数后正常使用。
全部回答
给我说,吧追问这两个有什么区别,什么时候用哪个
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
看图猜成语,成语玩命猜一只猪一块玉佩一个礼
别问爱过多少人是什么歌
64乘3.14乘4分之1加8
求这件衣服在网上卖的链接
噪音污染如何治理?
轴承nj204em与42204是一样吗
喝啤酒是否有美容的功效?
哪个能更好一点
外墙油性氟碳漆施工工艺
女39岁,感觉头特别累,请问是怎么了
木糖醇做面包为什么老发不起来
职工流动情况说明怎么写
怎么在广播电台中推广电影
inter-app audio 哪些应用 支持
上海松辰商务咨询有限公司怎么样?
推荐资讯
如何安装欧美星净水器oumeixing
有玩现货被骗的同行吗
从洛阳坐z41去青海到哪坐车
请问华硕k53tk换CPU换什么型号的?
博林双语幼儿园(毕节黔西县)地址有知道的么?
纵横距是什么???在线等!!!!快!
山西运城留驾庄到南湖广场做几路车
18岁男生,洗澡用鸭子,好不好?
带有sinx的函数怎么求极限啊
看符号猜城市答案大全
恶霸犬怎么养?我朋友弄了一只我也想养需要注
随身WiFi没有电脑,只有手机,能使用吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?