双轮自平衡小车结题.docx
- 文档编号:23855600
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:26
- 大小:809.70KB
双轮自平衡小车结题.docx
《双轮自平衡小车结题.docx》由会员分享,可在线阅读,更多相关《双轮自平衡小车结题.docx(26页珍藏版)》请在冰豆网上搜索。
双轮自平衡小车结题
双轮自平衡小车
科研训练总结报告
项目名称:
学生姓名:
学院:
指导教师:
****学自动化学院
*********8系
2014年12月27日
目录
一、研究的目的与意义2
1.1.项目研究目的与意义2
1.2.国内外发展历史及研究现状3
二、系统设计与要求4
2.1项目研究内容4
2.2设计要求4
2.3方案选取4
2.3.1主控板模块4
2.3.2电机驱动模块4
2.3.3传感器模块5
2.3.4卡尔曼算法的初值计算方法及实际应用5
2.3.5双轮自平衡小车的PID控制5
三、总体设计方案6
四、系统硬件设计7
4.1STC12C5A60S2简介7
4.2MPU6050简介8
4.3LM298简介10
4.4硬件平台的组合11
五、系统软件设计12
5.1软件设计流程12
5.2软件程序如下12
六、实验结果与分析22
七、参与人心得23
八、参考文献24
一、研究的目的与意义
1.1.项目研究目的与意义
近年来,两轮自平衡小车的研究开始在美国、日本、瑞士等国得到迅速的发展。
建立了多个实验原机型,提出来众多解决平衡控制的方案,并对原机型的自动平衡性能与运动特性进行了验证。
通过对两轮自平衡系统的改造,可快速方便的应用到众多环境中去,如承载、运输 ,代步等。
这其中蕴藏着巨大的商机,相应有些国外公司现在已经推出了商业化产品,并且已经投放到了市场。
两轮自平衡小车两轮共轴、独立驱动、车身重中心位于车轮轴上方,通过运动保持平衡,可以直立运动,因为特别的结构,它对于地形的变化有很强的适应能力,有着良好的运动性能,能够在比较复杂的环境里面的工作,和传统的轮式移动机器人相比较,两轮自平衡小车有着以下的几个优点:
(1)能够实现在原地回转和任意半径的转向,有更加灵活易变的移动轨迹很好地弥补了传统多轮布局的缺点;
(2)具有占地面积小的优点,能够在场地面积很小或者要求灵活运输的场合上使用;(3)车的结构上有很大的简化,可以把车做的更轻更小;(4)有着较小的驱动功率,能够让电池长时间供电,为环保型轻车提供了一种新的概念。
(5)机器人的平衡是个动态过程;机器人在平衡点附近不停地变化进行调节以保持平衡;(6)重心的高度对小车运动和硬件设计的限制小。
多轮(三轮或以上)移动小车虽然可以稳定地平衡,可是重心过高则小车启动或急停时,有倾倒的危险。
因此重心必须要求很低,设计时总是拉大小车的水平截面积,降低高度。
这样会造成小车体积变大,质量增加,某些功能会受到限制。
两轮自平衡移动小车却无这方面的约束,重心的高低引起的不平衡已经通过动态平衡原理解决。
因此重心的高低无严格限制,节省占地面积,可用在场地面积较小或要求灵活运输的场合;(7)驱动功率较小,为电池长时间供电提供了可能,为环保轻型车提供了一种新的思路。
鉴于这些特点,两轮自平衡小车有着相当广泛的应用前景。
两轮自平衡小车是一个集动态决策和规划、环境感知、行为控制和执行等多种功能于一体的综合复杂系统,其关键是在解决自平衡的同时,还能够适应在各种环境下的控制任务。
通过运用外速度传感器、角速度传感器等,可以实现小车的平衡自主前进。
1.2.国内外发展历史及研究现状
两轮自平衡小车自问世以来,迅速成为研究各种控制理论的理想平台,具有重大的理论意义,这要归功于她不稳定的动态性能和系统所具有的非线性。
早在1986年,日本电通大学教授山藤高桥最先提出了两轮自平衡机器人的概念,并制造了一个在导轨上的两轮倒立摆机器人。
这个基本的概念就是用数字处理器来侦测平衡的改变,然后以平行的双轮来保持机器的平稳。
这款被山藤高桥称为平行自行车的机器人开创了两轮自平衡机器人研究的先河。
美国SegwayLLC公司开发的SegwayHT两轮平台电动车把人们从传统的“三点平衡”和以低重心、大商稳的底盘设计来避免倾斜的束缚中解脱出来,通过检测车体的角度和角述度.用适当的回复转矩来避免倾刳摔倒。
系统利用5个惯性比率传感器(陀螺仪)、2个倾角侍感器、电机编码器和一世光学脚垫传感嚣把系统的的状态提供给了控制器,控制器经过运算确定输入给电机的能量大小。
近十年来,两轮自平衡机器人引起同外许多研究机构和机器人爱好者极大关注,各种基于不同目的、不同设计方案和控制策略的自平衡系统相继而生。
在这方面国外的研究比较超前,研制出了一些具有代表性的机器人,国内的研究基本上处于理论研究与实践的初期,只开发出了少数的实验原型机。
中国科学技术大学自动化系和力学系多位教授、博导、博士、硕士研究生和本科生联合研制完成的科研成果,又名自平衡电动代步车,是实用的两轮自动平衡车(机器人),己能实用化,两轮自平衡机器几是将倒立摆原理移植到移动机器人上的概念。
关于倒立摆的研究多年来国内外已经研究非常成熟,其文献也相当之多,然而更重要的是如何将倒立摆有效地应用在移动机器人上。
以上是国内外两轮自平衡小车的研究现状,这些小车都对本课题的研究提供了很好的指导作用。
然而,这些机器人的有关资料中并没有对机器人速度控制的详细介绍。
二、系统设计与要求
2.1项目研究内容
1)两轮自平衡小车物理实体的设计,各部分之间的硬件连接,搭建。
2)小车角速度传感器、加速度传感器对自身信息的采集,并实现采集的信息对单片机进行传送。
3)单片机软件的设计,实现对小车的信息采集控制。
2.2设计要求
设计一款可以站立的双轮自平衡小车,一个集动态决策和规划、环境感知、行为控制和执行等多种功能于一体的综合复杂系统,其关键是在解决自平衡的同时,还能够适应在各种环境下的控制任务。
通过运用加速度传感器、角速度传感器等,可以实现小车的平衡站立。
2.3方案选取
根据设计要求,确定如下方案:
使用STC12C5A60S2单片机,MPU6050芯片为主要的控制通信器件,加装一些电源模块、电源驱动模块,实现对电动小车的平衡站立控制。
由单片机根据所检测的各种信息实现对小车的智能控制。
这种方案能实现对自动小车的运动状态进行实时控制,控制灵活、可靠、精度高,可满足对系统的各项要求。
双轮自平衡小车系统主要包括以下模块:
电源模块、单片机主控模块、电机驱动模块、传感器模块。
2.3.1主控板模块
针对本设计特点,多开关量输入程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A,A/D功能也不必选用。
根据这些分析,我选定了STC12C5A60S2单片机作为控制器,51系列单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间大,对于本设计很适合,更可贵的是价格非常低廉。
2.3.2电机驱动模块
采用功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路,用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。
现市面上很多这种芯片,我选了LM298N。
由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。
根据以上考虑,以及本设计中受控电机的容量和直流电机转速的发展方向,本设计采用了H型单极型可逆PWM变换器件LM298N进行电机调速。
2.3.3传感器模块
传感器模块采用了MPU6050,MPU-6000(6050)为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。
MPU-6000(6050)整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。
2.3.4卡尔曼算法的初值计算方法及实际应用
卡尔曼滤波是一种统计估算算法,通过处理一系列带有误差的实际测量数据而得到的所需要的物理参数的最佳估计值。
根据这一基本思想,同样可以用于处理一系列带有误差的预报值而得到预报值得最佳估计值。
卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器),它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。
2.3.5双轮自平衡小车的PID控制
两轮自平衡小车的核心问题是平衡控制问题和运动控制问题。
两轮自平衡小车需要始终保持车身直立。
PID控制算法是应用最为普遍的一种算法,其特点是构造简单,应用有效及具备了许多成熟的稳定性分析的方法,有很高的可靠性。
针对两轮自平衡小车的非线性和不稳定性,利用非线性PD控制算法和PID差动结构可以实现小车的平衡控制和运动控制。
三、总体设计方案
本设计采用STC12C5A60S2单片机作为控制器,通过软件滤波和自动控制理论算法使得小车达到平衡状态。
系统的传感器采用角度传感和角速度传感器MPU6050采集小车车身的水平状态值和小车的加速度值。
并且采用了LM298双桥大功率集成驱动芯片来驱动电机。
依靠这些可靠的硬件设计,使用PID闭环控制算法和卡尔曼滤波算法,使得整个硬件结构和软件系统能顺利匹配。
从而使得小车能保持直立自平衡状态。
系统框图如下:
系统框图
四、系统硬件设计
4.1STC12C5A60S2简介
STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。
1、增强型8051CPU,1T(1024G),单时钟/机器周期
2、工作电压5.5-3.5V
3、1280字节RAM
4、通用I/O口,复位后为:
准双向口/弱上拉
可设置成四种模式:
准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏
每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA
5、有EEPROM功能
6、看门狗
7、内部集成MAX810专用复位电路
8、外部掉电检测电路
9、时钟源:
外部高精度晶体/时钟,内部R/C振荡器
常温下内部R/C振荡器频率为:
5.0V单片机为:
11~17MHz
3.3V单片机为:
8~12MHz
10、4个16位定时器
两个与传统8051兼容的定时器/计数器,16位定时器T0和T1
11、3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟
12、外部中断I/O口7路,传统的下降沿中断或电平触发中断,并新增支持上升沿中断的PCA模块,PowerDown模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP0/P1.3
13、PWM2路
14、A/D转换,10位精度ADC,共8路,转换速度可达250K/S
15、通用全双工异步串行口(UART)
16、双串口,RxD2/P1.2,TxD2/P1.3
17、封装:
LQFP-48,LQFP-44,PDIP-40,PLCC
管脚说明
P0.0~P0.7P0:
P0口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。
当P0口作为输入/输出口时,P0是一个8位准双向口,内部有弱上拉电阻,无需外接上拉电阻。
当P0作为地址/数据复用总线使用时,是低8位地址线A0~A7,数据线D0~D7。
4.2MPU6050简介
MPU-60X0是全球首例9轴运动处理传感器。
它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotionProcessor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。
扩展之后就可以通过其I2C或SPI接口输出一个9轴的信号(SPI接口仅在MPU-6000可用)。
MPU-60X0也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。
MPU-60X0对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。
为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g。
一个片上1024字节的FIFO,有助于降低系统功耗。
和所有设备寄存器之间的通信采用400kHz的I2C接口或1MHz的SPI接口(SPI仅MPU-6000可用)。
对于需要高速传输的应用,对寄存器的读取和中断可用20MHz的SPI。
另外,片上还内嵌了一个温度传感器和在工作环境下仅有±1%变动的振荡器。
芯片尺寸4×4×0.9mm,采用QFN封装(无引线方形封装),可承受最大10000g的冲击,并有可编程的低通滤波器。
关于电源,MPU-60X0可支持VDD范围2.5V±5%,3.0V±5%,或3.3V±5%。
另外MPU-6050还有一个VLOGIC引脚,用来为I2C输出提供逻辑电平。
VLOGIC电压可取1.8±5%或者VDD。
5V/3.3V电源输入,XDA/XCL用于外接其他IIC接口传感器,不用。
SDA,SCL连接到单片机,INT产生中断信号,连接至单片机。
AD0一般接地。
4.3LM298简介
L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
L298有两路电源分别为逻辑电源和动力电源,上图中6V为逻辑电源,12V为动力电源。
J4接入逻辑电源,J6接入动力电源,J1与J2分别为单片机控制两个电机的输入端,J3与J5分别与两个电极的正负极相连。
ENA与ENB直接接入6V逻辑电源也就是说两个电机时刻都工作在使能状态,控制电机的运行状态只有通过J1与J2两个接口。
IN1
IN2
ENA
电机状态
X
X
0
停止
1
0
1
顺时针
0
1
1
逆时针
0
0
0
停止
1
1
0
停止
4.4硬件平台的组合
电源模块接12V电源,然后通过电源模块给系统的所有部分供电。
MPU6050的SCL和SDA引脚分别接单片机的P2.0和P2.1引脚。
电机驱动模块的INT0,INT1,INT2,INT3分别接单片机的P2.1、P2.2、P2.5、P2.0引脚。
连接后各个电源线,即完成小车的整体硬件搭建。
小车整体布局合理,结构层次清晰,重心稳定。
五、系统软件设计
5.1软件设计流程
5.2软件程序如下
/***********************************************************************
//两轮自平衡车最终版控制程序(6轴MPU6050+互补滤波+PWM电机)
//单片机STC12C5A60S2
//晶振:
20M
//日期:
2012.11.26-?
***********************************************************************/
#include
#include
#include
#include
typedefunsignedcharuchar;
typedefunsignedshortushort;
typedefunsignedintuint;
//******功能模块头文件*******
#include"DELAY.H"//延时头文件
#include"STC_ISP.H"//程序烧录头文件
#include"SET_SERIAL.H"//串口头文件
#include"SET_PWM.H"//PWM头文件
#include"MOTOR.H"//电机控制头文件
#include"MPU6050.H"//MPU6050头文件
//******角度参数************
floatGyro_y;//Y轴陀螺仪数据暂存
floatAngle_gy;//由角速度计算的倾斜角度
floatAccel_x;//X轴加速度值暂存
floatAngle_ax;//由加速度计算的倾斜角度
floatAngle;//小车最终倾斜角度
ucharvalue;//角度正负极性标记
//******PWM参数*************
intspeed_mr;//右电机转速
intspeed_ml;//左电机转速
intPWM_R;//右轮PWM值计算
intPWM_L;//左轮PWM值计算
floatPWM;//综合PWM计算
floatPWMI;//PWM积分值
//******电机参数*************
floatspeed_r_l;//电机转速
floatspeed;//电机转速滤波
floatposition;//位移
//******蓝牙遥控参数*************
ucharremote_char;
charturn_need;
charspeed_need;
//*********************************************************
//定时器100Hz数据更新中断
//*********************************************************
voidInit_Timer1(void)//10毫秒@20MHz,100Hz刷新频率
{
AUXR&=0xBF;//定时器时钟12T模式
TMOD&=0x0F;//设置定时器模式
TMOD|=0x10;//设置定时器模式
TL1=0xE5;//设置定时初值
TH1=0xBE;//设置定时初值
TF1=0;//清除TF1标志
TR1=1;//定时器1开始计时
}
//*********************************************************
//中断控制初始化
//*********************************************************
voidInit_Interr(void)
{
EA=1;//开总中断
EX0=1;//开外部中断INT0
EX1=1;//开外部中断INT1
IT0=1;//下降沿触发
IT1=1;//下降沿触发
ET1=1;//开定时器1中断
}
//******卡尔曼参数************
floatcodeQ_angle=0.001;
floatcodeQ_gyro=0.003;
floatcodeR_angle=0.5;
floatcodedt=0.01;//dt为kalman滤波器采样时间;
charcodeC_0=1;
floatxdataQ_bias,Angle_err;
floatxdataPCt_0,PCt_1,E;
floatxdataK_0,K_1,t_0,t_1;
floatxdataPdot[4]={0,0,0,0};
floatxdataPP[2][2]={{1,0},{0,1}};
//*********************************************************
//卡尔曼滤波
//*********************************************************
//Kalman滤波,20MHz的处理时间约0.77ms;
voidKalman_Filter(floatAccel,floatGyro)
{
Angle+=(Gyro-Q_bias)*dt;//先验估计
Pdot[0]=Q_angle-PP[0][1]-PP[1][0];//Pk-先验估计误差协方差的微分
Pdot[1]=-PP[1][1];
Pdot[2]=-PP[1][1];
Pdot[3]=Q_gyro;
PP[0][0]+=Pdot[0]*dt;//Pk-先验估计误差协方差微分的积分
PP[0][1]+=Pdot[1]*dt;//=先验估计误差协方差
PP[1][0]+=Pdot[2]*dt;
PP[1][1]+=Pdot[3]*dt;
Angle_err=Accel-Angle;//zk-先验估计
PCt_0=C_0*PP[0][0];
PCt_1=C_0*PP[1][0];
E=R_angle+C_0*PCt_0;
K_0=PCt_0/E;
K_1=PCt_1/E;
t_0=PCt_0;
t_1=C_0*PP[0][1];
PP[0][0]-=K_0*t_0;//后验估计误差协方差
PP[0][1]-=K_0*t_1;
PP[1][0]-=K_1*t_0;
PP[1][1]-=K_1*t_1;
Angle+=K_0*Angle_err;//后验估计
Q_bias+=K_1*Angle_err;//后验估计
Gyro_y=Gyro-Q_bias;//输出值(后验估计)的微分=角速度
}
//*********************************************************
//倾角计算(卡尔曼融合)
//*********************************************************
voidAngle_Calcu(void)
{
//------加速度--------------------------
//范围为2g时,换算关系:
16384LSB/g
//角度较小时,x=sinx得到角度(弧度),deg=rad*180/3.14
//因为x>=sinx,故乘以1.3适当放大
Accel_x=GetData(ACCEL_XOUT_H);//读取X轴加速度
Angle_ax=(Accel_x-1100)/16384;//去除零点偏移,计算得
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 双轮 平衡 小车