1、PID
2、直立环PID
/*******************************************************************
函数功能:直立PD控制
入口参数:角度、机械平衡角度(机械中值)、角速度
返回 值:直立控制PWM
作 者:公众号【大鱼机器人】
******************************************************************/
int balance_UP(float Angle,float Mechanical_balance,float Gyro)
{
float Bias;//角度误差
int balance;//直立环计算出来的电机控制pwm
Bias=Angle-Mechanical_balance;
//===求出平衡的角度中值和机械相关
balance=balance_UP_KP*Bias+balance_UP_KD*Gyro;
//===计算平衡控制的电机PWM PD控制 kp是P系数 kd是D系数
return balance;
}
balance=balance_UP_KP*Bias+balance_UP_KD*Gyro;
3、速度环
/**************************************
入口参数:电机编码器的值
返回 值:速度控制PWM
作 者:公众号【大鱼机器人】
**************************************/
int velocity(int encoder_left,int encoder_right)
{
static float Velocity,Encoder_Least,Encoder,Movement;
static float Encoder_Integral;
//=============速度PI控制器=======================//
Encoder_Least =(Encoder_Left+Encoder_Right)-0;
//===获取最新速度偏差==测量速度(左右编码器之和)-目标速度(此处为零)
Encoder *= 0.7; //===一阶低通滤波器
Encoder += Encoder_Least*0.3; //===一阶低通滤波器
Encoder_Integral +=Encoder; //===积分出位移 积分时间:10ms
if(Encoder_Integral>10000) Encoder_Integral=10000;
//===积分限幅
if(Encoder_Integral<-10000) Encoder_Integral=-10000;
//===积分限幅
Velocity=Encoder*velocity_KP+Encoder_Integral*velocity_KI;
//===速度控制
if(pitch<-40||pitch>40) Encoder_Integral=0;
//===电机关闭后清除积分
return Velocity;
}
Encoder_Least =(Encoder_Left+Encoder_Right)-0;
//===获取最新速度偏差==测量速度(左右编码器之和)-目标速度(此处为零)
4、转向环
-END-
这篇文章后,不要再问怎么做一台智能车了
看完这篇文章,还不知道怎么学单片机,来打我!
看完这篇文章,还不会做平衡小车,你来打我。