当前位置:首页  <  前沿科技  <  【新奇特】智能全向移动平台——蓝牙遥控版...
【新奇特】智能全向移动平台——蓝牙遥控版
编辑:Jack-Bei 2013-12-31 浏览次数:1032

  时隔几个月,我对原来的设计智能全向移动平台V1.0版本做了个升级,新版本的智能全向移动平台,将原来的圆孔注塑算盘珠式全向轮改成了内六角孔,便于联轴器盘安装同轴,更换了高性能的、大扭矩、大功率360°金属齿轮舵机,对原有的控制平台进行更换,设计了以Freescale 自由设计平台系列Kinetis KL25Z为主控的第一款控制扩展板(兼容Arduino UN3),对整个平台的硬件和软件算法做了较大的改动,下面请听我娓娓道来。
躬行“硬”功夫
FRDM-KL25Z平台是飞思卡尔公司最新推出的一款入门级的单片机开发板,以其低成本高性能在单片机林立今天,开始显现其优势,在开始硬件设计之前还是简单的介绍一下该平台,这是基于业内首款采用 ARM® Cortex™-M0+ 处理器的 Kinetis L系列MCU,是一套体积小、功耗低、性价比高的评估和开发系统,适用于快速应用原型开发和演示。
扩展板结构总共分为4个版块,分别是电源模块、控制器、蓝牙通信模块以及电子罗盘传感器(由于电机等因素干扰,最终没有应用于设计)。电源模块作为整个供电的系统的核心,主要目的是为舵机供电和传感器供电,由于在这个版本中将原有的塑胶齿舵机改为了大扭矩的金属齿轮舵机,所以相应的消费电流也提高了,经过实际测试可知,在舵机轻载条件下,每个舵机的在5V额定电压下,其电流达370mA,由于在此选择的电池为7.4V的锂电池,所以需要降压稳压电路来实现5V电源供给舵机和其他的传感器,所以需要选择电流在1.5A以上的稳压电源,传统的LDO显然无法满足此输出功率,在此选择了DC-DC的电源芯片LM2596-5.0,电流输出能力达3A,满足我们的设计需求,电路参考其官方的Datasheet,值得注意的是选择滤波电感时必须选择功率型大电感(以前设计含MCU供电电源时,由于电感功率选取不当,还因此烧掉过几个单片机)。控制器部分其引脚以及功能完全兼容Arduino UN3(如图1),蓝牙模块选用了透明传输的蓝牙模块BC-04B,对于硬件具体原理这块并不复杂,所以不再赘述,详见(图2)。

FRDM-KL25Z引脚
    图1 FRDM-KL25Z引脚

电路原理图  

图2 电路原理图

  躬行“软”功夫
在开始敲击代码前,首先来说说开发环境吧,对于开发选用的IDE可以是IAR6.4、MDK4.54亦或是CW10.3,在这里还是沿用以前老工具IAR,其次是调试器,从一开始吸引我的眼球的是OpenSDA,他有MSD和DEBUG两种模式,当然在这是选用的调试模式,可以利用SWD接口下载调试程序,同时可以利用内置的USB转UART对单片机进行调试,其具体使用步骤可以上飞思卡尔的官网查看学习使用,所以不在本文讨论了,本设计的程序框架主要包含以下3大块,分别是单片机模块初始化、蓝牙串口编程、运动控制,下面从这3个方面为您阐述。
——单片机功能模块设置篇
单片机模块初始化,在本设计中使用了单片机的TPM(用于产生PWM,控制舵机的转速以及转向)、UART(建立于透明蓝牙模块的通信,实现蓝牙遥控)、AD(采集电源电压,实现电池电量预警)、GPIO(利用IO电平状态控制板载LED,显示运动状态)、PIT(实现周期定时),综上,对其功能参数如下列表1所示,由于是涉及一款新型号的单片机,对于各位DIY一族而言会比较陌生,在此我将所有的源码公布在我的个人网站上(www.ruilongmaker.cc),望大家下载学习使用。



表1 单片机模块设置参数要求

——蓝牙模块以及手机端的使用篇
作为一个遥控的平台,就需要在终端和下位机进行通信,在这里选用了蓝牙2.0这种通信接口,对于透明蓝牙模块的使用,想必各位电子爱好者已经很熟悉了,我选择了一个主从一体的蓝牙串口模块BC04-B(以便于适应各种条件),在实际测试调试时使用的是从机模式;对于手机端的软件,在这里向大家介绍一款在“安智市场”搜索到的较为好用的蓝牙串口BlueCommPRO4(如图3),其类似于我们在PC端调试时使用的串口小精灵亦或是串口猎人这样的工具,其默认参数是波特率9600,无校验,8位UART。
下面就实际教大家使用该软件吧,打开软件后,通过“模式切换”按键选择模式二,在模式二里面拥有12个可以自定义的按键(如图4),在这里我自定义其按键功能按键用于控制我的全向移动平台,按键的功能(如图5)所示,通过点击“设置”,选择“更多”,然后选择对“地面站”设置,进入(如图6)所示的界面,选择相应的按键定义按键的“功能名称”、“数据帧”,通过查阅软件帮助说明的定义的数据帧,可以得出该按键动作的数据帧协议如下表2所示。

蓝牙串口助手使用说明

 图3软件启动页面        图4自定义的按键        图5按键定义分划         图6按键页面设置   

表2 数据帧协议

数据帧协议

                             图7串口接收状态的转移图

      手机端通过点击“连接设备”选择对应的蓝牙模块进行连接后,当在手机端触发按键后,随即会通过蓝牙发送一帧上述协议的数据,单片机通过中断去接收该帧数据,然后解析这一帧数据,为了高效无误的解析出数据的有用信息,在此引入了基于有限状态机的帧同步方法,先看看串口接收状态的转移图(如图7)吧,该方法是将数据帧的接收过程分为若干个状态,分别是帧头1、帧头2、帧长度、功能码、校验值、帧尾。假如接收到的数据串为“...0XAA,0XA5,0X5A,0X04,0XB1,0XB5,0XAA...”,系统的初始状态为帧头1,则系统的接收状态依次为“...HEAD1,HEAD1,HEAD,LEN,DATA,CHECK,END...”,由此可见整个数据接收的同步状态,要注意一点,再接收完事一个数据帧或者在其他异常帧时需要将状态机设置为HEAD1,否则将会影响下一帧的数据接收。通过解析数据帧,得到的功能码,通过校验成功后,更新主程序中的控制码作为遥控的依据,供下述运动控制使用。

  ——运动控制篇
当我们在的手机控制端点击触控方向按键时,通过蓝牙接收到了控制的功能码,对于控制程序而言需要对控制码所对应的动作进行响应,改变每个电机输出的速度大小。由上述关系式中可以得出相应指令的速度当量值(暂设无量纲速度500)如下列表3所示(注意:在此参数条件下,1.5ms停止时的值为2250,2ms正转最大时的值为3000,1ms反转最大时的值为1500,实际速度可调整的当量范围为±0~750)。

应动作的当量速度关系表

表3 对应动作的当量速度关系表

       下面说明一下遥控控制逻辑,当智能全向移动平台上电后,默认是处于“停止”状态(即关闭PWM输出),所以只有触控点击“开始\停止”按键,让其进入遥控受控状态后,那些运动操作才能起到作用,在此需要设置一个操控的标志位start_flag,上电默认状态为start_flag=0,当进入遥控受控状态后,更改状态为start_flag=1,随后可以根据对应的控制码,使4个电机输出如上表3的速度当量值,具体控制代码如下文所示。

 代码演示

  结束语
通过努力,终于智能全向移动平台可以掌控在我的手中,灵活自如在地上的运动了,当然由于考虑不周,设计初期的电子罗盘由于电机的干扰,想要用它来实现姿态检测的愿望成为明日黄花,同时由于360°舵机的控制精度的原因,平台的控制精度也有待提高,推动我来制作更加高性能的下一版的智能全向移动平台。
 

本文已刊登在《无线电》杂志2013年12月刊