平衡小车设计_2_设计思路

本文探讨了自平衡小车的设计思路,采用PID控制实现小车直立,通过角度环、转速环及转向环控制小车静止、直行与转向。详细解析了各环路控制原理与参数选择,旨在提升小车稳定性和运动性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平衡小车设计_2_设计思路

 

自平衡小车最基本的要求是小车能够站立,其核心在于电机的控制,本设计采用PID控制,不需要对控制系统建立精确的数学模型,只需要对小车运动机理稍作分析,适当选取被控量、控制规律以及控制器参数即可。

自平衡小车可以视为一个小车摆杆系统,小车摆杆系统的物理模型如下图。

小车摆杆系统物理模型

                  

当摆杆具有向右倒下的倾向,小车应加速向右运动,克服摆杆惯性,使摆杆回到竖直静止状态;反之,当摆杆具有向左倒下的倾向,小车应加速向左运动。

因此,在原理上只需要对系统施加角度环控制(原理图如下图):角度PD控制规律,选取适当的参数即可使小车直立,这里P参数主要用于消除误差,D参数主要用于减小、消除低频振荡(提高P参数的最大取值),而P越大,系统稳态误差越小,由于P无法取到无穷大,稳态误差一定存在,因而小车难以保持长时间静止直立,在直立一段时间后会向一个方向倒去,理想情况下,P参数适当,刚好抵消回复力作用,小车会匀速向前运动;如果P参数较小,回复力的作用较强,小车加速最终倒下;如果P参数较大,小车会经过振荡回到短时静止直立状态。而这里不施加I控制规律的原因有两点:第一,运动过程中姿态检测信号中混杂着较大的噪声,噪声会在积分环节中累加,产生控制误差;第二,车轮与地面的摩擦产生阻尼作用,抵消倾角误差的增加,积分环节无法对其进行无差控制。

角度环原理图

                                                             

 

经过上面的分析,小车能够保持直立,为了使小车保持静止,需要添加其它的辅助手段。上面的分析得出,在参数选择最理想的情况下,小车会匀速行驶。因此,引入转速环控制(原理图如下图):转速PI控制,选取适当的控制器参数即可使小车基本静止直立。控制机理:当小车匀速直线运动,在PI转速控制的作用下,小车的转速不断减小,可能经过一段振荡,转速达到设定值0,使小车站立的同时不向任一方向运动。但由于控制器参数不理想、电机存在死区等原因,小车难以保持真正意义上的静止直立,而是会在一个非常小的范围内缓慢振荡。这里,如果使用步进精度高的步进电机,能使小车看起来静止直立。为了使小车前后运动,可以在积分作用中人为加入误差,使小车转速产生偏差,在直立的同时向某一方向运动,由于两个电机、驱动电路参数并非完全对称等原因,小车无法保证直线行驶。

转速环原理图

 

 

经过上面的分析,小车能够保持静止直立或近似匀速直线运动,为了使小车走得更笔直、或者使其转向,可以引入转向环控制(原理图如下图):模糊PD控制,适当选取控制器参数使之基本符合设计要求。小车处于非转向状态下(静止直立、直行),使用小车转向角进行D调节,当小车偏离直线,小车在D控制器作用下抑制偏移角,达到短距离近似直行的效果;小车处于转向状态下,利用小车转速进行P调节 ,人为给定一个非0的转向速度,使左右两轮转速产生偏差,从而达到转向的目的,为了使转向更平滑,可以对设定值进行平滑处理,即使设定值按一定规律递增至阈值;为了行驶过程中转向更及时,可根据转向前的瞬时速度给定一个较大的递增值,使小车迅速转向。

转向环原理图

 

注意:为了保持小车直立,角度环应采用负反馈;而为了保持小车静止,转速环应采用正反馈:当小车向某一方向前进,为了使小车静止直立,应使之先加速向前,使倾角回复,再在角度环作用下减速至静止;而转向环为了保持直行、按给定偏差转向,应采用负反馈。

综上分析,自平衡小车完成静止直立、直行、转向等功能,控制算法上需要角度环、转速环、转向环分别对倾角进行负反馈PD控制、对转速进行正反馈PI控制、对转向角以及左右两电机转速差进行负反馈模糊PD控制。

一、平衡小车原理: 自平衡小车是利用模自身动力使小车保持相对的平衡,是一个动态平衡的过程。维持平衡的动力来自轮的运动,由两个直流电机驱动。对模的控制可以分解为三个控制任务: 1、控制小车平衡:通过控制小车轮正反转使小车保持直立平衡2、控制小车速度:通过控制小车的倾角实现小车前后运动和速度的控制,其实最终的仍是通过控制电机的转速实现。 3、控制小车方向:通过控制小车两个电机之间的转速差来实现转向控制。 分解为三个控制任务显得相对简单一点,但是在最终的控制过程中都归结为对一个控制量的控制,这样三个任务之间就会存在耦合,会相互干扰。三个任务中控制平衡是关键,所以对小车的速度和方向控制应该尽量的平滑。 二、硬件方案设计 小车的硬件分为三个部分,分别是主控部分、小车姿态获取部分以及电机驱动部分。主控板采用目前常用的arduino UNO,同时也可以使用其他arduino通用控制板做主控。 小车姿态获取可以有很多方案,使用最多的就是通过加速度计和陀螺仪获取小车姿态。理论上只需要两轴加速度计(垂直方向Z轴和沿小车运动方向X轴)和一个单轴陀螺仪(沿小车轮轴方向,获取绕小车轮轴的角速度)。陀螺仪通过角度积分可以获得小车角度,但是经过积分会产生累计误差,并且会越来越大,X轴与Z轴加速度计的值也可以算出小车的倾角,但是加速度计的瞬时误差较大,所以结合陀螺仪和加速度计两者获得的角度做数据融合可得真实角度。我们使用一个集成了三轴加速度计和三轴陀螺仪的集成芯片MPU6050,这样极大的简化了我们的传感器电路。 小车通过两个直流电机驱动轮运动来获得动力,直流电机的驱动电路设计关系到整个系统的稳定性,因为电机反转时会产生反向电动势会干扰到电源系统内其他设备的运行。我们选用L298P做电机驱动器,它内部包含4通道逻辑驱动电路,可同时驱动两个直流电机,输出电流可达2.5A。 三、软件设计小车姿态获取---卡尔曼滤波 在开始之前应该对MPU6050进行设置,主要设置角速度以及加速度的量程,加速度量程有±2g、±4g±8g与±16g,角速度量程分别为±250、±500、±1000与±2000°/sec (dps),可准确的追踪快速动作与慢速动作。在使用之前先设置好量程以便后面的换算。我们小车轮轴与传感器Y轴平行,即绕Y轴旋转则有: 那竖直方向弧度计算公式为: angle = atan2(x, z) //结果以弧度表示并介于 -pi 到 pi 之间(不包括 -pi) 如果要换算成具体角度: angle = atan2(x, z) *(180/3.14) 陀螺仪获取角速度积分得到角度公式为:anglen = anglen-1 + gyronn*dt ,式中anglen 为第N次采样的角度值,anglen-1 为第N-1次的角度值,gyronn为两次采样值之间的角速度值,dt为两次采样之间的时间。然后将换算后的两个角度数据进行卡尔曼滤波融合,可获得小车真实角度,也可以采用更简单的互补滤波算法。 注意加速度计所得角度与陀螺仪积分角度的方向。 四、软件设计小车姿态调整---PID参数整定 小车的姿态获取最终结果是一个角度,就是小车偏离平衡位置的倾角。通过以小车的这个倾角为变量进行PID控制,输出用于控制轮转速的PWM值,那么相当于小车只有一个角度反馈路,虽然能使小车平衡,但是增加了控制难度,所以通常会使用带测速的电机,再加入一个小车速度反馈路,这样使得小车更容易控制。关于PID的有下面一个简单易懂的描述: 假设我们想把一个小球稳定在一个光滑的坡顶,这显然是一个不平衡的系统,稍有扰动小球就会滚下来。假设恰好平衡的位置坐标是L,我们可以测量到小球的位置是x,那么怎么给小球施加f(x)的力反馈,让它能够平衡呢? 最直观的想法就是f(x) =Kp*(L-x),简单的说就是你在左边我就向右推,你在右边我就向左推,这就是比例因子P; 现在考虑两种情况,同样是在x位置,小球静止和小球具有速度V这两种情况。很明显,如果V>0,我们只需要施加更小的力,因为小球自身的惯性会让它运动向平衡位置。所以可以修正f(x) = Kp*(L-x) – Kd*V。因为速度一般不容易测量,我们常常用位置的变化Δx除以测量的时间差Δt来计算速度,所以这就是微分因子D; 情况继续发生变化,上面考虑的是斜坡静止的情况,如果这个变态的斜坡是移动的怎么办呢?(例如两轮平衡机器人实际上是可以运动的,对于静止的磁悬浮来说,不需要考虑这个参数)这时候我们需要不断的累加并平均x值,来计算平衡位置的L,这个就是积分因子I; 当PID用在我们自平衡小车中时,我们使用角度PD与速度PI进行控制。 pwm=angle*k1+angle_dot*k2+range*k3+wheel_speed*k4; PID参数整定步奏如下: 1、将k1,k2,k3,k4均设为0; 2、逐步增大k1,使得小车刚好能够来回摆动。 3、再逐步增大k2,使得小车相对平稳,太大会使小车发生抖动; 4、增大k3,使得小车能够来回走动(不是摆动也不是抖动); 5、增大k4,使得小车能稳定自平衡。 具体参数调整过程比较繁琐,需要自己体会每个参数的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值