找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8246|回复: 0
打印 上一主题 下一主题
收起左侧

PID算法—完美篇

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 2015-12-27 05:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
部分源程序
typedef struct PID
{
    intSetPoint; //设定目标 Desired Value
    doubleProportion; //比例常数 Proportional Const
    doubleIntegral; //积分常数 Integral Const
    doubleDerivative; //微分常数 Derivative Const
    intLastError; //Error[-1]
    intPrevError; //Error[-2]
} PID;
//*****************************************************
//定义相关宏
//*****************************************************
#define P_DATA 100
#define I_DATA  0.6
#define D_DATA  1
#define HAVE_NEW_VELOCITY 0X01
//*****************************************************
//声明PID实体
//*****************************************************
static PID sPID;
static PID *sptr = &sPID;
//*****************************************************
//PID参数初始化
//*****************************************************
void IncPIDInit(void)
{
sptr->LastError = 0; //Error[-1]
sptr->PrevError = 0; //Error[-2]
sptr->Proportion = P_DATA; //比例常数 ProportionalConst
sptr->Integral = I_DATA; //积分常数Integral Const
sptr->Derivative = D_DATA; //微分常数 DerivativeConst
sptr->SetPoint =100;  目标是100
}
//*****************************************************
//增量式PID控制设计
//*****************************************************
int IncPIDCalc(int NextPoint)
{
   int iError, iIncpid;//当前误差
   iError =sptr->SetPoint - NextPoint; //增量计算
   iIncpid =sptr->Proportion * iError //E[k]项
            - sptr->Integral * sptr->LastError//E[k-1]项
            + sptr->Derivative * sptr->PrevError;//E[k-2]项
   sptr->PrevError =sptr->LastError;  //存储误差,用于下次计算
   sptr->LastError = iError;
   return(iIncpid);                         //返回增量值
}
Int g_CurrentVelocity;
Int g_Flag;

先跟大家交代下为什么要用PID。。
1由于外界原因,小车的实际速度有时不稳定
2要让小车以最快的时间达达到既定的目标速度
3速度控制系统是闭环,才能满足整个系统的稳定要求,必竟速度是系统参数之一
而这份文档是一份讲述关于PID的算法,大家知道,PID算法的讲述其实网上你去找的话
会有很多资源的,而卧现在共享的这一份与网上其他资源略有不同,这份是详细阐述了
飞思卡尔单片机的PID控制的,并且里面最后一段还有标注相当清晰的代码,大家看完以
后肯定会有收获的,因为令大家最痛苦的是网上的资源都没有以代码的形式进行阐述,而是纯粹的理论。      
另外呢,PID算法的应用现在已经是相当广泛了,对于车子的稳定性加强应该说是首选的算法,而且呢,
这次的电磁组大家看过资料的话应该明白,有超过5处需要用到PID算法软件控制。。这就对大家提出了更高的要求。
所以,特地为大家奉上这个完美资源。希望大家能给点鼓励,毕竟我好不容易才找到的,肯定已经有一部分人看过
类似的资源了,但是没有看到有人完全把这个资源拿出来的,,嘿嘿,大家懂得


但是如果要彻头彻尾地弄PID,建议多调试,写几个仿真程序
这是刘金锟先生的《先进PID控制及其MATLAB仿真.pdf》,方便大家实际演练PID


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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