跨届大侠
- 积分
- 6490
- 威望
- 4804
- 贡献
- 650
- 兑换币
- 1264
- 注册时间
- 2014-3-19
- 在线时间
- 518 小时
|
本帖最后由 abacrya、军 于 2014-12-16 12:38 编辑
控 制 方 法:卓晴老师第七届直立车调试方案
速度控制周期:
/*每10MS进行速度控制*/
if(time_10)
{
speed_control(0);
time_10=0;
}
static int16 formerly_pwm=0,now_pwm=0;
void speed_control(uint16 expect_speed)
{
static int16 integral=0;
int16 ek,R_speed,L_speed,real_speed,kp;
L_speed= -FTM_QUAD_get(FTM1);//L
R_speed= -FTM_QUAD_get(FTM2);//R
FTM_QUAD_clean(FTM1);
FTM_QUAD_clean(FTM2);
//前进为正,后退为负
real_speed=(L_speed+R_speed)/2;
ek=expect_speed-real_speed;
kp=ek*speed.KP;
integral+=ek*speed.KI;
if(integral>2000)
integral=2000;
if(integral<-2000)
integral=-2000;
/*积分上限与积分下线*/
if(kp>6000)
kp=6000;
if(kp<-6000)
kp=-6000;
/*比例限幅*/
formerly_pwm=now_pwm;
now_pwm=kp+integral;
//VisualScope_Output(integral,kp,now_pwm,.0);
}
速度平滑控制:
1ms控制一次
int16 speed_smoothness_out(vuint8 time)
{
int16 x,pwm;
x=now_pwm-formerly_pwm;
x=x/10;
pwm=x*time+formerly_pwm;
return pwm;
}
1MS中断中内容:
void pit0_incident(void)
{
time++;
if(time==11)
time=1;
if( !(time%5) )
{
time_5=1;
}
if( time==10 )
{
time_10=1;
}
/****************每MS进行姿态控制****************/
balance_pwm=balance_control(0);
L_PWM=balance_pwm;
R_PWM=balance_pwm;
//进行速度控制后加上速度控制PWM值
speed_pwm=speed_smoothness_out( time);
L_PWM-=speed_pwm;
R_PWM-=speed_pwm;
//VisualScope_Output(L_PWM,R_PWM,speed_pwm,angle_pwm);
L_motor_pwm(L_PWM);
R_motor_pwm(R_PWM);
}
目的:站在原地受外界干扰不动!
存在问题:
调试过程中.先调积分I。当两边来回摆动时,开始调节比例参数,发现,KP小时,不能减小摆动。KP大时,小车震动,并来回摆动。。。
在这两个值中间找,,没有发现能让他停下来不摆动的值
原因还在迷茫中。。。求指点!
补充内容 (2014-12-16 13:20):
就是关于直立的参数,,,之前调了PD的几组能用的参数,,但是换电池后就都不能用了,,都发生了震荡。。。怎么样避免这个问题? |
|