对无刷直流电机进行加减速控制、启动停止控制、正反转控制。
#include "reg51.h"
#include "math.h"
#include "1602.h"
int e=0,e1=0,e2=0;
float uk=0,uk1=0.0,duk=0.0; //pid输出值
float Kp=5,Ki=1.2,Kd=0.2; //pid控制系数
int out=0;
/*
float error[3]={0,0,0};
float sum;
int pid(int speed,float result)
{
float Kp=0.9,Ki=0.75,Kd=0.05,ut=0;
error[0]=speed-spd;
sum=sum+(ki*error[0]);
ut=sum+kp*error[0]+kd*(error[0]-error[1]);
return ut;
}
*/
extern unsigned int spd;
extern unsigned int speed;
extern unsigned char set;
int speed_pid()
{
e=speed-spd;//设置速度-实际速度,两者的差值
// duk=(Kp*(e-e1))/100;//只调节P
duk=(Kp*(e-e1)+Ki*e)/100;//只调节PI
// duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2))/100;//调节PID
uk=uk1+duk;//uk=u(k-1)+Δuk
if(e>20)
{
out=250;