GD32F470_US-016 模拟电压输出 双量程 模拟量 超声波测距模块 高精度

news2024/11/28 6:54:20

2.18 US-016电压式超声波测距传感器

US-016是市场上唯有的一款模拟量输出的超声波测距模块,输出的模拟电压和距离值成正比,可以方便的和其他系统相连,US-016工作稳定可靠。
US-016超声波测距模块可实现2cm~3m的非接触测距功能,供电电压为5V,工作电流为3.8mA,支持模拟电压输出,工作稳定可靠。本模块根据不同应用场景可设置成不同的量程(大测量距离分别为1m和3m);当Range管脚悬空时,量程为3m。US-016能将测量距离转化为模拟电压输出,输出电压值与测量距离成正比。

2.18.1 模块来源

采购链接:
US-016 模拟电压输出 双量程 模拟量 超声波测距模块 高精度
资料下载链接:
http://pan.baidu.com/s/1c08JuBQ

2.18.2 规格参数

工作电压:3.3V-5V
工作电流:3.8MA
感应角度:小于15度
探测距离:2CM-300CM
探测精度:0.3CM+1%
输出方式: 模拟电压
管脚数量:4 Pin
工作电流:3.8MA
感应角度:小于15度
探测距离:2CM-300CM
探测精度:0.3CM+1%
输出方式: 模拟电压
管脚数量:4 Pin

2.18.3 移植过程

我们的目标是在梁山派GD32F470上能够判断前方障碍物距离的功能。首先要获取资料,查看数据手册应如何实现,再移植至我们的工程。

2.18.3.1 查看资料

模块上电后,系统首先判断 Range 引脚的输入电平,根据输入电平状态来设置不同的量程。当 Range 引脚为高电平时,量程为 3m,当 Range 管脚为低电平时,量程为 1m。然后,系统开始连续测距,同时将测距结果通过模拟电压在 Out 管脚输出。当距离变化时,模拟电压也会随之进行变化。模拟电压与测量距离成正比,模拟电压的输出范围是0~Vcc。

  • 当系统量程为 1m 时,测量距离为:L = 1024*Vout/Vcc(mm)。当输出电压为 0V 对应距离为 0m,输出 Vcc 对应为 1.024m。
  • 当系统量程为 3m 时,测量距离为:L = 3096*Vout/Vcc(mm)。 当输出电压为 0V 对应距离为 0m,输出 Vcc 对应为 3.072m。

2.18.3.2 引脚选择

超声波模块立创·梁山派
VCC3V3
range浮空
outPC1
GNDGND

在这里插入图片描述

2.18.3.3 移植至工程

移植步骤中的导入.c和.h文件与上一节相同,只是将.c和.h文件更改为bsp_US016.c与bsp_US016.h。见2.2.3.3 移植至工程。这里不再过多讲述。移植完成后面修改相关代码。
在文件bsp_US016.c中,编写如下代码。

/********************************************************************************
  * 文 件 名: bsp_US016.c
  * 版 本 号: 初版
  * 修改作者: LC
  * 修改日期: 2023年04月06日
  * 功能介绍:          
  ******************************************************************************
  * 注意事项:
*********************************************************************************/

#include "bsp_US016.h"
#include "systick.h"
#include "bsp_usart.h"
#include "stdio.h"


//超声波量程 Range接地量程为1  Range接VCC量程为3  浮空量程为3 
//测试时,Range浮空,故量程为3


#define RANGE   0       //=0则量程为3米  =1则量程为1米

/******************************************************************
 * 函 数 名 称:US016_GPIO_Init
 * 函 数 说 明:US016超声波模块引脚初始化
 * 函 数 形 参:无
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:
******************************************************************/
void US016_GPIO_Init(void)
{
    /* 开启时钟 */
    rcu_periph_clock_enable(RCU_OUT);   
    /* 使能ADC时钟 */
    rcu_periph_clock_enable(RCU_OUT_ADC);                

    
        /*        配置AO为浮空模拟输入模式        */
    gpio_mode_set(PORT_OUT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_OUT); 
    
    /*        配置ADC为独立模式        */
    adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);
    /*        使能连续转换模式        */
    adc_special_function_config(PORT_OUT_ADC, ADC_CONTINUOUS_MODE, ENABLE);
    /*        使能扫描模式        */
    adc_special_function_config(PORT_OUT_ADC, ADC_SCAN_MODE, ENABLE);
    /*        数据右对齐        */        
    adc_data_alignment_config(PORT_OUT_ADC, ADC_DATAALIGN_RIGHT);
    /*        ADC0设置为规则组  一共使用 CHANNEL_NUM 个通道                */  
    adc_channel_length_config(PORT_OUT_ADC, ADC_REGULAR_CHANNEL, CHANNEL_NUM);
    /*        ADC规则通道配置:ADC0的通道CHANNEL_ADC的扫描顺序为0;采样时间:15个周期                */  
        /*        DMA开启之后 gt_adc_val[x][0] = PC1的数据   */
    adc_regular_channel_config(PORT_OUT_ADC, 0, CHANNEL_OUT_ADC, ADC_SAMPLETIME_15);
        /*        ADC0设置为12位分辨率                */  
        adc_resolution_config(PORT_OUT_ADC, ADC_RESOLUTION_12B); 
        /*        ADC外部触发禁用, 即只能使用软件触发                */  
    adc_external_trigger_config(PORT_OUT_ADC, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);
    /*        ADC0使能 */
    adc_enable(PORT_OUT_ADC);
        /*        等待ADC稳定                */  
        delay_1ms(1);
        /*        开启ADC自校准                */
    adc_calibration_enable(PORT_OUT_ADC); 
        /*        开启软件触发ADC转换                */
        adc_software_trigger_enable(PORT_OUT_ADC, ADC_REGULAR_CHANNEL); 
}                           

/******************************************************************
 * 函 数 名 称:Get_ADC_Value
 * 函 数 说 明:对ADC值进行平均值计算后输出
 * 函 数 形 参:num采集次数
 * 函 数 返 回:对应扫描的ADC值
 * 作       者:LC
 * 备       注:无
******************************************************************/
unsigned int Get_ADC_Value(unsigned int num)
{
        unsigned int Data=0;
    int i = 0;
    for( i = 0; i < num; i++ )
    {
        /*        读取ADC常规组数据寄存器  */
        Data += adc_regular_data_read(ADC0);
        delay_1ms(1);
    }
    Data = Data/num;
        
        return Data;
}
/******************************************************************
 * 函 数 名 称:Get_distance
 * 函 数 说 明:读取测距距离
 * 函 数 形 参:无
 * 函 数 返 回:浮点型的测距的距离
 * 作       者:LC
 * 备       注:
量程为3米时距离公式为:L = (A*3072/4096)*(Vref/Vcc)
量程为1米时距离公式为:L = (A*1024/4096)*(Vref/Vcc)
                      Vref 为 ADC 的参考电压,Vcc 为 US-016 的电源电压
******************************************************************/
float Get_distance(void)
{
    float distance = 0;
    unsigned int d = Get_ADC_Value(30);
    #if !RANGE  
        distance = d * 0.75;
    #else
        distance = d * 0.25;
    #endif
    return distance;
}


在文件bsp_US016.h中,编写如下代码。

#ifndef _BSP_US016_H_
#define _BSP_US016_H_
 
#include "gd32f4xx.h"


#define RCU_OUT           RCU_GPIOC
#define PORT_OUT           GPIOC
#define GPIO_OUT           GPIO_PIN_1

#define RCU_OUT_ADC          RCU_ADC0
#define PORT_OUT_ADC         ADC0
#define CHANNEL_OUT_ADC      ADC_CHANNEL_11


//采样通道数 
#define CHANNEL_NUM     1


void US016_GPIO_Init(void);
float Get_distance(void);
#endif


移植现象:距离20CM处摆放障碍物,输出换算后的实际距离。在这里插入图片描述
移植成功示例,见文件2.18.4-1 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 9.0 framework层实现app默认全屏显示

1.前言 在9.0的系统rom产品定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 fram…

红黑树深度解析:RB-DELETE操作的理论与实践

红黑树深度解析&#xff1a;RB-DELETE操作的理论与实践 一、前言二、红黑树的核心性质三、RB-DELETE的过程四、RB-DELETE的实现细节五、RB-DELETE的复杂性分析六、维护红黑树性质的重要性七、代码示例7.1 伪代码7.2 C代码示例 八、结论 一、前言 在现代计算机科学中&#xff0…

备忘,LangChain建立本地知识库的几个要点

本地知识库可以解决本地资源与AI结合的问题&#xff0c;为下一步应用管理已有资产奠定基础。 本地知识库的建立可参考LangChain结合通义千问的自建知识库 &#xff08;二&#xff09;、&#xff08;三&#xff09;、&#xff08;四&#xff09; 本文主要记录两个方面的问题 1 搭…

抖音引流私域转化模式1.0现场视频,从抖音源源不断把人加到私域买单

抖音-引流私域转化模式1.0现场视频&#xff0c;从抖音源源不断把人加到私域&#xff0c;让加到私域的粉丝买单 课程内容&#xff1a;抖音引流私域转化模式1.0现场视频&#xff0c;从抖音源源不断把人加到私域买单 - 百创网-源码交易平台_网站源码_商城源码_小程序源码 01.第一…

武汉星起航:运营经验打造行业标杆,形成可持续稳健业务增长路径

在跨境电商的浪潮中&#xff0c;武汉星起航电子商务有限公司以其专注于提供一站式解决方案而在行业内崭露头角&#xff0c;成为创业者成功进入市场的得力伙伴。公司不仅仅是服务提供商&#xff0c;更是创业者的导航者&#xff0c;通过全方位的支持和专业指导&#xff0c;致力于…

javaWeb影视创作论坛的设计与实现

摘要 随着时代的发展&#xff0c;互联网的出现&#xff0c;给传统影视行业带来的最大便利就是&#xff0c;方便了影视从业人员以及爱好者的交流和互动&#xff0c;而为用户提供一个书写影评&#xff0c;阅读影评以及回复影评的平台&#xff0c;以影评为载体来使用户感受影评、…

android-自定义TextView在文字内容末尾添加图片icon、可以添加间距

样式示意图 自定义属性 style.xml <declare-styleable name"IconLabelTextView"><attr name"iconSrc" format"reference"/><attr name"iconPaddingStart" format"dimension"/><attr name"iconPad…

小红不想做模拟题 线段树

无脑线段树 #include<iostream> using namespace std; const int N 1e510; int a[N],b[N];struct Segment{int l,r;int s,s1,s2;int lz1,lz2; }tr[N<<2];void pushdown(int u){if(tr[u].lz1){tr[u<<1].lz1 tr[u<<1|1].lz1 1;tr[u].lz1 0;tr[u<&…

2024/4/1—力扣—两数相除

代码实现&#xff1a; 思路&#xff1a;用减法模拟除法 // 用减法模拟除法 int func(int a, int b) { // a、b均为负数int ans 0;while (a < b) { // a的绝对值大于等于b&#xff0c;表示此时a够减int t b;int count 1; // 用来计数被减的次数// t > INT_MIN / 2:防止…

ArcGISPro 如何升级某项Python库且不影响其运行

升级包scipy 可以看出scipy当前版本是1.6.2 利用不依赖包升级 pip install --upgrade scipy --no-deps 结果 但是显示还是之前的版本

使用高德微信小程序插件实现精准获取打卡位置

由于微信小程序的 getFuzzyLocation 误差太大 不得不改用高德微信sdk 使用方法&#xff1a; 一、下载 sdk 相关下载-微信小程序插件 | 高德地图API 二、引入 sdk //引入 var amapFile require(../../libs/amap-wx.js); Page({onLoad: function() {var that this;va…

go的orm框架-Gorm

官网文档 特点 全功能 ORM 关联 (拥有一个&#xff0c;拥有多个&#xff0c;属于&#xff0c;多对多&#xff0c;多态&#xff0c;单表继承) Create&#xff0c;Save&#xff0c;Update&#xff0c;Delete&#xff0c;Find 中钩子方法 支持 Preload、Joins 的预加载 事务&…

Vue.js【组件基础(上)】

选项式API和组合式API 选项式API 选项式API是一种通过包含多个选项的对象来描述组件逻辑的API&#xff0c;其常用的选项包括data、methods、computed、watch等。 组合式API 相比于选项式API&#xff0c;组合式API是将组件中的数据、方法、计算属性、侦听器等代码全部组合在…

sigmoid函数实例

sigmoid实例案例&#xff1a;&#xff08;sigmoid作用就是把传统线性回归中的z 投射到分类问题&#xff08;0&#xff0c;1&#xff09;的概率中&#xff09; 交叉熵损失函数扩充解释&#xff1a; 为什么二分类和多分类的不一样 因为在二分类问题中 每个样本得值是0或1 一组数据…

使用spring模拟转账,并实现异常事务回滚

1、数据库准备 使用配置类配置数据源、模板、事务回滚 package cn.edu.aaa.utils;import java.beans.PropertyVetoException;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotati…

iterrows方法使dataframe显示完整

这样一个excel文件&#xff0c;由于行数太多显示不全。 直接读取显示&#xff1a; 该如何处理&#xff1f;方法有很多&#xff0c;这次讲解用dataframe.iterrows()方法。 DataFrame.iterrows()方法&#xff1a; 返回值是一个由索引和Series组成的元组。 关于这个方法的两个注…

程序汪10万接的多平台视频分发项目,模拟人工发视频

本项目来自程序汪背后的私活小团队&#xff0c;开发了一个多平台分发视频项目&#xff0c;给粉丝分享一下解决方案和具体项目分开情况付款情况等等细节&#xff0c;希望给想接私活的朋友一些经验参考 程序汪10万接的多平台视频分发项目&#xff0c;模拟人工发视频 视频版本 在 …

【网站项目】自助购药小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

VSCODE目录树缩进调整

VSCode默认的缩进太小了&#xff0c;简直看不出来&#xff0c;很容易弄混目录。在设置里修改就行了。 修改后效果&#xff1a;

代码随想录算法训练营第48天|198.打家劫舍|213.打家劫舍II| 337.打家劫舍III

代码随想录算法训练营第48天|198.打家劫舍|213.打家劫舍II| 337.打家劫舍III 今天就是打家劫舍的一天&#xff0c;这个系列不算难&#xff0c;大家可以一口气拿下。 198.打家劫舍 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Te411N7SX https://programmercarl.c…