完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
导语
近期想自己做超声波模块,在网上找了很多资料,大多是笼统的讲解了一下,有的还是存在误导的数据,一怒之下干脆自己动手从新理一遍。 原理图 网上大多数流传的是类似这份威廉希尔官方网站 图,但是市面上流行的是另一个加密的威廉希尔官方网站 图(接收部芯片抹掉丝印),但是他们的工作原理基本是相同的。也就是放大–>选频(40KHz)–>放大–>比较。(具体的选频元件选取与设计参数本人也是半桶水,希望大神留言告知) 时序 比较脚拉低:NET9, 接收触发信号:NET10 上面的时序图拿逻辑分析仪按正常接线是测不出来的,里面有个坑,那就是NET9脚其实是漏极开路,直接接到逻辑分析仪上会干扰超声波模块正常工作,并且抓取不到时序图。在这里我强行外部上拉了一个1K电阻,虽然超声波接收到的数据是错误,但是起码能抓取到它工作原理的时序图。 trig引脚需要一个10us的高电平触发脉冲–>接着把NET9引脚拉低(排除干扰信号)–>模块发射8个40KHz的脉冲–>启动定时器,启动中断–>等待NET10的接收触发中断信号–>关闭定时器,关闭中断,计算计时器时间–>通过echo引脚输出与计时器时间一样的高电平脉冲。 总结分析 比较器 1、UC直流分析: 当超声波模块没有接收到任何信号的时候,B点的电压为2.5V(由于R7和R16分压2.5V)。 2、NET9为漏极开路(忽略R10影响): A点的电压为2.41V,B-A=0.09V,非常容易触发UD输出高低电平,很容易受干扰信号影响。 3、NET9输出低电平(忽略R10影响): A点的电压约为0.96V,B-A=1.54V,不容易触发UD输出高低电平,不容易受干扰信号影响。 4、NET9输出低电平,假设B点输出0-5V交流信号(考虑R10影响): 此时A点的电压约为0.96V。 当B点为0V时,C点的电压约为0.075V,电压:A>C,Q1三极管关断,D点电压约为4.62V。在B点电压为0–0.89V之间,Q1三极管一直出于关闭状态。 当B点的电压约为0.90V的时候,C点约为0.962V,电压:C>A,UD输出高电平,Q1三极管导通;当Q1三极管导通,D点的电压瞬间变为0.3V(三极管的导通压降),C点的电压瞬间变为0.89V,此时电压:A>C,UD输出低电平,Q1三极管断开;此时Q1三极管是出于重复的开与关状态;B点在0.90—0.972V这段电压内,Q1三极管一直出于重复开关状态,如时序图的接收触发部分。 当B点的电压在0.973—5V之间,Q1三极管一直出于导通状态。 4、NET9输出高电平(漏极开路): 超声波模块中断关断、定时器不计时、不处理NET10的信号,UD处于高度灵敏状态,输出带有干扰信号的脉冲。 备注:此为个人理解,有不同见解的大神希望能留言告知。 认识超声波 可在空气中传播的超声波频率,大约介于20~200KHz之间,其衰减程度与频率成正比(即频率越高,传播距离越短) 在室温20°C的环境中,声波的传输速度约为344m/s(声音在水中传播的速度比在空气快60倍),因此,假设超声波往返的时间为600μs,可通过公式: 求得:被测物的距离为10.3cm。 影响声音传播速度的因素: 1、空气的密度会影响声音的传播速度,空气的密度越高,声音的传播速度越快,而空气的密度又与温度密切相关,考虑温度变化的声音传播速度的近似公式: 速度=V0+0.6×T 其中, V 0 V_0 V0:声音在0摄氏度时的传播速度331.5米/秒。T:温度 2、物体的形状和材质会影响超声波传感器的效果和准确度,探测表面平整的墙壁和玻璃时,声波将会入射角度反射回来;只要物体表面的坑洞尺寸小于声波波长的 1 4 frac{1}{4} 41,即可视为平整表面。波长计算公式: 超声波传感器简介 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。威廉希尔官方网站 板上有4个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地),主要参数: 工作电压与电流 :5V、15mA。感测距离 :2~400cm感测角度:不大于15°。被测物的面积不要小于50cm²并且尽量平整。 在超声波模块的触发脚位输入10微妙以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位的高电位脉冲持续时间,换算出被测物的距离。 代码及解析: pulseIn():用于检测引脚输出的高低电平的脉冲宽度。 pulseIn(pin, value) pulseIn(pin, value, timeout) Pin—需要读取脉冲的引脚 Value—需要读取的脉冲类型,HIGH或LOW Timeout—超时时间,单位微秒,数据类型为无符号长整型。 使用方法及时序图: 1、使用Arduino数字引脚给SR04的Trig引脚至少10μs的高电平信号,触发SR04模块测距功能。 2、触发后,模块会自动发送8个40KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。 3、如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。此时,我们能使用pulseIn()函数获取到测距的结果,并通过公式计算出距被测物的实际距离。 接线图: [tr]Arduino UNO R3HC-RS04[/tr]
const int pingPin = 7; // Trigger Pin of Ultrasonic Sensor const int echoPin = 6; // Echo Pin of Ultrasonic Sensor void setup() { Serial.begin(9600); // Starting Serial Terminal } void loop() { long duration, inches, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(10); digitalWrite(pingPin, LOW); pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); inches = microsecondsToInches(duration); cm = microsecondsToCentimeters(duration); Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); } long microsecondsToInches(long microseconds) { return microseconds / 74 / 2; } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; } |
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
2998 浏览 16 评论
3496 浏览 1 评论
9066 浏览 16 评论
4089 浏览 18 评论
1189浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 20:26 , Processed in 1.148551 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号