平衡小车速度控制调试

author:Songyibiao

整体思路

下面是速度PI控制的代码代详细注释:

/***************************************************************
** 作   者: Songyibiao
** 官    网:http://www.miaowlabs.com
** 淘    宝:http://miaowlabs.taobao.com
** 日   期: 2015年11月29日
** 函数名称: SpeedControl
** 功能描述: 速度环控制函数           
** 输   入:   
** 输   出:   
** 备    注: 
********************喵呜实验室版权所有**************************
***************************************************************/
void SpeedControl(void)
{  
	float fDelta;
	float fP, fI;
	
	g_fCarSpeed = (float)(g_iLeftMotorPulseSigma  +  g_iRightMotorPulseSigma ) * 0.5f;//M法测速,得到80ms的脉冲数
	g_iLeftMotorPulseSigma = g_iRightMotorPulseSigma = 0;	  //全局变量 注意及时清零

	/*低通滤波*/
	g_fCarSpeed = (float)(g_fCarSpeedOld * 0.2f + g_fCarSpeed * 0.8f) ;
	g_fCarSpeedOld = g_fCarSpeed;
															 
	fDelta = CAR_SPEED_SET;//设定速度值,这里不竞速所以设为0即可
	fDelta -= g_fCarSpeed;//设定速度-当前速度=速度误差
	fP = fDelta * g_tSpeedPID.P;//计算P控制=速度误差*P值
	fI = fDelta * g_tSpeedPID.I;//计算I控制第一步=速度误差*I值
	g_fCarPosition += fI;	//计算I控制第二步,得到I控制值

	/*积分上限设限*/			  
	if((int)g_fCarPosition > SPEED_CONTROL_OUT_MAX)    g_fCarPosition = SPEED_CONTROL_OUT_MAX;
	if((int)g_fCarPosition < SPEED_CONTROL_OUT_MIN)    g_fCarPosition = SPEED_CONTROL_OUT_MIN;

	g_fSpeedControlOut = fP + g_fCarPosition;//最终输出速度控制PWM
}