玩转X-CTR100 l STM32F4 l HC-SR04超声波测距

我造轮子,你造车,创客一起造起来!更多塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

超声波测距模块HC-SR04可以测量2cm~400cm的距离,本文使用X-CTR100控制器定时器进行超声波距离测量。
原理
HC-SR04超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。
基本工作原理:
(1)采用IO 口TRIG 触发测距,给最少10us 的高电平信呈。
(2)模块自动发送8 个40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO 口ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
如下图接线,VCC 供5V电源, GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四个接口端。


超声波时序图

以上时序图表明你只需要提供一个10uS 以上脉冲触发信号,该模块内部将发出8 个40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms 以上,以防止发射信号对回响信号的影响。
1、此模块不宜带电连接,若要带电连接,则先让模块的 GND端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于 0.5平方米且平面尽量要求平整,否则影响测量的结果。
例程
本例程实现X-CTR100控制器测量超声波距离,并通过串口显示。
硬件说明
硬件资源:
- 串口UART1
- LH接口(作为普通IO使用)
- HC-SR04超声波测距模块(需自备)
硬件连接:
超声波模块连接LH接口,需要4根杜邦线,连接如下。
GND——GND
VCC——5V(红色),
Trig——D0
Echo——D1
软件生态
X-SOFT软件生态,X-API扩展文件如下。
ax_sr04.c——HC-SR04超声波测距源文件
ax_sr04.h——HC-SR04超声波测距头文件
测量方式采用边沿中断触发,Echo上升沿启动定时器,下降沿获取定时器值作为测量值,代码如下。
|
void EXTI1_IRQHandler(void) { //确认是否产生了EXTI Line中断 if (EXTI_GetITStatus(EXTI_Line1) != RESET) { if (GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_1) != 0) // 高电平回波 { TIM_Cmd(TIM7, ENABLE); } else { TIM_Cmd(TIM7, DISABLE); sr04_measurement = TIM_GetCounter(TIM7); TIM_SetCounter(TIM7, 0); } } //清除中断标志位 EXTI_ClearITPendingBit(EXTI_Line1); } |
定时器周期为1us,sr04_measurement为测量时间值,与距离正比,通过多次实际测量值求得系数。
距离 = sr04_measurement*0.173-4.51 ,模型一次函数,多次实际测量后求得系数,经过实测,测量结果准确。

接口函数
|
void AX_SR04_Init(void); //SR04超声波测距初始化 void AX_SR04_StartRanging(void); //SR04启动测量 uint32_t AX_SR04_GetDistance(void); //SR04获取距离值 |
软件说明
每隔500ms测量一次,循环测量,结果通过串口显示,主程序如下。
|
int main(void) { uint32_t temp;
//X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 SR04超声波测距例程***\r\n\r\n");
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组
//SR04初始化 AX_SR04_Init();
while (1) { //启动测量 AX_SR04_StartRanging(); AX_Delayms(500);
//获取距离值 temp = AX_SR04_GetDistance(); printf("当前距离:%d MM \r\n", temp); } } |
实现效果
测量结果显示如下,与实际距离对比,误差小于1CM。当然超声波的传播速度与温度有关系,如需获得更准确距离,需要进行温度补偿,尤其是远距离测距。

玩转X-CTR100 l STM32F4 l HC-SR04超声波测距的更多相关文章
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
- 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...
随机推荐
- keepalived主从及双主配置
高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...
- PTA第三次上机
5-1 #include <iostream> #include <cstdlib> #include <string.h> using namespace std ...
- DFS回溯-函数递归-xiaoz triangles
题目:小z 的三角形 ★实验任务 三角形的第1 行有n 个由"+"和"-"组成的符号,以后每行符 号比上行少1 个,2 个同号下面是"+", ...
- go 语言字典遍历
package main import "fmt" func main() { var countryCapitalMap map[string]string /*创建集合 */ ...
- typeof
1.用法 typeof num typeof(num) 2.返回值 "number"."string"."boolean"." ...
- 常用 对象检测 api
isPrototypeOf() 判断某个 proptotype 对象和某个实例之间的关系 alert(Cat.prototype.isPrototypeOf(cat1)); //true ale ...
- 将数组划分成连续子序列 Split Array into Consecutive Subsequences
2018-08-04 20:47:43 问题描述: 问题描述: 本题需要的是将一个数组划分成子序列,保证每个子序列是连续的,并且长度要大于等于3. 解题思路是使用贪心算法,首先对数组中的数字进行计数, ...
- MyBatis3-基于注解的示例
在基于注解的示例中,可以简化编写XML的过程,全部采用注解方式进行编写,并在注解上写SQL语句,语句和XML的语句保持一致,并且可以省略掉XML文件不用引入的好处.但还有一点,基于注解的方式还没有百分 ...
- English trip -- VC(情景课)4 D
What do you see? I can see three men in the pictrue. one older man is a doctor, two younger men are ...
- 20170617xlVBA销售数据分类汇总
Public Sub SubtotalData() AppSettings 'On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant S ...