int SetPoint// 设定目标 Desired value
int Proportion// 比例常数 Proportional Const
int Integral// 积分常数 Integral Const
int Derivative// 微分常数 Derivative Const
unsigned int LastError// Error[-1]
unsigned int PrevError// Error[-2]
unsigned int SumError// Sums of Errors
// double Lastout //上次输出
unsigned int E1 // e1>e2
unsigned int E2 //
int Pmax//上限
int Pmin/段棚简和老/下限
} PID
/*====================================================================================================
PID计算部分,遇限消弱积分PID防饱和,积分分离算法实现
=====================================================================================================*/
int PIDCalc( PID *pp, unsigned int NextPoint )
{
int dError,
Error
Error = pp->SetPoint - NextPoint //偏差
if (Error<=-pp->E1) return (pp->Pmin) //饱和
else if (Error>=pp->E1)
return (pp->Pmax)
else
{
dError = pp->LastError - pp->PrevError// 当前微分
pp->PrevError = pp->LastError
pp->LastError = Error
if (Error>=pp->E2||Error<=-pp->E2) //分离握裤
return (pp->Proportion * Error // 比例项
+ pp->Derivative * dError )//PD,考虑限幅
else //位置式
{
pp->SumError += Error // 积分
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项 //PID
)
}
}
}
一、准备阶段1、了解开发时候的需求,AD采样、通讯、外设等等;
2、了解DSP所具有的硬件配置,硬件存储器资源、外设资源、通讯接口,方便初始化;
3、软件方案;
二、代码编写
1、文件框架,一般一种功能对应一个.c文件和.h文件,根据1.1需求来;不要只放在几个文物高件中,以方便维护。
2、函数框架,在对应文件中添加对应功能函数,函数只需要定义函数名;
3、往函数框架中添加代码。
(1)首先添加DSP器件相关程序,比如系统时钟配置,中断函数罩渗尺配置,中断函数;
(2)逐块添加喊兄算法代码,原则从易到难。
在现有的硬件基础上开发DSP软件大体步骤如下:一、准备阶段
1、分析开发项目需求,即软件所需要具备的功能,如AD采样、通讯、外设控制等等;
2、了解硬件平台资源,如硬件存储器资源、外设IO资源、通讯接口等等,为DSP的初始化工作做准备的;
3、结合硬件资源和需求制定一个可行的软件方案;
二、代码编写阶段
代码编写因人而异,大体步骤:
1、搭建文件框架,一般一种功能对应一个.C文件和.H文件,根据1.1软件需求来;(特别提醒不要把所有代码都放在一个或几个文件里,不然哪怕注释得再清楚,在后期的调试和维猛纤护时都很费劲)
2、搭建函数框架,文件搭好后,在对应的文件中添加对应的功能函数,函数只需要定义函数名即可,如Void SystemInit(){;};
3、函数框尺知谈架也搭好后就可以开始添加代码了,首先是添加DSP器件相关程序,比如陵碰系统时钟配置,中断函数;I/O功能脚配置等;其次逐块添加算法代码,原则是从易到难,每个函数框架代码搭建完后最好都进行测试。
三、调试优化阶段
以上一块块功能测试正常后,就可以开始整体测试了,直至最终调试完成。
以上仅是个人经验,仅供参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)