51单片机PID控制电机转速实验

江枫思渺然 提交于 2020-01-23 18:11:50

资源链接

PID增量控制 

#include"Pid_Init.h"
#include"main.h"
extern u16 out;
extern u16 CurSpeed;
extern u16 SpeedSet;
extern u16 PWMTime;

int error=0;	//当前偏差
int error1=0;		//上次偏差
int error2=0;		//上上次偏差

struct Pid_Struct{
	
	float kp;
	float ki;
	float kd;	//pid控制系数
	
	float uk;		//当前增量输出
	float uk1;	//上次增量输出
	float uk2; //上上次增量输出
	

};

struct Pid_Struct PID;

//PID参数初始化
void PID_Init(){
	
	PID.kp=15;
	PID.ki=10;
	PID.kd=3;
	
	PID.uk=0;
	PID.uk1=0;
	PID.uk2=0;

}
//PID增量算法控制转速
void PID_Control(){
	
	error=SpeedSet-CurSpeed;//
	
	PID.uk2=(PID.kp*(error-error1) \
	
			+PID.ki*error \
	
			+PID.kd*(error-2*error1+error2))/50;
			/*增量PID算法*/
	PID.uk=PID.uk1+PID.uk2;
	
	out=(int)PID.uk;
	
	if(out>1000)
	{
		out=1000;
	}
	else if(out<0)
	{
		out=0;
	}
	
	PID.uk1=PID.uk;
	error2=error1;
	error1=error;
	PWMTime=out;

}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!