Renesa Version Board开发RT-Thread 之超声波测距模块(HC-SR04)
创始人
2024-09-26 13:50:09
0

目录

概述

1 硬件接口介绍

1.1  Version Board上的IO接口

1.2 HC-SR4模块介绍

1.2.1 HC-SR04特性

1.2.2 HC-SR04操作时序

1.2.3 计算距离

2 功能实现

2.1 FSP配置IO

2.2 测距代码实现

2.3 源代码

3 功能测试

3.1 监控波形

 3.2 测试程序实现


概述

本文主要介绍Renesa Version Board开发RT-Thread 开发超声波测距模块(HC-SR04)的功能,该功能需要定时器和外部中断配合起来才能工作。笔者详细分析了HC-SR04的工作原理,使用FSP配置IO接口和定时器的参数。最后在OLED上显示测得数据的数值。

1 硬件接口介绍

1.1  Version Board上的IO接口

在如下网址能看见该IO所对应的Pin引脚:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/hw-board/ra8d1-vision-board/ra8d1-vision-board

模块引脚Arduino UNO 引脚注释
SR-04  TRIGPORT_05_PIN_10测距触发信号
SR-04  ECHOPORT_00_PIN_06测距信息

1.2 HC-SR4模块介绍

1.2.1 HC-SR04特性

1.2.2 HC-SR04操作时序

工作原理:

Step -1: TRIG IO 收到10us 高电平

step - 2:  SR04自动发送8个40hz方波,并检测是否有信号返回

step - 3:SR04检测到返回信号,ECHO IO发送高电平,高电平持续时间为SR04发送波信号到返回波信号的时间。

具体工作波形图如下:

1.2.3 计算距离

以厘米为单位计算公式:

距离 = us/58(单位: cm), us为ECHO IO接收的高电平的持续时间,时间单位为: 微妙

以英寸为单位计算公式:

距离 = us/148(单位: 英寸), us为ECHO IO接收的高电平的持续时间,时间单位为: 微妙

2 功能实现

2.1 FSP配置IO

1)配置PORT_0_PIN_06为输出端口,用于Trig HC-SR04响应

 2)配置PORT_5_PIN_10为输入中断

3)配置定时器Timer0,定时时间为10us

2.2 测距代码实现

1) 触发测距功能

 2)输入中断响应测距信号

2.3 源代码

 创建HC_SR04.c,编写如下代码:

/*  * Copyright (c) 2006-2021, RT-Thread Development Team  *  * SPDX-License-Identifier: Apache-2.0  *  * Change Logs:  * Date           Author       Notes  * 2024-08-11     Administrator       the first version  */ #include  #include "hal_data.h" #include  #include  #include "user/hc_SR04.h" #include "common_data.h"  #define timeDelayUS(us)      R_BSP_SoftwareDelay(us, BSP_DELAY_UNITS_MICROSECONDS);  #define ICU_IRQN_PIN         BSP_IO_PORT_05_PIN_10 #define ICU_IRQN             3  #define TRIG                 BSP_IO_PORT_00_PIN_06  #define TRIG_H  R_IOPORT_PinWrite(&g_ioport_ctrl, TRIG, BSP_IO_LEVEL_HIGH) #define TRIG_L  R_IOPORT_PinWrite(&g_ioport_ctrl, TRIG, BSP_IO_LEVEL_LOW)   static bool bl_trigger = false; static uint32_t tick_cnt_1us; static int state =0;  static float distance;  static void timer0_Init(void) {     fsp_err_t err = FSP_SUCCESS;     /* Initializes the module. */     err = R_AGT_Open(&g_timer0_ctrl, &g_timer0_cfg);     /* Handle any errors. This function should be defined by the user. */     assert(FSP_SUCCESS == err);     /* Start the timer. */     err = R_AGT_Start(&g_timer0_ctrl);     assert(FSP_SUCCESS == err);      err = R_AGT_Enable(&g_timer0_ctrl);     assert(FSP_SUCCESS == err); }    void HC_SR04_Init ( void ) {     /* Configure the external interrupt. */     fsp_err_t err = R_ICU_ExternalIrqOpen(&g_external_irq3_ctrl, &g_external_irq3_cfg);     assert(FSP_SUCCESS == err);     /* Enable the external interrupt. */     /* Enable not required when used with ELC or DMAC. */     err = R_ICU_ExternalIrqEnable(&g_external_irq3_ctrl);     assert(FSP_SUCCESS == err);      timer0_Init(); }   void HC_SR04_Trigger( void ) {     bl_trigger = true;     TRIG_H;     timeDelayUS(12);     TRIG_L;     state = 0; }   void g_timer0_Callback (timer_callback_args_t * p_args) {     if (TIMER_EVENT_CYCLE_END == p_args->event)     {         tick_cnt_1us++;     } }   /* Called from icu_irq_isr */ void external_irq3_callback (external_irq_callback_args_t * p_args) {     fsp_err_t err = FSP_SUCCESS;     (void) p_args;      switch( state )     {         default:         case 0:             tick_cnt_1us = 0;             state = 1;             err = R_AGT_Enable(&g_timer0_ctrl);             assert(FSP_SUCCESS == err);             break;         case 1:             distance = (tick_cnt_1us)/5.8;             state = 0;             tick_cnt_1us = 0;             err = R_AGT_Disable(&g_timer0_ctrl);             assert(FSP_SUCCESS == err);             break;     } }  void debug_SR04_LOG( void ) {     user_get_rtc(); }  float HC_SR04_getValue( void ) {     return distance; }    

3 功能测试

3.1 监控波形

使用逻辑分析仪,测试ECHO接口上的波形数据

改变距离后的波形数据

 3.2 测试程序实现

在主函数中调用函数float HC_SR04_getValue( void ),就能获取到HC-SR04的值

在OLED上显示HC-SR04的值:

 运行程序,在OLED上查看结果:

相关内容

热门资讯

王者充值安卓系统在哪,轻松解锁... 亲爱的小伙伴们,是不是在王者荣耀的世界里,你发现了一个小秘密——想要充值,却不知道安卓系统里的充值入...
小米安卓原生系统桌面,体验非凡 哇塞,你有没有想过,你的小米手机其实可以变身成安卓原生的样子?没错,就是那种干净利落、简洁大方的原生...
天辰诀 安卓系统,安卓系统下的... 你知道吗?最近在安卓系统上有一款游戏火得一塌糊涂,那就是《天辰诀》!这款游戏不仅画面精美,玩法多样,...
安卓记录仪系统,安卓系统下的M... 你有没有想过,你的行车记录仪其实就像是一个小小的智能助手呢?它不仅能帮你记录行车过程中的点点滴滴,还...
安卓系统解码图案忘记,找回遗忘... 亲爱的手机控们,你们有没有遇到过这种情况:手机解锁图案忘得一干二净,急得像热锅上的蚂蚁,心里那个慌啊...
谷歌研发安卓新系统,探索谷歌的... 哇塞,你知道吗?谷歌最近可是秘密研发了一款全新的笔记本电脑,而且据说这款笔记本可能会搭载安卓系统哦!...
安卓如何转换ios系统,探索系... 你有没有想过,把你的安卓手机变成苹果手机呢?想象那光滑的屏幕、流畅的系统,还有那独特的苹果风格,是不...
小米11安卓系统耗电,深度剖析... 你有没有发现,最近你的小米11手机好像有点儿“懒洋洋”的,充电宝不离身,电量像坐过山车一样忽高忽低?...
魅蓝是安卓系统,深度解析安卓系... 你有没有想过,你的手机里那个小小的屏幕,竟然能装下整个世界?今天,咱们就来聊聊魅蓝手机,看看它那小小...
安卓系统怎么替换log,And... 亲爱的安卓开发者们,你是否曾在调试过程中为找不到合适的日志替换方法而头疼?别担心,今天我要带你一起探...
安卓手机好的系统,安卓手机操作... 你有没有发现,现在手机市场上的安卓手机真是琳琅满目,让人挑花了眼。不过,你知道吗?在这些安卓手机中,...
安卓系统mac电脑配置,打造安... 亲爱的电脑迷们,你是否曾想过,你的苹果笔记本里也能装上安卓系统?是的,你没听错!今天,就让我带你一起...
状元郎平板安卓系统,引领平板教... 你有没有想过,一款平板电脑,竟然能让你在学习之余,还能畅游安卓世界的海洋?没错,今天我要跟你聊聊的就...
安卓系统哪个传奇好玩,畅玩经典... 手机里的游戏可是咱们休闲娱乐的一大法宝,尤其是安卓系统,那丰富的游戏资源简直让人挑花眼。今天,就让我...
联众支持安卓系统吗,“联众PD... 斗地主爱好者们,是不是在为找不到一款好玩的斗地主游戏而烦恼呢?别急,今天我要给大家揭秘一个好消息——...
康佳电视安卓系统太卡,康佳电视... 亲爱的电视迷们,你们有没有遇到过这样的烦恼:家里的康佳电视用着用着就变得像蜗牛一样慢吞吞的,让人抓狂...
ios对比安卓系统流畅,流畅体... 你有没有发现,用手机的时候,有时候iOS系统就像个优雅的舞者,而安卓系统则像个活力四射的少年?没错,...
安卓系统占用内存小,深度解析优... 你有没有发现,手机用久了,就像人一样,会变得“臃肿”起来?尤其是安卓系统,有时候感觉就像一个超级大胃...
安卓系统怎么下载jdk,JDK... 你有没有想过,在安卓手机上也能编写Java程序呢?没错,就是那种在电脑上写代码的感觉,现在也能在手机...
安卓系统调手机亮度,轻松掌握手... 手机屏幕亮度总是让你眼花缭乱?别急,今天就来手把手教你如何轻松调节安卓系统的手机亮度,让你的手机屏幕...