打印
[DemoCode下载]

外置式与增量式PID模板程序

[复制链接]
1129|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mancherstun|  楼主 | 2015-8-9 20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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();
}


沙发
734774645| | 2015-8-9 20:57 | 只看该作者
这个只是 PID算法吧,不是完整的程序

使用特权

评论回复
板凳
643757107| | 2015-8-9 21:02 | 只看该作者
写的很模块化啊,很好啊,必须收藏。

使用特权

评论回复
地板
734774645| | 2015-8-9 22:16 | 只看该作者
void main(void)
{
Pidinit();
}
后面还是有主函数,

使用特权

评论回复
5
玛尼玛尼哄| | 2015-8-9 22:28 | 只看该作者
上面的人啊,没看完就说不完整

使用特权

评论回复
6
稳稳の幸福| | 2015-8-9 22:34 | 只看该作者
确实模块化的好东西,保存到文本,留在用

使用特权

评论回复
7
天灵灵地灵灵| | 2015-8-9 22:56 | 只看该作者
PID是个弱点,必须多看点资料,谢谢楼主。

使用特权

评论回复
8
捉虫天师| | 2015-8-10 08:59 | 只看该作者
楼主如果再搞个流程图就更好明白了。

使用特权

评论回复
9
C洛达尔多| | 2015-8-10 13:38 | 只看该作者
这个只是一个PID的具体算法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

294

帖子

2

粉丝