当前位置:文档之家› 双轮自平衡车设计报告

双轮自平衡车设计报告

双轮自平衡车设计报告学院…………..........班级……………………姓名………………..手机号…………………..姓名………………..手机号…………………..姓名………………..手机号…………………..目录一、双轮自平衡车原理二、总体方案三、电路和程序设计四、算法分析及参数确定过程一.双轮自平衡车原理1.控制小车平衡的直观经验来自于人们日常生活经验。

一般的人通过简单练习就可以让一个直木棒在手指尖上保持直立。

这需要两个条件:一个是托着木棒的手掌可以移动;另一个是眼睛可以观察到木棒的倾斜角度和倾斜趋势(角速度)。

通过手掌移动抵消木棒的倾斜角度和趋势,从而保持木棒的直立。

这两个条件缺一不可,让木棒保持平衡的过程实际上就是控制中的负反馈控制。

图1 木棒控制原理图2.小车的平衡和上面保持木棒平衡相比,要简单一些。

因为小车是在一维上面保持平衡的,理想状态下,小车只需沿着轮胎方向前后移动保持平衡即可。

图2 平衡小车的三种状态3.根据图2所示的平衡小车的三种状态,我们把小车偏离平衡位置的角度作为偏差;我们的目标是通过负反馈控制,让这个偏差接近于零。

用比较通俗的话描述就是:小车往前倾时车轮要往前运动,小车往后倾时车轮要往后运动,让小车保持平衡。

4.下面我们分析一下单摆模型,如图4所示。

在重力作用下,单摆受到和角度成正比,运动方向相反的回复力。

而且在空气中运动的单摆,由于受到空气的阻尼力,单摆最终会停止在垂直平衡位置。

空气的阻尼力与单摆运动速度成正比,方向相反。

图4 单摆及其运动曲线类比到我们的平衡小车,为了让小车能静止在平衡位置附近,我们不仅需要在电机上施加和倾角成正比的回复力,还需要增加和角速度成正比的阻尼力,阻尼力与运动方向相反。

5 平衡小车直立控制原理图5.根据上面的分析,我们还可以总结得到一些调试的技巧:比例控制是引入了回复力;微分控制是引入了阻尼力,微分系数与转动惯量有关。

在小车质量一定的情况下,重心位置增高,因为需要的回复力减小,所以比例控制系数下降;转动惯量变大,所以微分控制系数增大。

在小车重心位置一定的情况下,质量增大,因为需要的回复力增大,比例控制系数增大;转动惯量变大,所以微分控制系数增大。

二.总体方案■小车总框图三.电路和程序设计1.主要元器件选型A. STM32F103RCT6最小核心板■小容量增强型,32位基于ARM核心的带16或32K字节闪存的微控制器USB、CAN、6个定时器、2个ADC 、6个通信接口功能。

■内核:ARM 32位的Cortex™-M3 CPU−最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone2.1)。

−单周期乘法和硬件除法。

■存储器−从16K到32K字节的闪存程序存储器。

−从6K到10K字节的SRAM。

■时钟、复位和电源管理− 2.0~3.6伏供电和I/O引脚。

−上电/断电复位(POR/PDR)、可编程电压监测器(PVD)。

− 4~16MHz晶体振荡器。

−内嵌经出厂调校的8MHz的RC振荡器。

−产生CPU时钟的PLL−带校准功能的32kHz RTC振荡器■低功耗−睡眠、停机和待机模式− VBAT为RTC和后备寄存器供电■2个12位模数转换器,1μs转换时间(多达16个输入通道)−转换范围:0至3.6V−双采样和保持功能−温度传感器■DMA:− 7通道DMA控制器−支持的外设:定时器、ADC、SPI、I2C和USART■多达80个快速I/O端口− 26/37/51个I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V信号B. L298N双直流电机驱动模块■板载一个L298N马达控制芯片和一个7805稳压芯片。

■模块可以同时驱动2个直流电机或者一个五线四相式步进电机。

■模块输入电压6~12V■常用的电机驱动功能够用切资料也很好找。

C.传感器MPU6050模块■此六轴模块采用先进的数字滤波技术(卡尔曼滤波),能有效降低测量噪声,提高测量精度。

模块内部集成了运动引擎DMP,获取四元数得到当前姿态。

姿态测量精度0.01度,稳定性极高,性能甚至优于某些专业的倾角仪!采用高精度的陀螺加速度计MPU6050通过IIC协议输出保证数据的准确性。

■电压:3V~6V 。

电流:<10mA 。

体积:17.8mm X 17.8mm 重量:1.1g■测量维度:加速度:3 维,角速度:3 维,姿态角:3 维■量程:加速度:± 16g,角速度:± 2000°/s。

■分辨率:加速度:6.1e-5g,角速度:7.6e-3°/s。

■稳定性:加速度:0.01g,角速度 0.05°/s。

■数据输出频率 100Hz(波特率 115200)/20Hz(波特率 9600)。

■波特率 115200kps/9600kps。

D.HC-05蓝牙主从一体模块■供电电压3.3V~3.6V;■支持AT指令集配置模块;■采用CSR主流蓝牙芯片,蓝牙V2.0协议标准;■波特率最高为1382400bps;■配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。

2电路设计■STM32核心板原理图叮叮小文库■电机驱动原理图■MPU6050原理图■蓝牙模块原理图四.算法分析及参数确定■小车直立环使用PD(比例微分)控制器,其实一般的控制系统单纯的P 控制或者PI 控制就可以了,但是那些对干扰要做出迅速响应的控制过程需要D (微分)控制。

直立控制的PD代码int balance(float Angle,float Gyro){float Bias,kp=300,kd=1;int balance;Bias=Angle-0; //计算直立偏差balance=kp*Bias+Gyro*kd; //计算直立PWMreturn balance; //返回直立PWM}参数是平衡小车倾角和Y 轴陀螺仪(这个取决于MPU6050 的安装),调试过程包括确定平衡小车的机械中值、确定kp 值的极性(也就是正负号)和大小、kd 值的极性和大小等步骤。

在调试直立环的时候,我们要在定时中断服务函数里面屏蔽速度环和转向环。

■确定平衡小车的机械中值把平衡小车放在地面上,绕电机轴旋转观察小车什么时候平衡用量角器量大概中值在哪。

本小车为2度。

■确定kp 值的极性(令kd=0)首先我们估计kp的取值范围。

我们的PWM设置的是7200代表占空比100%,假如我们设定kp 值为720,那么平衡小车在±10°的时候就会满转。

根据我们的感性认识,这显然太大了,那我们就可以估计kp 值在0~720 之间,首先大概我们给一个值kp=-200,我们可以观察到,小车往哪边倒,电机会往那边加速让小车到下,就是一个我们不愿看到的正反馈的效果。

说明kp 值的极性反了,接下来我们设定kp=200,这个时候可以看到平衡小车有直立的趋势,虽然响应太慢,但是,我们可以确定kp 值极性是正的。

具体的数据接下来再仔细调试。

■确定kp 值的大小(令kd=0)确定参数的原则是:kp 一直增加,直到出现大幅度的低频抖动。

定kp=200,这个时候我们可以看到,小车虽然有平衡的趋势,但是显然响应太慢了。

定kp=680,这个时候我们可以看到,小车的响应明显加快,而且来回推动小车的时候,会有大幅度的低频抖动。

说明这个时候kp 值已经足够大了,需要增加微分控制削弱p 控制,抑制低频抖动。

■确定kd 值的极性(令kp=0)我们得到的MPU6050 输出的陀螺仪的原始数据,通过观察数据,我们发现最大值不会超过4 位数(正常应用在平衡小车上的时候),再根据7200 代表占空比100%,所以我们估算kd 值应该在0~3 之间,我们先设定kd=-0.5,当我们拿起小车旋转的时候,车轮会反向转动,并没有能够实现跟随效果。

这说明了kd 的极性反了。

接下来,我们设定kd=0.5,这个时候我们可以看到,当我们旋转小车的时候,车轮会同向以相同的速度跟随转动,这说明我们实现了角速度闭环,至此,我们可以确定kd 的极性是正的。

具体的数据接下来再仔细调试。

■确定kd 值的大小(令kp=500)确定参数的原则是:kd 一直增加,直到出现高频抖动。

设定kd=0.5,这个时候我们可以看到,低频大幅度频抖动已经基本消除。

设定kd=1,这个时候我们可以看到,整体性能已经非常棒。

设定kd=3.8,这个时候我们可以看到,小车开始出现剧烈抖动至此,我们可以确定得到kp=500,kd=1.7 是P、D 参数的最大值。

然后我们进行最关键的一步,对每个系数乘以0.6,取整得到kp=680,kd=2,这就是最终我们需要的参数,这样做的原因是,我们之前得到的参数是kp、kd 最对每个数据乘以0.6 得到。

这个时候我们可以看到,小车没有任何的抖动,非常平稳,但是依然无法保持长时间的直立,直立很短一段时间后会往一个方向加速倒下。

这个等我们下面加上速度环才能得到更好的性能。

只有直立环是很难让小车达到很好的直立效果的。

■平衡小车速度控制调试平衡小车速度环使用PI(比例积分)控制器,这也是速度控制最常使用的控制器。

PI 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差,将偏差的比例(P)和积分(I)通过线性组合构成控制量对被控对象进行控制。

■计算速度偏差根据公式偏差=测量值-目标值测量值我们使用左右编码器之和表示,我们没有必要纠结于是否要除以2,因为这样就引入舍去误差,我们需要的其实是一个可以表示速度变化的变量。

另外,我们的目标速度设置为零。

所以,可以得到Encoder_Least =(Encoder_Left+Encoder_Right)-0;然后,我们对速度值进行低通滤波,具体的系数由工程经验得到。

这样做的目的是为了减缓速度值的变化,防止速度控制对直立造成干扰,因为平衡小车系统里面,直立控制是主要的,其他控制对于直立来说都是一种干扰。

■确定kp 与ki 值的极性为了调试方便,接下来我们先关闭之前已经调试好的直立控制部分,积分项由偏差的积分得到,所以积分控制和比例控制的极性是相同的。

的平衡小车速度控制系统里面,一般我们可以把ki 值设置为ki=kp/200;这样,只要我们可以得到kp 值的大小和极性,就可以完成速度控制部分的参数整定了。

显然,这样大大缩短了PID 参数整定的时间。

另外要说明的是,虽然这里的PI 控制器是速度控制常用的一种控制器,但是和普通的调速系统不一样,这里的速度控制是正反馈的,当小车以一定的速度运行的时候,我们要让小车停下来,小车需要行驶更快的速度去“追”,小车运行的速度越快,去“追”的速度也就越快,所以这是一个正反馈的效果。

相关主题