金牌会员
 
- 积分
- 2589
- 威望
- 1193
- 贡献
- 768
- 兑换币
- 736
- 注册时间
- 2014-9-25
- 在线时间
- 314 小时
|
先说下我的问题,没加速度控制之前可以站起来,可以抵抗微小的干扰,加了速度控制之后,不管是轻轻往前推,还是往后推,差不多都能回到原来的位置,问题来了!当把小车人为的让它彻底躺着或者彻底趴着,电机不转,没反应,当回到一定的角度又可以转了(大概意思就是在-90°或者90°的时候电机不转,在-80°到80°都正常)求指点下!!!
我觉得可能的问题:
1,可能极性搞反了,但是搞反了轻轻推它它又可以回来,好困惑!
2,不知道了!!!!
下面贴出程序,求帮忙指导下!
void SpeedControl(void)
{
float fDelta;
float fP,fI;
g_fCarSpeed = (GetLeftSpeed()+GetRightSpeed()) / 2;
g_fCarSpeed *= CAR_SPEED_CONSTANT; //进行单位换算 转/s
fDelta=CAR_SPEED_SETfDelta-g_fCarSpeed;
//printf("g_fCarSpeed*100 = %d\n",(int)(fDelta*100));
fP=fDelta*SPEED_CONTROL_P; //比例控制
fI=fDelta*SPEED_CONTROL_I; //积分控制
g_fSpeedControlIntegral+=fI; //积分
//积分限幅max=900 min=-900
g_fSpeedControlIntegral = (g_fSpeedControlIntegral>SPEEDINTEGRAL_MAX?SPEEDINTEGRAL_MAX:g_fSpeedControlIntegral);
g_fSpeedControlIntegral = (g_fSpeedControlIntegral<SPEEDINTEGRAL_MIN?SPEEDINTEGRAL_MIN:g_fSpeedControlIntegral);
g_fSpeedControlOutOld=g_fSpeedControlOutNew;
g_fSpeedControlOutNew=fP+g_fSpeedControlIntegral;
}
float SpeedControlOutput(void)
{
float fValue;
fValue = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
g_fSpeedControlOut = fValue * (g_nCarSpeedCount + 1) / SPEED_CONTROL_PERIOD + g_fSpeedControlOutOld;
//SPEED_CONTROL_PERIOD = 100
return g_fSpeedControlOut;
}
void SpeedOut(float duty)//车身前倾 计算的 PWM为负值
{
float tempR;
float tempL;
Rightpwm1=(int)(-duty)-(int)SpeedControlOutput();//前面duty为角度平衡占空比
Leftpwm1=(int)(-duty)-(int)SpeedControlOutput();//这里单独的 Leftpwm1=(int)(-duty) ,不加速度控制,是可以平衡的
|
|