注册会员
- 积分
- 155
- 威望
- 114
- 贡献
- 29
- 兑换币
- 2
- 注册时间
- 2012-8-7
- 在线时间
- 6 小时
- 毕业学校
- 北京邮电大学
|
今天开始使用编码器调电机,但是最终的参数无论怎么调,车子都是龟速,原来大概1.5m/s,现在估计就1m/s吧,而且Kp给大了或者给小的时候,车子的速度不是飚,就是停止不动,用的是增量的pid,不知到底什么情况,为什么还会禁止不动呢??
具体的程序如下:
void speed_pid(int exp_v, int KKP, float KKI, int KKD)
{
float now_v;
//static int last_v_ek = 0, last_v_dek = 0; //速度偏差
float v_ek;
float v_dek; //偏差率
int temp;
//exp_v = (exp_v /40 )*4.5;
now_v = uSpeedNow * 11.85;
v_ek = exp_v - now_v; //速度差 I
v_dek = v_ek - last_v_ek; //偏差率 P
//KKP = 40; //0110 0000
//KKI = 0; //0000 1100
//KKD = 0;
temp = KKP * v_dek + KKI * v_ek + KKD * (v_dek - last_v_dek);
temp =(int)temp / 80;
speed_pwm = speed_pwm + temp;
last_v_ek = v_ek;
last_v_dek = v_dek;
PWMDTY01=speed_pwm;
}
是把10ms采集到的编码器数据转换成轮子的pwn占空比,然后再进行pid 的,求解啊!!~~~弄一天了 |
|