51单片机c语言算法大全,C语言实现51单片机中的PID算法

C语言实现51单片机中的PID算法

来源:华强电子网

作者:华仔

浏览:493

时间:2016-08-10 14:18

标签:

摘要:

//pid.h#ifndef __PID__#define __PID__/*PID = Uk + KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式)函数入口: RK(设定值),CK(实际值),KP,KI,KD函数出口: U(K)*/typedef struct PIDValue{int8 KP;int8 KI;int8 KD;

//pid.h#ifndef __PID__#define __PID__/*PID = Uk + KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式)函数入口: RK(设定值),CK(实际值),KP,KI,KD函数出口: U(K)*/typedef struct PIDValue{int8 KP;int8 KI;int8 KD;int8 F;int8 BITMOV;int EK[3];int UK;int RK;int CK;int UK_REAL;}pid_str;//PIDValueStr PID;void pid_exe(pid_str *PID) ;#endif//pid.c/*PID = PID->UK_REAL + PID->KP*[E(k)-E(k-1)]+PID->KI*E(k)+PID->KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式)函数入口: PID->RK(设定值),PID->CK(实际值),PID->KP,PID->KI,PID->KD函数出口: U(K)*/#include"defines.h"#include"pid.h"#define MAXOUT 0xff//#define MAXGAP 100void pid_exe(pid_str*PID){PID->EK[2]=PID->EK[1];PID->EK[1]=PID->EK[0];PID->EK[0]=PID->RK-PID->CK;PID->UK_REAL=PID->UK_REAL+PID->KP*(PID->EK[0]-PID->EK[1])//微分一次后积分即原数+(float)PID->KI*PID->EK[0]/PID->F//直接积分+(float)PID->KD*(PID->EK[0]-2*PID->EK[1]+PID->EK[2])*PID->F;//二阶微分后积分即一阶微分if((PID->UK_REAL>>PID->BITMOV)>=MAXOUT){PID->UK=MAXOUT;}else if(PID->UK_REAL>>PID->BITMOV<=-MAXOUT){PID->UK=-MAXOUT;}else{PID->UK=PID->UK_REAL>>PID->BITMOV;}}

分享到:

eb16ac850798d72e084e2c3ed33ff707.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值