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
)
}
}
}
首先要看代码是汇编的还是C的,汇编的移植比较困难,通常都是配慎移植C代码。C代码本身的移植性比较强,针对不同的DSP需要注意的是:
1、新的DSP是浮点型的还是定点型的;浮点改定点问题就多了,要重新定标。
2、DSP的速率是多少,这在控制系统中很重要,直接关系到时间资源的分配(如周期中断时间)和一些参数的调整 (如PI参数等)
3、程序中的DSP初始化设置要改
4、头文件和库文件要进行相应培冲敬调整
5、CMD文判竖件要调整(地址分配相关)
6、中断向量要调整
7、存储空间不够时要对代码进行精简
总的来说“DSP算法移植”就是要改变算法的执行环境,C代码本身并不需要做太多的修改。本人做过的是2812代码移植6713的,一点经验希望对你有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)