《电子技术应用》
您所在的位置:首页 > 模拟设计 > 其他 > 教学:如何通过IIC或者485总线实现多个超声波级联

教学:如何通过IIC或者485总线实现多个超声波级联

2022-09-29
来源:古月居

  读取多超声波传感器

  该模块是一个开源模块,并提供了配套的ROS节点,接收串口上传的数据并发布到指定的Topic上面。

  目前支持 HC-SR04 、HY-SRF05和US-015这几个型号超声波模块。主要功能如下:

  同时读取12个超声波模块数据,通过串口打包上传,频率为20Hz。

  提供配套ROS节点程序,可将测量数据发布到ROS Topic上。

  开源ROS节点程序[3],并提供单片机端hex文件下载,使用其他单片机开发板也可以轻易使用。

  背景

  在制作智能小车、自主导航小车的过程中我们通常会使用超声波来弥补小车的测量盲区,或者直接设计基于超声波的避障小车。

  这其中都涉及到多个超声波模块的读取。一方面我们可以选取市面上已有的串行超声波模块通过IIC或者485总线实现多个超声波级联。

  但是如下面表格1所示,市面上级联的超声波模块最便宜的也需要100元一个,这样12个成本约为1200元。如果使用其他模块则更贵。

  另一方面超声波在读取的时候需要频繁调用定时器中断函数测量回波电平的宽度实现距离的测量。

  而这个过程会占用大量的cpu资源,因此我们将这部分功能独立出来为一个模块,单独使用一个单片机去读取超声波模块的数据并通过串口转发出去。

 

6326df38-3a03-11ed-9e49-dac502259ad0.png

  使用教程

  2.1 接线说明

  如下图所示,使用模块时需连接超声波模块

  P1-P12 为超声波连接1-12通道

  电源输入电压为直流5-12V DC-DC圆孔2.5mm

  绿色灯为电源指示灯

  红色灯闪烁频率大约为20Hz 表示正常测量过程

114.JPG

  SWD下载接口线序如下图所示

113.JPG

  超声波接线说明:目前支持 HC-SR04 超声波模块

112.JPG

  HC-SR04模块接线如下图所示:

  - 红色--VCC

  - 黑色--GND

  - 黄色--Trig

  - 绿色--Echo

  

111.JPG

  板子安装孔位置和外形尺寸如下:

110.JPG

  2.2 上传协议

  数据格式为:帧头+数据长度+命令类型+数据+校验+帧尾。数据上传频率为20Hz,波特率使用115200。

109.JPG

  帧头:固定为两个字节:0xAE, 0xEE

  数据长度:为所有字节的和(包含了帧头和帧尾)

  命令类型:固定为:0xA1

  数据位:包含12个通道的超声波测量值,每个通道占用2个字节,共计24字节,采用高位在前方式(大端数据模式)发送,测量数据的单位为mm。即为:[CH1_HSB CH1_LSB … CH12_HSB CH12_LSB]

  校验位:所有数据位的加和取低八位(包括帧头和帧尾)

  帧尾:固定为两个字节 0xEF,0xFE

  ROS节点使用

  3.1 下载与配置

  安装依赖项

  sudo apt-get install ros-melodic-rosserialcd catkin_ws/srcgit clone https://github.com/RuPingCen/ultrasonic-ros.git

  2.编译代码

  cd catkin_make

  3.启动ROS节点

  roslaunch ultrasonic_ros ultrasonic_ros.launch

  启动节点以后可以看到终端打印输出的数据

  

116.JPG

  4.使用 echo 命令打印查看超声波的数据

  rostopic echo /ultrasonic/data

117.JPG

  5.使用 hz 命令查看话题发布的频率

  rostopic hz /ultrasonic/data

  

118.JPG

  3.3 常见问题-无串口权限

  启动节点时候提示没有串口设备或者没有启动权限,这时候需要修改串口权限。

  step1: 检查是否识别到USB转串口驱动

106.JPG

  查看设备的ID号 ls /dev/ttyUSB*

 

105.JPG

  这里我们可以通过一个简单的方式来修改串口权限

  sudo chmod 766 /dev/ttyUSB0

  上述的方式每次拔插串口以后都需要执行修改权限的命令比较麻烦,可以使用我们的脚本文件把串口权限写入rule文件中。

  step2: 用记事本打开“ultrasonic-ros/scripts/ultrasonic.rules” 目录下的文件,会看到如下内容

  cd ultrasonic-ros/scriptsgedit ultrasonic.rules

 

104.JPG

  step3: 这里的1a86和7523 就是上面图中我设备的ID号,这里修改成为你自己的ID号以后,把文件拷贝到/etc/udev/rules.d目录下就可以使用 /dev/ultrasonic 替代 /dev/ttyUSB0 来访问模块了

  sudo cp ultrasonic.rules /etc/udev/rules.d/

  更新程序

  为了使得没有购买这个板子的小伙伴使用我们的程序,我们提供了Hex文件下载。

  通过STLink进行烧写程序,对照我们提供的原理图接线也可以实现多个超声波的读取(需要一定的动手能力)。板载芯片为STM32F103C8T6。

  SWD下载接口线序如下图所示:

103.JPG

  从ST官方的下载烧写软件:STM32 ST-LINK uTIlity 4.5.0 安装时候一直下一步默认即可,安装完成以后打开软件,使用STLink连接到STM32板子。

  接下来点击这个插头一样的东西(如果没有识别到就拔插一下STLink下载器)

102.JPG

  成功以后就可以看到芯片的信息

101.JPG

  接下来选中github网页中目录 ultrasonic-ros/reference/hex目录下的hex文件 ultrasonic_V1.0.0.hex

100.JPG

  成功打开以后这两个地方会有信息提示成功打开文件

99.JPG

  接下来点击烧写程序

98.JPG

  程序下载完成以后扳子上的红色LED开始闪烁表示程序下载成功了

  参考资料:

  [1]https://github.com/RuPingCen/ultrasonic-ros/tree/master/reference/hex

  [2]https://www.st.com/en/development-tools/stsw-link004.html

  [3]https://github.com/RuPingCen/ultrasonic-ros



更多信息可以来这里获取==>>电子技术应用-AET<<

mmexport1621241704608.jpg

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。