初级会员

- 积分
- 103
- 金钱
- 103
- 注册时间
- 2017-9-7
- 在线时间
- 16 小时
|

楼主 |
发表于 2018-6-15 14:22:41
|
显示全部楼层
#include "PID.h"
#include "usart.h"
//PID结构体
/*****************************************
*
* 位置式PID计算
* pid.Voltage 为PID初始计算结果
* pid.ActulPoint 为实际输出到执行器结果 两者需要需要找到转换的函数式 初始为相等
*
****************************************/
struct _pid
{
float SetPoint;
float ActulPoint;
float err;
float err_last;
float Kp,Ki,Kd;
float Voltage;
float integral;
}pid;
//PID初始化
void PID_Init(float Kp,float Ki,float Kd)
{
pid.SetPoint = 0.0;
pid.ActulPoint = 0.0;
pid.err = 0.0;
pid.err_last = 0.0;
pid.integral = 0.0;
pid.Kp = Kp;
pid.Ki = Ki;
pid.Kp = Kd;
pid.Voltage = 0.0;
printf("----%f----\r\n",Kp);
printf("----%f----\r\n",pid.Kp);
}
//PID计算
float PID_realise(float SetPoint,float ActulPoint)
{
pid.SetPoint = SetPoint;
pid.ActulPoint = ActulPoint;
pid.err = pid.SetPoint - pid.ActulPoint;
pid.integral+= pid.err;
pid.Kp = 5.0;
pid.Voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);//计算
//printf("----%f----\r\n",pid.Voltage);
pid.err_last = pid.err;
pid.ActulPoint = pid.Voltage*1.0f;//默认算式输出和结果输出的值相同 需要自己找到转化关系
return pid.ActulPoint;
} |
|