首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于安芯一号SLH89F5162的蓝牙控制小车

基于安芯一号SLH89F5162的蓝牙控制小车

一、设计设计背景及概述  1.1 设计背景
  基于红外或射频的遥控车技术已经相当成熟,但蓝牙遥控车这一领域尚属新鲜,这款增强51核的“三防”8位单片机,以其高性能及易于开发让我很是欣喜,再加上能够磨练自己的嵌入式编程的能力,锻炼和队友共同完成项目的团队合作能力,我们便自然而然地产生了亲手制作一款蓝牙遥控车的想法。
  1.2 设计概述


  主控芯片为深联华SLH89F5162,开发环境为Keil 4;测距方式为超声波回声测距,使用模块HC-SR04完成;通讯方式为蓝牙2.0,车体使用HC-05蓝牙串口模块,PC使用自带蓝牙适配器;总电源使用2节3500mAh/3.7V的UltraFire锂离子充电电池串联供电;MCU电源则由LM7805稳压芯片对7.4V总电源进行处理后供给;车体驱动电机使用2个减速比为1:48的6~9V直流有刷电机,驱动使用TOSHIBA-ULN2003APG芯片;测温模块使用单总线架构的DALLAS/18B20芯片;上位机操作系统为Windows 7,界面采用MFC编写,IDE为VC6。
  二、项目设计原理
  2.1原理概述
  上位机程序使用蓝牙与车体进行通信,发送指令,车体接收到指令后执行相应的操作。本设计中,小车可以实现直行、转弯、加速和减速等四个动作,同时会采集所在区域的温度信息返回上位机,配合以车体上的超声波模块,可对小车正前方进行测距,如发现距离过近,则会自动停止,并向上位机请求转弯指令。上位机软件在发送指令的同时,还接收小车返回的移动信息,在软件绘图区域绘制小车行走的轨迹,并显示温度等信息。
  2.2硬件设计原理


  红色为电源线,黑色为地线,蓝色为MCU与外部设备的连接线。主要需要进一步说明的模块有DC/DC的7805芯片、测温模块18B20、驱动芯片ULN2003APG、超声波模块HC-SR04及蓝牙串口模块HC-05。

  2.3 各模块介绍
  2.3.1 稳压模块LM7805


  78XX系列的后两位即是其可固定产生的7805 系列为 3 端正稳压电路,TO-220 封装,能提供固定的输出电压5V,应用范围广。内含过流、过热和过载保护电路。带散热片时,输出电流可达 1A。虽然是固定稳压电路,但使用外接元件,可获得不同的电压和电流。电压。



  输入端IN为2节3.7V锂离子电池串联产生的7~8V的输入电压,输出端OUT接C1电解电容滤波稳压,并接绿色LED1和限流电阻R1显示供电状态。
  VCC端正接二极管D0防反接,同时并接C0电解电容稳压滤波。



  2.3.2 测温模块DS18B20


  DS18B20 数字温度计提供9 位温度读数,指示器件的温度信息经过单线接口送入DS18B20 或从DS18B20 送出。因此从中央处理器到DS18B20 仅需连接一条线(和地)读写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。DALLAS公司的18B20产品有多种封装,本设计采用的是上图左侧的TO-92封装。
  由于DS18B20只有3条线,数据线选择了没有特殊功能的P4.1引脚。18B20采用了独特的单总线通信架构,所以其对于时序的要求非常高,下面主要讲一讲18B20的复位、写入一位和读取一位,写字节及读字节只是写一位及读一位的重复,本文就不再赘述。
  2.3.2.1 复位时序


  复位需要MCU将总线拉低,保持至少480 us后,再将总线拉高15~60 us,随后等待最长240 us,检测总线上18B20是否将总线拉低(存在)。复位是18B20最重要的操作,每次通信之前必须进行复位。


  2.3.2.2 写一位时序
  在写数据时间隙的前 15 us总线需要是被MCU拉置低电平,而后则将是18B20对总线数据的采样时间,采样时间在 15~60 us,采样时间内如果MCU将总线拉高则表示写“1”,如果MCU将总线拉低则表示写“0”。每一位的发送都应该有一个至少 15 us 的低电平起始位,随后的数据“0”或“1”应该在45 us 内完成。整个位的发送时间应该保持在 60~120 us,否则不能保证通信的正常。


  2.3.2.3 读一位时序
  读时间隙时控制时的采样时间应该更加的精确才行,读时间隙时也是必须先由MCU产生至少1 us的低电平,表示读时间的起始。随后在总线被释放后的15 us 中 18B20 会发送内部数据位,这时MCU如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的读取之前都由控制器加一个起始信号。
  注意:如图8所示,必须在读间隙开始的 15 us 内读取数据位才可以保证通信的正确。
  2.3.2.4 字节读写说明


  从图9代码中的左右移可以看出,18B20在通信时,以 8 位“0”或“1”为一个字节,字节的读或写是从高位开始的,即 Bit7到 Bit0 图9 DS18B20 读写字节C代码实现。

  2.3.3 电机驱动模块ULN2003APG


  ULN2003是高耐压、大电流七路达林顿驱动器阵列,是集电极开路(OC)输出的反向器。单个引脚最大驱动电流可以达到500mA。通常应用时是把负载的一端接到电源上,另一端接到输出引脚(10~16)上,这样当输入端为高电平时,输出端就反转为低电平,导通负载。


  由于安芯一号自带的PWM0,PWM1为P4.6和P2.7,故ULN2003的2个输入口选择了P4.6和P2.7,输出端则分别连接到2个直流电机的一端。此处之所以使用2个输入端组成1组输入,是为了增加ULN2003的带负载能力,将2个达林顿管并联使用,从而实现了1A的最大驱动电流,驱动低压直流电机绰绰有余。

  2.3.4 超声波模块HC-SR04


  HC-SR04超声波测距模块可提供2~400 cm的非接触式距离感测功能,测距精度达到3 mm;模块包括超声波发射器、接收器与控制电路。
  基本工作原理:
  1. 采用IO口TRIG触发测距,给至少10 us高电平信号;
  2. 模块自动发送8个40khz的方波,同时检测有无信号返回;
  3. 若有信号返回,则IO口ECHO会输出一段持续时间和超声波来回时间相同的高电平。


  根据上述工作原理,可以得到测试距离D=(高电平时间×声速)/2。
  经过测试,回响电平一般会在触发信号发出后几十us内产生,此时建议使用定时器进行检测,如果使用while循环等待高电平,如果高电平不能正常产生,程序会卡死在while语句上。

  2.3.5 蓝牙串口模块HC-05



  HC-05是一款高性能的主从一体蓝牙串口模块,可以同各种带蓝牙功能的电脑、蓝牙主机、手机、PDA等智能终端匹配,该模块支持非常宽的波特率范围:4800~1382400,并兼容5V或3.3V单片机系统,可以方便的与产品进行连接。
  由于该模块是串口转蓝牙模块,所以需要使用MCU的一个串口资源,本设计使用了5162的串口1。使用时,只需要将HC-05当作一条串口线即可,非常方便。

  2.4软件设计原理(MCU)
  系统上电后开启蓝牙配对模式,可供上位机进行连接(打开串口)。一旦上位机连接成功并发送开始信号,整机开始全速运行,根据上位机的指令进行移动,并发送温度信号给上位机,当车体前方出现障碍物时,车体会自动停止,并向上位机发送转弯提示,当上位机发出停止信号时,车体返回一开始的等待状态,直到下一次开始信号到来。


  图16 总体流程图


  2.5 软件设计原理(上位机)


  图17 上位机框图


 


  图18 上位机实际界面



  2.5.1 MFC使用控件介绍
  2.5.1.1 串口连接:


 图19 图20


  图19所示为上位机中的串口连接部分,串口选择范围为COM1~~~COM20下拉框如图20所示。
  
  关联函数: 作用:选择串口,初始化串口,设置波特率
  
  关联函数: 作用:关闭串口,将距离、温度、状态数据清除
  2.5.1.2 数据显示:


  图21


  图21所示为上位机的数据显示部分,“前”为小车距离前方最近障碍物的距离,最大显示为255cm;“温度”为小车所处位置的实际温度;“状态”为小车当前的行进状态,分为“向前”,“左转中”,“右转中”三种状态。
  共用体表示温度:在共用体中,不同的变量占用同一段内存。我们可以使用共用体的这个特质来表示温度。在串口接收的数据中,表示温度的数据被分为4个字符型数据,此时我们定义一个共用体tem在处理函数中。


  将接收到的四个字符数据依次放入是s[0]至s[3]中,此时,共用体中的浮点数t表示的就是这四个字节所对应的温度数据。
  2.5.1.3 指令按钮:


 图22


  图22所示为上位机对小车发送指令和清除上位机上数据的按钮模块,共分为六个按钮,分别为“前进”、“加速”、“减速”、“左转”、“右转”和“清除”。
  “前进”:发送“GOAHEAD”指令;
  “加速”:发送“ACCEL”指令;
  “减速”:发送“SLOWD”指令;
  “左转”:发送“GOLEFT”指令;
  “右转”:发送“GORIGHT”指令;
  “清除”:清除当前显示的距离、温度、状态数据以及小车行驶轨迹,将画图界面上的小车重新定位至起点。
  2.5.1.4 画图控件:


  图23


  图23所示为上位机界面中的画图模块。
  画图模块的基本框架是调用VC++中的画图控件,背景色为白色;方块表示小车;红色箭头所处位置表示车头,蓝色圆圈表示小车行驶轨迹。
  1.小车由最初位置开始前进,此时小车行驶轨迹如图24所示。


  图24


  2.小车前方遇到障碍物,小车右转前进,此时小车行驶轨迹如图25所示。


  图25


  小车右转前进一段距离,前方探测到无障碍物,小车左转回到原先的前进方向,此时小车行驶轨迹如图26所示。


  图26


  从这几个状态看出,上位机界面可以很好的反映出小车在地面上所行驶的轨迹。
  画图同步问题:在绘制小车行驶轨迹时最大的问题,是上位机上小车行驶轨迹与小车在地面上的行驶轨迹同步变化,且不受界面窗口最小化的影响。
  要解决这一问题,就需要定义两个设备上下文。在此项目的MFC程序中,我们定义了两个设备上下文,CDC* pDC;//屏幕DC,CDC MemDC;//内存DC同时定义CBitmap bmp;//位图全局缓存,我们通过全局缓存bmp将屏幕DC和内存DC关联起来。
  在上位机运行过程中,我们先将小车的轨迹变化画入内存DC,然后在MFC程序的画图函数中,再将内存DC画入屏幕DC。经过这样的处理上位机上小车的轨迹变化就可与地面上的变化同步,且不受窗口最小化的影响。

  三、项目设计框图
  3.1硬件设计框图


  3.2软件设计框图


  四、测试结果
  小车基本实现了和上位机之间的蓝牙通信,可以依据上位机发出的指令作出相应的动作,如直行、左右转弯、加减速等,并能够检测前方障碍物以及采集温度。


  PCB实物图



  实物图


  上位机数据采集

返回列表