logo资料库

两轮自平衡小车的设计与实现.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
ISSN1672 - 4305 CN12 - 1352 / N 实 验 室 科 学 第 LABORATORY SCIENCE 两轮自平衡小车的设计与实现 王良成,杨志民,胡聪聪,桂艺纹,荣 蒙 ( 三亚学院 理工学院,海南 三亚 572000) 期 卷 第 15 Vol. 15 No. 6 6 月 年 2012 12 Dec. 2012 单片机为核心控制器,配合陀螺仪 摘 要: 两轮自平衡小车被各种竞赛所喜爱,在很多大型比赛中都有涉及此方向的题目 尔系列 XS128 衡小车的结构 关键词: 两轮自平衡小车; 控制算法; 单片机; 中图分类号: TP39; G642. 44 文献标识码: A 控制算法,通过反复调试最终实现了小车的自平衡 角度传感器实现两轮小车的自平衡 doi: 10. 3969 / j. issn. 1672 - 4305. 2012. 06. 017 平衡原理 XS128 、 。 。 、 、 阐述了基于飞思卡 。 着重介绍了两轮自平 Two - wheel self - balancing car design and implementation WANG Liang - cheng YANG Zhi - min HU Cong - cong GUI Yi - wen Polytechnic Institute Sanya University Sanya 572000 China , , ) , , , , ( , RONG Meng : Abstract The self - balanced two - wheel car is popular in various competitions , and this event oc- cured in many large games. Based on the Freescal Semiconductor XS128 series single - chip micro- computer seted as the core controller together with the gyroscope and angle sensor we achieved two - , wheel car self balance. This paper highlights the self - balanced two - wheel structure balance princi- , , , : ple control algorithm and the car self - balanced through repeated testing. Key words two - wheel self - balancing car control algorithm single chip microcomputer ; ; ; XS128 ] 1 “ ( ” 独立驱动 、 Dynamic Stabilization 两轮自平衡小车两轮共轴 车身中心 、 位于车轮轴上方,通过运动保持平衡,可不借助外力 直立行走[ 其自动平衡运作原理主要是建立在 。 ) 的基 一种被称为 动态稳定 本原理之上,也就是车辆本身的自动平衡能力 以 。 内置的精密固态陀螺仪( ) 、 角速度传感器来判断车身所处的姿势状态,透过精 密且高速的中央微处理器计算出适当的指令后,驱 动马达来做到自平衡的效果[ 本文介绍了两轮 自平衡小车的结构 硬件设计及软件 、 设计方法 。 动态平衡原理 、 Solid - State Gyroscopes ] 2 。 1 自平衡小车结构 两轮自平衡小车主要由机械系统和控制系统组 车身上支 下平台和连接杆等,负责支撑硬件电路,搭建工 、 核 、 成,机械系统包括两个独立驱动的车轮 架 作平台; 控制系统包括直流电机 电机驱动电路 、 、 基金项目: 三 亚 学 院 教 学 改 革 项 目 ( 项 目 编 号: ) 。 JG03 2011 - 心控制器 各种传感器和电源等[ 、 ] 3 。 。 自平衡车车身结构对控制系统算法设计有很大 影响,如车轮尺寸的选择 车身高度设计和重心位置 、 只有在结构上保证了车身的构造合理,才能减 等 少控制系统由于车本身结构设计缺陷而造成的控制 算法复杂化,甚至导致小车难以实现自平衡[ 结 构框图如图 所示 。 ] 4 1 。 自平衡小车由陀螺仪 心控制器( 驱动电路下方) 电源 、 车身 驱动电路 核 、 、 、 车轮等关键部分组成 、 。 2 2 自平衡小车动态平衡原理 自平衡小车动态平衡原理如图 所示,安装于 车身的陀螺仪( 陀螺仪的输出值是相对灵敏轴的角 速率,角速率对时间积分即可得到周围灵敏轴旋转 过的角度值) 和加速度传感器实时采集数据[ ],并 传送至主控制器 主控制器进行卡尔曼滤波和平衡 算法处理,得出姿态调整所需的车轮加速度值,换算 为电机的控制量,通过串口发送到舵机控制器,控制 安装于车 两路由舵机驱动的伺服电机做姿态调整 轮的编码器得到实际速度和运行距离,反馈回主控 。 。 5
王良成,等: 两轮自平衡小车的设计与实现 35 74LS244 离芯片 的目的是为了将核心控制器与电机 驱动芯片进行隔离,防止电机启动时影响其正常工 作( 使单片机复位) ; 电机驱动芯片则是通过核心控 制单片机产生的 信号进行控制电机的转向和 转速; 开关电源芯片 电源电压稳压 ,为核心控制单片机以及其他芯片提供工 输出在 作电源,电机驱动电路如图 LM2596 所示 7. 2V PWM 5V 将 3 。 图 1 自平衡小车结构框图 4 自平衡小车软件设计 。 电机控制程序 、 序 和中断响应程序等程序段组成 为了各个传感器信号的采集,通过 行处理输出 持自平衡小车的姿态平衡 可靠性,系统还 增 加 了 软 件 看 门 狗[ 系列增强型 两轮自平衡小车的软件部分主要由初始化程 卡尔曼滤波程序 控制算法程序 、 、 它们的主要功能是 对信号进 信号,控制电机进行相应转动,保 为了进一步提高软件的 是 。XS128 为单片机, 等常 因此,可以极大简化程序编写难度,关键程 SPI、SCI、AD、PWM 公司推出的 XS128 PWM 16 。 ] 7 S12 Freescle 片内资源丰富,接口模块有 见模块 。 序段如下 。 4. 1 初始化 #include < math. h > #define uint unsigned int #define uchar unsigned char #define Acceler ATD0DR0 / / float Angle_mid float Adjust_up1 ; , Angle_last , Adjust_up2 ; 角度 AD 转换数据 / / 角度调整中值 姿态传感器输出整定 / / 图 2 自平衡小车动态平衡原理 值 。 PID 制器,经由 发送到舵机控制器,形成一个闭环反馈 。 不断进行调整便可以维持小车的平衡[ ] 6 算法进行误差调整后再次将控制量 整个系统 2a 当小车处于瞬时平衡状态时,两个电机处于相 对静止状态,保持小车直立( 图 ) ; 当出现扰动导 致小车倾倒( 以后仰为例) ,此时车轮行进方向为向 前,角加速度方向向后,小车失去平衡( 图 ) ; 陀螺 仪检测到这个变化配合角度传感器发送纠偏信号给 核心控制器,核心控制器根据纠偏信号的极性控制 电机转向,车轮向后转动来纠正后仰 2b 。 3 自平衡小车硬件设计 两轮平衡小车硬件设计主要是驱动电路的设 电机驱动 电 机 驱 动 芯 片 其中,隔 计,驱动电路质量将直接影响控制效果 电路 主 要 由 隔 离 芯 片 开关电源芯片 74LS244、 等组成 。 LM2596 。 BTN7971、 static float q_bias = 0 , , ; K_1 t_0 t_1 , angle_err , PCt_0 , PCt_1 , E , K_0 , void Kalman_Filter ( float angle _ m , float gyro _ m ) / / gyro _ uint PWM_Duty1 uint Speed_L uchar PIT_isr_flg = 0 , PWM_Duty2 ; , Speed , Speed_R , , j = 0 i ; ; / / PWM 占空比输出 4. 2 卡尔曼滤波 , static float angle angle_dot ; / / static const float Q_angle = 0. 001 , dt = 0. 005 / / ; 注意: 的取值为 dt kalman R_an- 滤波器采 外部需要引用的变量 , Q_gyro = 0. 003 , gle = 0. 5 样时间; = ][ [ ] 2 2 static float P { { { } ; } , } , 0 , 1 1 0 static float Pdot [ ] 4 { 0 = static const char C_0 = 1 , 0 , 0 } ; , 0 ;
45 : m gyro_measure { = Q_angle - P ]; ]; [ ][ 1 1 [ ][ 1 1 ; Pdot Pdot Pdot = - P = - P angle + = [ ] 0 [ ] 1 [ ] 2 ] [ Pdot 3 = Q_gyro ][ [ ] 0 0 P ][ [ ] P 0 1 ][ [ ] 0 1 P ][ [ ] P 1 1 + = Pdot + = Pdot + = Pdot + = Pdot [ ] 0 [ ] 1 [ ] 2 [ ] 3 * dt * dt ; ; ; ; * dt ; * dt angle_err = angle_m - angle PCt_0 = C_0 * P PCt_1 = C_0 * P [ ][ 0 0 ][ [ 1 0 ]; ]; E = R_angle + C_0 * PCt_0 ; ; K_0 = PCt_0 / E K_1 = PCt_1 / E t_0 = PCt_0 ; ][ [ 0 1 ]; t_1 = C_0 * P [ ][ ] 0 0 P ][ [ ] 1 0 P ][ [ ] 0 1 P ][ [ ] P 1 1 - = K_0 * t_0 - = K_0 * t_1 - = K_1 * t_0 - = K_1 * t_1 angle + = K_0 * angle_err q_bias + = K_1 * angle_err angle_dot = gyro_m - q_bias } ; ; ; ; ; ; ; 图 3 电机驱动电路 4. 3 电机控制 ( ) * dt gyro_m - q_bias ][ [ ] 0 1 ; ][ [ 1 0 ]; - P 平衡小车车轮电机的控制采用 芯片 调制控制,控制信号通过 后直接控制电机速度和正反转[ PWM ] 8 。 PWM 脉冲宽度 放大 BTN7971B ; { up1 - PWM_Duty1 = 0x06 + ( ) ; int Speed_last ( ) int Adjust _up2 + ( ) int Adjust _ void PWM_calculate { Adjust_up1 = angle_dot* 0. 02 ; ( ) void Adjust_up2 = angle* 20 ( if ( angle > 0 / / ) ) angle_dot > 0 if ; 加速度向前 { { PWM_Duty1 = 0 - ( ; ) Speed_last int 0x06 - PWM_Duty2 = 0x00 ( if angle_dot < = 0 ) ( ) int Adjust_up1 + ( ) int Adjust_up2 + ; } PWM_Duty2 = 0x00 } ; } ( ) angle < 0 if ( else { { if angle_dot < = 0 PWM_Duty1 = 0x00 / /加速度向后 ) ; ( PWM_Duty2 = ; } Speed_last ) int ( - ) ) ( if { angle_dot > 0 PWM_Duty1 = 0x00 ; Adjust_up2 + 0x06 - } int Adjust_up1 - ( ) int Adjust_up2 + 0x06 ( ) int Adjust_up1 - ( PWM_Duty2 = 0 - ; } ( ) Speed_last int ) int
王良成,等: 两轮自平衡小车的设计与实现 55 } 4. 4 控制算法 ] 9 。 MCU 波占空比[ 控制算法的编写是平衡控制的核心问题,也是 最难解决的问题,涉及角度融合和电机控制两个部 角度融合用于求出陀螺仪和加速度计的互补角 分 度值; 电机控制需要根据 算出的角度值控制 具体控制算法编写原理是: 首 PWM 先,读取加速度传感器和陀螺仪的值,然后将其作卡 尔曼融合,得到当前小车的姿态 算法 与设定姿态量比较,产生信号控制电机,核心控制单 次的姿态反复调整,就能够达到比较 片机每秒 完美的动态平衡[ ) 控制算法程序如下: 再使用 PID 300 。 。 。 ] 10 ( void main { void 锁相环初始化 输出初始化 / / PWM 定时器初始化 ( PLL_Init PWM_Init ) ; 60 ( ) ; / / PIT_Init / / ( ) ; ( ) ; AD_Init / / AD ; 初始化 开总中断 EnableInterrupts / / ( ) 1 while { ( if { ; 0015 角度计算 / / ) ; ue } ANGLE_value = asin ( ANGLE_value ) ( ) ; * 57. 3 / / float ANGLE_speed_ ANGLE_speed_value = ; value_mid* 0. 36 角速度单位换算 ( Kalman_ Filter 卡尔曼滤波 / / ANGLE _ value , ANGLE _ speed _ val- 5 结语 给出了关键程序段,所有程序都经调试 本文论述了两轮自平衡小车的设计全过程 对 结构,软件设计及硬件设计部分做了详 其平衡原理 、 试 细介绍 、 运行,经实践证明硬件设计及软件设计正确合理 。 通过程序反复修改,硬件持续改进,最终实现了自平 衡,平衡效果较好 。 。 。 参考文献( References) : [ ] 张伟民,段晓明,赵艳花 1 理论与应用, 4 [ ] 梁文宇,周惠兴,曹荣敏 2 2011 ( , 30 . ) : ] [ J . 控制工程, 2010 ( S2 ] 两轮自平衡小车控制研究[ J . 控制 10 - 13. 双轮载人自平衡控制系统研究综述 . ) : ] 平衡车机电控制系统建模与仿真[ J . 139 - 144 , 190. PIT_isr_flg = = 1 ) ] 孙军,万明伦,吕博,等 [ . 3 ) : 机械与电子, ( 2010 10 34 - 37. ( ) ; 计算 / / pwm , PWM _ Duty1 PWM _ Duty2 PWM_calculate ( PWM _ value } pwm } } 4. 5 PIT 中断响应 #pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt VectorNumber_Vpit0 void PIT_ISR { ( ) void PITTF_PTF0 = 1 ; while ATD0STAT2L_CCF0 Acceler_value = Acceler / / ) ; 角度提取 ; ) ; ( ! ( ! while ATD0STAT2L_CCF1 Gyro_value = Gyro / / ; 角速度提取 度纠正 / / ANGLE_value_mid = Acceler_value - 0x04e0 ; 角 / / ANGLE_speed_value_mid = Gyro_value - 0x0424 角速度纠正 ; ANGLE _ value = ( ) float ANGLE _ value _ mid * 0. ) ; / / [ ] 魏延辉,刘胜,高延滨,等 4 . 基于两轮自平衡机器人组合定位方 ] 法的研究[ J . 机械与电子, 2010 ( ) : 10 58 - 63. [ ] 张吉昌,程凯,郑荣儿 5 . 单轴双轮自平衡车姿态监测方案设计 ] [ J . 中国海洋大学学报, 2009 ( ) : 9 467 - 470. [ ] 张志强 6 . ) : ( 19 13 基于 STM32 ] 的双轮平衡车[ J . 电子设计工程, 2011 , 103 - 106. ] 薛伦生,舒涛,戴新生 [ 7 电子测量技术, ] [ J . [ ] 杨继志,郭敬 8 基于 基于单片机控制的小车平衡系统设计 . ( , 32 2009 ) : 85 - 87. 5 两轮自平衡小车控制系统设计 . MMA7260 机电产品开发与创新, ] [ J . ( , 24 3 ) : 144 - 145. 2011 ] 蒋纬洋,邓迟,肖晓萍 [ . 9 , 31 电子测量技术, 2012 两轮自平衡车系统制作研究[ ] J . ( ) : 6 76 - 79. 国外 [ ] 秦剑 10 ] 两轮自平衡车的制作[ J . . 电子制作, 2011 ( ) : 1 9 - 11. 收稿日期: 2012 - 09 - 03 修改日期: 2012 - 09 - 27 作者简介: 王良成( 1982 - ) ,男,吉林舒兰人,学士,实验师, 实践教学及实验室 、 主要研究方向为电子类实验 管理 。
分享到:
收藏