红外超声波雷达测距(water)

2024-05-31 21:12

本文主要是介绍红外超声波雷达测距(water),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一 RS-232
  • 二 RS485
  • 三 Modbus
  • 四 stm32多路超声波测距
    • 4.1 设计方案
    • 4.2 代码
  • 参考资料
  • 总结

实验要求
一. 采用stm32F103和HC-SR04超声波模块, 使用标准库或HAL库+ 定时器中断,完成1或2路的超声波障碍物测距功能。
1)测试数据包含噪声,程序需要进行滤波处理;将测距数值通过串口上传到上位机串口助手;
2)根据障碍物距离远近,控制一个蜂鸣器(可以用LED灯代替)发出频率不同的声音(或LED不同闪烁),即输出占空比变化的PWM波形;
3)在没有超声波模块硬件的场景下,先使用Keil中的仿真逻辑分析仪,观察分析对应管脚上的时序波形,判读是否符合协议规范。
二. 当前智能汽车上一般配置有12路超声波雷达,这些专用超声波雷达内置了MCU,直接输出数字化的测距结果,一般硬件接口采用串口RS485,通信协议采用modbus。请思考:
1)RS485与RS232(UART)有什么不同?
2)Modbus协议是什么?
3)如果让你设计一款 12路车载超声波雷达,采用 stm32F103+HC-SR04超声波模块,对外提供RS485和Modbus协议,你的设计方案是什么?

一 RS-232

异步串行通信接口标准之一,规定了连接电缆和机械、电气特性、信号功能及发送过程
请添加图片描述

特点:

  • 支持全双工通信
  • 波特率可选
  • 负逻辑传送
  • 传送距离较远

缺点:

  • 接口信号电平值较高,易损坏接口电路芯片
  • 传输速率较低,只有20Kbps
  • 共地传输,易产生共模干扰
  • 传输距离有限

引脚定义
在这里插入图片描述
通信机理
A向B发送数据:
1、A先设置RTS为1,表示要发数据给B
2、B检测到RTS为1,先看自己是否准备好:
如果准备好,就设置CTS为1表示A可以发数据给B了
如果没有准备好,继续处理自己的数据。弄完了,再将CTS设置为1,让A发送数据
3、A发现CTS置1后,将数据通过TXD信号线发送出去
4、A每发送一次数据给B之前,都会继续上面的逻辑
5、A发送完数据后,就将RTS置0,表示数据发送完毕

二 RS485

为针对RS232的缺点,出现了RS485

半双工网络
请添加图片描述

特点

  • RS-485的电气特性:以两线间的电压差表示电平1和0
    在这里插入图片描述

  • 最高传输速率是10Mbps

  • 平衡驱动器和差分接收器组合,抗共模干扰能力强,抗噪声干扰性好

  • RS232在总线上只允许连接1个收发器。RS485允许连接多达128个收发器,可使用单一的RS485建立设备网络

485驱动电路
请添加图片描述
RXD和TXD是连接串口的,choose是选择作为接收端还是发送端(二选一)。右边就输出A和B,即差分信号的线,与其它的485器件的AB连接。
请添加图片描述

三 Modbus

  • Modbus是一种由Modicon(施耐德电气公司)于1979年开发的串行通信协议,主要用于可编程逻辑控制器(PLC)和其他工业电子设备之间的通信。
  • Modbus网络遵循主/从模型,其中主站(Master)负责请求信息,而从站(Slave)提供信息。如下图所示。
    在这里插入图片描述

地址标识:每个从设备都有一个唯一的地址标识。
信息交互:主站可以读取从站的内部寄存器,也可以向其写入信息。

四 stm32多路超声波测距

4.1 设计方案

这里假设设定四路超声波。设定4个输入捕获通道,当超声波模块echo收到回波后,即触发输入捕获上升沿,开始echo持续时间的计时,然后下降沿后开始使用公式进行换算,得到距离,通过串口发送出去。其中,着重要考虑以下问题;

  • stm32的定时器资源是否足够,同一定时器可以采用多路记录超声波吗

可知stm32一个定时器有几个通道,这些通道可以用来进行输入捕获,此方案也节省了io口资源。但是需要考虑如何设定定时器计数频率,以及如何避免这种情况:假设定时器的重载值为200,echo在180时收到上升沿开始计数,会持续50个计数值,即在下一轮的30得到下降沿,此时如果直接使用减法,会造成负数或者不准确数值的问题。所以为了避免这种情况,需要使用一个变量来判断是否完成了一个计数周期。

  • stm32的定时器之间是否会有计数冲突:

在实验检验过程中,单独测试一个通道时记录结果大致准确,但是接入两个模块时,似乎结果发生了干扰,但无法确认是否是定时器问题还是其它问题,后续有待解决。

  • 若采用轮询(状态机)方案访问会出现当一个超声波停止工作时,其它超声波也无法正常工作的状态。

4.2 代码

GPIO定时器初始化

void GPIO_Init(void) {// 配置Trig引脚为输出,Echo引脚为输入RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; // Trig1, Trig2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_3; // Echo1, Echo2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);
}void Timer_Init(void) {// 配置定时器用于捕获Echo信号RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 65535;TIM_TimeBaseStructure.TIM_Prescaler = 72-1; // 1MHzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStructure.TIM_ICFilter = 0x0;TIM_ICInit(TIM2, &TIM_ICInitStructure);TIM_Cmd(TIM2, ENABLE);
}

Modbus设计

void USART_Init(void) {// 配置USART用于RS485通信RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // USART1_TXGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // USART1_RXGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);
}void Send_Modbus_Response(uint8_t* response, uint8_t length) {// 发送Modbus响应帧for (uint8_t i = 0; i < length; i++) {USART_SendData(USART1, response[i]);while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);}
}

参考资料

https://blog.csdn.net/LX567567/article/details/139182689?spm=1001.2014.3001.5502
https://mp.weixin.qq.com/s/6wBNP-9SHh1OGiTV51gH1w

总结

进一步了解了RS232及RS485,为后续设计打下基础。

这篇关于红外超声波雷达测距(water)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019057

相关文章

超声波清洗机哪个品牌比较好一点的?清洁力强的超声波清洗机品牌

随着生活水平的不断提升和幸福感的增强,珠宝、饰品和眼镜等物品已成为许多家庭的常备之物。然而,这些贵重细小的物件易于积聚微尘与隐形细菌,长此以往可能悄悄影响家人的健康,毕竟细菌是肉眼难以察觉的隐患。超声波清洗机应运而生,它以高科技手段有效地解决了这一隐忧,深层清洁,守护家人免受微小污染物的潜在威胁。不过现在市面上超声波清洗机品牌挺多的,究竟有哪些品牌的超声波清洗机比较好一点呢?接下来就为大家带来四款

关于武汉高芯coin417G2红外机芯的二次开发

文章目录 前言一、外观和机芯参数二、SDK的使用1、打开相机2、回调函数中获取全局温度和图像3、关闭相机 前言 最近工作中接触了一款基于武汉高芯科技有限公司开发的红外模组,即coin417g2(测温型)+9.1mm镜头.使用此模组,开发了一套红外热成像检测桌面应用程序.下面简单记录下该模组的使用. 一、外观和机芯参数 如下是该机芯的外观和机芯参数: 二、SDK

Xiaojie雷达之路---雷达间干扰(二)置零法对干扰抑制

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,本篇文章主要是介绍一下时域置零对雷达间干扰抑制的效果,一起来看看吧!!! 文章目录 前言正文原理性介绍代码 前言 在上一篇文章中介绍了BPM对雷达间干扰抑制的方法,而本篇文章是采用时域置零的方法进行雷达间干扰抑制 效果图: 视频如下: 雷达间干扰 正文

人体红外传感器简介

人体红外传感器的工作原理是利用热释电效应,将人体发出的特定波长的红外线转化为电信号,从而实现对人体的检测和感知。               具体来说,人体红外传感器主要由滤光片、热释电探测元和前置放大器组成。滤光片的作用是使特定波长的红外辐射选择性地通过,到达热释电探测元,而在其截止范围外的红外辐射则不能通过。热释电探测元是传感器的核心元件,当它受到非恒定强度的红外光照射时,会产生

树莓派使用WiringPi库配合时间函数实现超声波测距

树莓派使用WiringPi库配合时间函数实现超声波测距 文章目录 树莓派使用WiringPi库配合时间函数实现超声波测距一、HR-04超声波模块原理1.1 超声波测距原理:1.2 超声波时序图: 二、树莓派与超声波模块硬件连接三、时间函数3.1 时间函数gettimeofday()原型和头文件: 四、实现超声波测距4.1 使用wiringOP库和时间函数实现超声波测距: 五、实现超声波测距

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片,视频,摄像头的检测  项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面(GUI)以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测,并估算目标的距离。通过结合YOLOv5的强大检测能力和单目测距技术,系统能够在多种应用场景中提供高效、准确的目标检测和测距功能。 技术栈 YOLOv5:用于目标检测的深度学习模型。Open

【R语言 可视化】R语言画雷达图

1、安装插件 github网址: https://github.com/ricardo-bion/ggradar devtools::install_github("ricardo-bion/ggradar")install.packages("knitr") 2、效果图 3、源代码 rm(list=ls())gc()library(ggradar)mydata<-ma

最好的超声波清洗机是哪款牌子?高颜值的超声波清洗机

超声波清洗机凭借其出色的洁净能力与简便的操作方式,正逐渐成为广受欢迎的清洁优选。它以深度而不伤材质的清洗效果著称,不过市面上品牌琳琅满目,型号多样,价格波动大,给消费者挑选造成了不小的挑战。作为一名眼镜爱好者,我对超声波清洗机颇有研究,并乐意在此为朋友们推荐几款品质卓越的机型,希望能对你选购超声波清洗机有所帮助! 超声波清洗机选购攻略 技巧1:优选专业实力强悍的品牌 在选择超声波清洗机时,偏

超声波清洗机哪个品牌比较好?耐用超声波清洗机推荐

经济技术高速发展,眼镜作为人们日常生活中常见的物品,很多人可能只做了表面的擦拭,但是在眼镜上还有许多肉眼所看不见的细菌,这个时候还需要专业工具去对付它们,很多人为了解决这个隐患便开始使用超声波清洗机,由于市面上超声波清洗机的品牌繁多,怎么样才能买到一款合适的超声波清洗机呢?想要购买的朋友们可以来看看这篇推荐。 超声波清洗机选购攻略 技巧1:优选专业实力强悍的品牌 选择专业实力强悍的超声波清洗

LeetCode - 11. Container With Most Water

11. Container With Most Water  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你一个N条垂直于x轴的直线,从中找两条直线和x轴组成一个桶状容器,使得这个容器的容量最大. analyse: