问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-10-15 01:21

我来回答

1个回答

热心网友 时间:2024-02-19 00:24

增量式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<b? a:b)  
#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<b? a:b)  
#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个参数后正常使用。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 佳能EOS70D相机光圈优先模式怎么操作?3 光圈优先和快门优先拍出来的照片发黑,怎么回事?17 用单反相机拍出来的照片 如何查看其拍摄模式是光圈优先 还是快...4 solidworks照相功能怎么用10 拜托请教一下:腌制朝鲜辣白菜需不需要放味精2 QQ礼物里送狗粮是怎么弄得?最好有图3 QQ狗粮怎么送人5 怎么才能不长个子8 怎样才能不长个子?1 怎么才能不长个子,我个子太高了 怎么才能不长个373 怎么样才能不长个子?60 怎么样才能不长个子136 求《海贼王》的剧场版全部!包括剧场版的名字!还有视频链接!谢谢_百度... 融创凡尔赛花园怎么样:我老公很喜欢这个楼盘 重庆融创凡尔赛花园位置在哪儿? 重庆融创凡尔赛花园(别墅)楼盘房源情况? 中国民航大学空乘复试时间 Ω这个符号怎样在电脑键盘什么打出来13 我在虚拟机软件里装的WIN10操作系统里用网易云听歌,感觉有点卡顿,是分... 如何在STM32上实现增量PID控制2 增量式PID算法控制小车速度25 哪里有二十四小时药店51 附近哪有二十四小时药店119 附近药店二十四小时营业的113 店面转让房东不同意合同有效吗?49 id改第三次方法 大伯去世怎么带孝14 我大伯去世,我父母建在戴什么孝?1 妻子的大伯去世我用戴孝吗8 筑美唯美胸膜丰胸贴,胸膜是什么效果好吗 我大伯死我带孝好不好10 老婆的亲大伯去世,我作为侄郎应不应该带孝4 辣白菜几天可以吃9 1.高尔基的《童年》对三个人物进行评价,需要结合具体事例或描写点评 床前的月光窗外的雪是什么歌164 大伯去世不到一百天,当然我戴孝了,别人结婚还能给别人迎亲吗1 床前的月光窗外的雪.歌名叫甚么3 爸爸去世未满三年,大伯去世了,还能戴孝嘛4 窗前的月光窗外的雪是什么歌?21