基于STM32的重力感应无线智能遥控小车设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于STM32的重力感应无线智能遥控小车设计
作者:李志瑞申庆超
来源:《物联网技术》2017年第10期
摘要:针对传统智能小车遥控端是物理按键或触摸屏按键控制的缺点,文中基于STM32设计了一款重力感应无线智能遥控小车,该系统由手持遥控端与智能小车组成。其中手持遥控端利用倾角传感器ADXL345检测倾角信息,经卡尔曼滤波之后,送入STM32进行处理并转换为相应指令,通过nRF24L01模块无线发送给智能小车,由STM32F103C8Tx控制电机驱动模块L298N驱动小车前进、后退、左转、右转等。文中设计的重力感应无线智能遥控小车引入卡尔曼滤波实现精确控制,具有简单、直观、方便、易操作等特点,应用前景广泛。
关键词:STM32控制器;无线;重力感应;倾角
中图分类号:TP39;TN92.5 文献标识码:A 文章编号:2095-1302(2017)10-00-03
0 引言
随着社会进步,电子消费产品的需求越来越高,遥控智能车辆以及在智能化车辆基础上开发出来的产品已广泛应用到自动化物流运输等领域。目前,遥控智能车辆大多采用无线传输方式,而无线传输逐渐取代有线传输不仅是因为“无线”,更因为在安装、增减节点方面都比有线方式方便、快捷,因此得到了广泛的应用[1]。
本设计首先采集手持遥控端的倾角信息并进行处理、生成指令,然后无线发送给智能小车,赋予智能小车更灵活的运动状态和更宽广的运动范围。设计灵活,操作方便,控制稳定,制作成本低,可应用于视线可观察但人体涉及不到的区域,可制作成高端智能玩具,或应用于工业控制,与实际相结合,有良好的现实意义和市场经济价值[2]。
1 系统硬件电路设计
采用整体设计的方法进行设计,系统硬件主要由两大部分构成[3],即以NUCLEO-L053为控制核心的手持遥控端和以STM32F103C8Tx为控制核心的智能小车。手持遥控端是以
ADXL345、OLED12864与nRF24L01为基础的检测倾角装置,显示参数装置和无线发射装置。采用的MCU为STM32L053R8T6,由ADXL345不断检测手持设备的姿态,在OLED上显示倾角值,传给MCU。MCU把处理好的数据转为小车动作指令,最后通过nRF24L01模块发射给小车。小车以nRF24L01和L298N为基础,采用的MCU为STM32F103C8Tx,通过nRF24L01模块接收遥控设备发送的数据包,然后把数据包传给MCU进行处理,MCU把处理好的数据包转换为相应指令,由STM32两路定时器通道产生两路PWM波控制电机驱动
L298N,从而实现对小车运动状态的调整。并结合NUCLEO-L053板载独立按键对ADXL345校准和OLED再次初始化,从而增强产品的可靠性、稳定性、功能性优势。
1.1 手持遥控端电路设计
按照模块化设计思想[4],手持遥控端主要由倾角传感器模块ADXL345、遥控端控制模块NUCLEO-L053、无线收发模块 nRF24L01、液晶显示模块OLED12864、电源模块等构成。倾角传感器模块ADXL345主要用于检测手持遥控端的倾角状态,并将倾角信息传给遥控端控制模块NUCLEO-L053进行处理,生成指令通过无线收发模块nRF24L01发送给智能小车。液晶显示模块OLED12864进行角度、加速度等信息显示,电源模块给各功能模块供电,保证这些模块可正常工作。本设计引入卡尔曼滤波算法[5]对手持遥控端的状态角度进行优化,能够有效减少输出信号的毛刺波动,避免小车运行过程中频繁出现卡顿现象,从而让小车的行驶更平滑。手持遥控端设计框图如图1所示。
倾角传感器模块使用ADI公司生产的基于iMEMS技术的3轴、数字输出倾角传感器ADXL345[6]。该模块具有标准的I2C或SPI数字接口及高分辨率等特征,自带32级FIFO存储,是目前广泛使用的数字倾角传感器。倾角传感器产生经过内部AD转换电路后输出的数字信号,计算导出加速度信息。在具体工作时,倾角传感器会因微小振动产生噪声,此时需要卡尔曼滤波与加速度计相互作用,调整参数将误差降到最小。
卡尔曼滤波(Kalman Filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。在本设计中,主要对角度信息进行最优估计,分为如下4步:
(1)根据k-1时刻的最优角度值及偏差预估k时刻的角度值(估计值);
(2)根据k-1时刻的最优角度值偏差与k时刻的估计值偏差得到k时刻估计值的高斯白噪声;
(3)根据k时刻测量值与估计值的协方差判定权重大小,得到最优角度值;
(4)根据k时刻的最优角度值及偏差预估k+1时刻的角度值(估计值)。通过循环迭代就可以得到最优的状态角度估计值。
NUCLEO-L053为ST推出的一种基于Cortex-M0+内核的遥控端控制模块[7],其CPU最高系统时钟可达32 MHz,可充分满足本设计所用的模块时钟频率;内含 64 KB Flash和8 KB RAM,可提供足够大的堆栈空间,满足复杂程序;具有本设计所需的I2C、SPI、USB 全速接口,提供MCU和模块间高速的通信方式;板载独立按键和LED,可供用户自定义使用。
无线收发模块nRF24L01[8]工作在2.4 G的全球开放免许可ISM频段,GFSK调制,工作速率高达2 Mb/s且抗干扰能力强,拥有多达125个可选频道,可以满足多点通信和调频通信
的需求。采用SPI方式进行手持遥控端无线收发模块nRF24L01与控制模块NUCLEO-L053之间的连接。ADXL345与控制模块的连接如图2所示。
1.2 智能小车电路设计
智能小车主要由无线收发模块nRF24L01,小车控制模块STM32F103C8Tx,电机驱动模块L298N,电源模块等组成。无线收发模块接收手持遥控端发出的控制指令,传送给小车控制模块进行处理,由STM32F103C8Tx的定时器4产生对应的两路PWM波,调节L298N驱动两台直流电机完成对应动作。智能小车的设计框图如图3所示。
STM32F103C8Tx是目前应用非常广泛的一款ARM芯片,采用Cortex-M3内核,拥有16 KB~1 MB Flash存储,高达72 MHz的CPU运行速率,多种控制外设,USB全速接口和CAN 等。在本设计中用来处理nRF24L01接收的数据包、控制L298N电机驱动模块等。
电机驱动使用L298N驱动两台直流电机[9]。此款芯片具有工作电压高,输出电流大等特点,额定功率为25 W。本设计电机驱动使用6节AA电池,输入电压为9.5 V,可直接驱动两台电机。通过引脚A,B输入定时器4产生的两路PWM信号对电机进行调速控制。L298N模块驱动电路如图4所示。
为保证小车的运行速度,无需进行调速,全速行驶,加在L298N驱动上的电压为6~12 V,而STM32需要的最大电压为3.3 V,为了节省资源,减少电源模块,需要降压。选用AMS1117芯片降压 [10]。电源模块降压电路如图5所示。
2 系统软件设计
本系统软件程序设计由两大部分组成,即手持遥控端软件程序和智能小车软件程序。手持遥控端软件程序首先上电进行初始化,主要是ADXL345模块初始化,然后系统正常工作。ADXL345模块不断检测倾斜角度的改变,控制模块对倾角传感器姿态数据进行处理,将加速度数据转换成倾角角度,并进行卡尔曼滤波,判断倾斜角度是否超出阈值,若超过则发送小车运动指令。智能小车软件程序接收手持遥控端的指令进行处理之后驱动小车,接收端对接收到的指令进行判断,控制小车作出前进、后退、转弯等动作。软件程序流程如图6所示。
完成软硬件设计之后就开始对本设计进行系统整体测试工作。通过改变手持遥控端的倾角信息,可以在OLED上正常显示传感器姿态信息,无线收发装置可以正常收发指令,控制智能小车的前进、后退、左转、右转等运动状态。手持遥控端和智能小车的实物图如图7所示。
3 结语
本文应用倾角信息采集模块与无线数据传输模块设计了一种重力感应无线智能遥控小车,并重点介绍了手持遥控端与智能小车的硬件电路与软件程序设计。手持遥控端采集倾角信息,经卡尔曼滤波处理,控制模块发出指令,通过无线方式控制智能小车完成相应动作。经测试,