平衡车之速度环分析及调试

平衡车为什么只有角度环不够,还需要速度环:

因为当角度环有偏差的时候,根据角度环的pid是可以给小车输出pwm波维持小车平衡的,但是小车要以什么样的速度维持平衡角度环是做不到的,加上速度环的目的就是于此。


速度环PI: PI是一种线性控制器
根据众多大神所说的平衡小车速度环的调试ki=kp/200来调试,

/************************************************************************/
速度环:
int velocity(int encoder_left,int encoder_right)
{
static float Velocity,Encoder_Least,Encoder,Movement;
static float Encoder_Integral,Target_Velocity;
Encoder_Least =(Encoder_Left+Encoder_Right)-0; //===获取最新速度偏差==测量速度(左右编码器之和)-目标速度(此处为零)
Encoder *= 0.8; //===一阶低通滤波器
Encoder += Encoder_Least*0.2; //===一阶低通滤波器 * Encoder_Integral +=Encoder; //===积分出位移 积分时间:10ms
Encoder_Integral=Encoder_Integral- Movement ;
if(Encoder_Integral>10000) Encoder_Integral=10000; //===积分限幅
if(Encoder_Integral<-10000) Encoder_Integral=-10000; //===积分限幅 * Velocity=Encoder*Vkp+Encoder_Integral*Vki; //===速度控制
if(Turn_Off(Angle_Balance,Voltage)==1||Flag_Stop==1) Encoder_Integral=0; //===电机关闭后清除积分
return Velocity;
}
首先明确速度环的pid也是位置式pid
(1)首先kp ki乘的参数选择:
kp*速度:既然是速度控制,那当然是速度作为比例被乘参数,来使速度维持在一个稳定状态
ki*位移 :KI是积分环节,速度的积分就是位移了,所以选取了位移控制参数

(2)然后先不要纠结算速度的时候为什么不除以2,为什么不初以中断时间
原因:1我们想要的只是一个变化量,如果除以2的话会舍去误差
2.至于为什么不除以中断时间 同样在最后速度还pwm的式子中kp乘的参数是速度,但他只是一个变化量 他没有和别的变量乘除,他只是自己在加减,需要的只是一个变化量。

(3)为什么要进行低通滤波:
低通滤波就是上次速度差值占80% + 这次速度差占20% =此次速度差值;
这样是为了减缓速度差值,对直立的干扰

(3)最后说说调参数
用PI控制器是因为PI组合是线性控制,平衡车最主要的还是直立环,其他都是对他的干扰(除了速度环速度设为0的时候是帮助平衡车直立):
首先明确速度环控制的原理是正反馈,就是小车在直立环的时候,小车往一个方向加速,速度环的作用就是用一个同方向更快的速度使小车平衡,这就是所谓的正反馈。

由前辈总结的工程经验ki=kp/200 所以在确定了kp ki的极性的时候,直接给kp算出ki打开直立环测试
首先确定速度环kp和ki的极性:

如何速度控制是正反馈还是负反馈呢
根据之前的估计, 先设定 kp=-50,ki=kp/200,当我们拿起小车,旋转其中一个小车轮胎的时候,根 据我们设定的速度偏差
Encoder_Least =(Encoder_Left+Encoder_Right)-0;
另外一个车轮会反向转动,让偏差趋向于零。这就是常规的速度控制里面的 负反馈,不是我们需要的效果。接下来设定 kp=50,ki=kp/200,此时,当我们旋 转其中一个小车轮胎的时候,两个轮胎会往相同的方向加速,直至电机的最大速 度,这是典型的正反馈效果,也是我们期望看到的。至此,我们可以确定 kp,ki 的符号应该是正的。

kp ki太小现象:平衡车还是直立一两秒向一个方向加速
kp ki太大现象:平衡车高频抖动这时候要关电机避免烧坏电机


让小车以一定的速度前进:
怎么控制小车前进:给速度闭环设置一个偏差,该偏差就是控制小车的速度,至于前后的话就是速度偏差的正负了。
怎么控制加速跑:这是我从一个大神里面看到的,觉得写得很好,就是给角度环里面的角速度一个偏差,这里可以用在竞速比赛中起跑时候以及弯道加减速的地方




速度环用什么参数控制速度合适:
这里有两个选择:(1)Encoder_Least =(Encoder_Left+Encoder_Right)- 0 ;
(2)Encoder_Integral=Encoder_Integral- Movement ;
没错,这两个参数就是红色标出来的,第一个0是目标速度,第二个是积分出来的位移,方法都是给偏差从而达到控制目的。我们选择后者是因为直接给速度偏差,对直立造成的干扰太大了,实际实验的时候也很不稳,而积分出来的位移给他位移偏差变化缓慢,对直立影响不大。所以我们选择后者的方案。 而控制速度的本质就是改变倾角,我们可以发现当速度给的越大,车子启动的时候倾角就越大,这是因为,你给的速度偏差越大,相比于小车平衡的时候,速度环给的pwm差值就越大,最后角度环和速度环相加后与原来平衡时候总的pwm就有差值,所以小车就不平衡了在刚开始,会倾斜一个角度。又因为有速度环控制着以稳定的速度向平衡位置输送pwm,这个速度状态就在角度环和速度环的双重闭环的反馈下就一直保持直立并以这个速度下去了。
movement决定速度的大小。
积分的限幅决定速度的最大上限
movemennt决定速度大小可以很好理解,,至于速度的积分限幅决定速度最大上限是因为:首先这个积分是每次加起来的或者每次减下去的,这要看前进还是后退,我以前就是这里想不通,现在想一想,积分控制的是静差,当movement越大,积分出来的静差就越大,大于实际平衡时候的pwm,但是积分最大值给了1000,所以就是静差最大值就是1000,如果要改变最大速度上限,就要更改这个上限。


蓝色就是静差 黑色是平衡位置 红色是目标位置

  • 91
    点赞
  • 551
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值