基于CC2530的超声波传感器实验
实验内容
- 了解超声波测距的基本原理;
- 通过简单的编程实现在数码管上显示超声波测距的距离。
实验环境
实验所需硬件
序号 | 名称 | 数量 | 备注 |
---|---|---|---|
1 | 电脑 | 1台 | 系统Windows7及以上 |
2 | CC2530底座模块 | 1个 | · |
3 | 超声波传感器模块 | 1个 | · |
4 | 超声波探头 | 1个 | · |
5 | CC Debugger 仿真器和连接线 | 1套 | · |
6 | USB线 | 1根 | · |
7 | 超声波传感器实验代码 | 1份 | · |
实验所需软件
- IAR 驱动安装步骤
- CC Debugger 驱动安装步骤
- Git 软件下载(可选)
CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。
CC Debugger 仿真器和连接线
超声波模块&探头
USB线
实验要求
实验原理
超声波测距
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此超声波测距被广泛的应用。
超声波发生器
为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。
超声波测距原理
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C×T
式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。
由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。
误差分析
根据超声波测距公式L=C×T,可知测距的误差是由超声波的传播速度误差和测量距离传播的时间误差引起的。
时间误差
当要求测距误差小于1mm时,假设已知超声波速度C=344m/s (20℃室温),忽略声速的传播误差。测距误差s△t<(0.001/344) ≈0.000002907s 即2.907μs。
在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在达到微秒级,就能保证测距误差小于1mm的误差。使用的12MHz晶体作时钟基准的89C51单片机定时器能方便的计数到1μs的精度,因此系统采用89C51定时器能保证时间误差在1mm的测量范围内。
超声波传播速度误差
超声波的传播速度受空气的密度所影响,空气的密度越高则超声波的传播速度就越快,而空气的密度又与温度有着密切的关系。 已知超声波速度与温度的关系如下:
式中: r —气体定压热容与定容热容的比值,对空气为1.40,
R —气体普适常量,8.314kg·mol-1·K-1,
M—气体分子量,空气为28.8×10-3kg·mol-1,
T —绝对温度,273K+T℃。
近似公式为:C=C0+0.607×T℃
式中:C0为零度时的声波速度332m/s;
T为实际温度(℃)。
对于超声波测距精度要求达到1mm时,就必须把超声波传播的环境温度考虑进去。例如当温度0℃时超声波速度是332m/s, 30℃时是350m/s,温度变化引起的超声波速度变化为18m/s。若超声波在30℃的环境下以0℃的声速测量100m距离所引起的测量误差将达到5m,测量1m误差将达到5cm。
采用IO触发测距,给至少10us的高电平信号;模块自动发送8个40khz 的方波,自动检测是否有信号返回;有信号返回,通过 IO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。
实验步骤
① 将超声波模块、超声波探头安装到CC2530底座上,用CC Debugger连接底座与电脑,如下图所示(注意探头安装位置)。
② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:
③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:
④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):
$ cd workspace
⑤ 运行clone
命令:
$ git clone https://github.com/aiotcom/eps.git
下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code
-> DownLoad ZIP
下载所有工程代码。如下图所示:
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。
⑥ 打开 IAR Embedded Workbench
工程软件,点击工具栏: File
-> Open
-> Workspace
,选择工程文件:基于CC2530的模块实验\5.超声波传感器\HC-SR04.eww
并打开。
⑦ 点击Make
按钮,重新编译文件,显示没有错误。
⑧ 点击Download and Debug
按钮,将程序下载到模块中。
⑨ 点击X
退出仿真模式。
⑩ 移除CC Debugger
仿真器,采用USB线供电。
⑪ 如下图所示,用手靠近超声波探头移动,数据管上会显示检测出来的距离,单位是cm。
代码讲解
① 程序目录结构,源代码文件如下图:
② main.c代码,对超声波探头IO口、定时器、数码客情初始化,初始化完成后,每500秒探测一次距离并显示在数据管上。
void main(void)
{
uint16_t HCSR04_Data;
Hal_Init_32M();//初始化32M时钟
Time1_Init();//初始化定时器,中断周期10us,超声波时间基准
TM1640_Init();//初始化TM1640
HCSR04_Init();//初始化超声波
while(1)
{
HCSR04_Data = HCSR04_StartMeasure(10);//探测距离进行10次探测
send_LED_Display(0xC0,HCSR04_Data,1);//数码管显示距离
delay_ms(500);//每500ms测量-次
}
}
通过调用HCSR04_StartMeasure ()函数(输入参数为本次探测次数),获取到距离,单位为cm。send_LED_Display()函数将数据显示在数码管上。
HCSR04_Data = HCSR04_StartMeasure(10);//探测距离进行10次探测
send_LED_Display(0xC0,HCSR04_Data,1);//数码管显示距离
delay_ms(500);//每500ms测量-次
常见问题
-
弹出警告窗口,不能下载程序。
- 请确认CCDebugger驱动否安装。
- 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
- CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
-
下载代码后程序没观察到实验现象。
- 请重新上电,或者按下底座上的复位按键。
- 模块没有安装稳妥。
-
显示距离不对。
- 可能进入了探测盲区(<3cm)。
实验思考
- 对超声波采到的数据进行滤波处理。