一、调整电机伺服器为1转=1000个脉冲,1圈反馈10000个脉冲,具体调整方法http://blog.csdn.net/xiao_ping_ping/article/details/41119151
接线图如下:
电机伺服器需设定P2-30为1
借用MCX314的Z轴记录实际反馈计数
二、重点程序文件
pid.h文件
#ifndef __PID_H__
#define __PID_H__
#define STABDARD 2.4 //2.4V
#define UPPER 1024 //电压采样量上限
#define PROPORTION 1000 //比例
#define INTEGRAL 0 //积分
#define DERIVATIVE 0 //微分
#define PULSE 1000 //
typedef struct _PID {
double SetPoint; // 设定目标 Desired Value
double Proportion; // 比例常数 Proportional Const
double Integral; // 积分常数 Integral Const
double Derivative; // 微分常数 Derivative Const
double LastError; // Error[-1]
double PrevError; // Error[-2]
double SumError; // Sums of Errors
int mode;
}PID,*pPID;
void pid_reset (PID *pp);
double pid_calc( PID *pp, double NextPoint );
PID* pid_init(void);
#endif
pid.c文件
#include <string.h>
#include <stdio.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "pid.h"
/*=================================================================== PID计算部分===================================================================*/
double pid_calc( PID *pp, double NextPoint )
{
double dError,Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
#if 1
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项
);
#endif
// return pp->Proportion *1.0 ;
}
/*===================================================================