你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HC-SR04超声波测距模块调试

[复制链接]
贺工 发布时间:2017-10-22 18:53
1:HC-SR04超声波测距原理
. O$ N( u# W% q 超声波模块.PNG 3 Y0 h+ M4 q( g" |4 ~/ G) D4 M
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
: O3 v5 i# G) u4 I" M2 G% m基本工作原理:
& O- B& h; k, T, z. s$ ^0 }1 [; j(1)采用IO口TRIG触发测距,给最少10us的高电平信号。
/ G5 |  z2 n; B3 H" z( J7 B(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;  p2 x8 c+ s1 Y% N5 N
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
: ?; w6 l2 _, H9 c3 V# i$ v2 E测试距离=(高电平时间*声速(340M/S))/2
7 T* u1 v% k  ?+ p( X' b
4 k; ^6 Z/ L& j; ?

; E' ^  l2 V% S" t8 T2:超声波时序图
9 ~8 a. c$ M6 W 超声波时序图.PNG ) z# x9 w; X" K* O- m* p4 ~
以上时序图表明你只需要提供一个 10uS以上脉冲触发信号,该模块内部将
( V8 b3 H7 D/ j7 N发出8个 40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。
2 r4 |& e4 t# d回响信号的脉冲宽度与所测的距离成正比。 由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
( r1 [6 P  M. Y
0 H6 z- D# |, }) B* C0 _5 d- V4 j
& |8 d0 a+ w' L& b; `" J5 l
3:软件控制HC-SR04超声波模块
01:硬件说明
超声波模块测距触发引脚Trig--->PC6
超声波模块测距信号返回引脚Echo--->PC7
; O, T& H9 c3 {8 Y  t& J
02:软件实现
实现方法:20ms触发一次测距,在定时器100us的中断里面计模块Echo返回信号高电平的时间,然后通过高电平时间*声速(340m/S)/2计算出距离,并串口打印显示。
注意:20ms触发一次测距,说明最远只能测3.4m。
主要函数说明:
//控制引脚初始化
void ULsonicGPIO_Init(void);
//测距使能控制
void ULsonic_Start(void);
//测距函数
void ULsonic_Measure(void);
具体源代码:
main.c文件
main.PNG
! E+ f4 c: _! j# X
! o% ?( R6 N' r3 o1 u' d$ ?
ultrasonic.h文件" X. B' K; |9 `; O, ~
u_头文件.PNG
2 ]" R$ O5 h% E% e
: p- J  K; t& R
( ?5 s& m2 J. C/ x/ H$ k
ultrasonic.c文件* O1 W  r, L  G. n5 C/ Z2 \/ }3 l
u_1.PNG
, O( c5 ]: H% p) I7 i1 e. f/ _: @ u_2.PNG
" Y; X5 q& ]5 a! w" R, Y9 Y
: h* v0 R5 F: {. A0 J& A" }
0 N( d8 Q) T+ V& o1 O" {  R5 n
time.c文件8 L: I1 b# |% P! w. z
t2_1.PNG . d6 o; P; z& C6 c" @6 \( C
t2_2.PNG
7 s0 j( X; b3 ]0 }  ]5 j' R' u, c
$ T" ~0 Q+ @1 n
3:实验测试
; r* m! _3 o* b01:实验平台:
0 X6 F6 D0 |/ O, m' M# F; o) h pt.PNG " ]- U0 ?; R7 j5 F. L
02:测试结果:
. ]3 U1 v5 M9 C8 a6 n2 o0 B& s/ h/ q4 U* i) s" U5 [
测试结果.PNG ' Z( y% A" g/ s" x  _6 g) Y
. x% A: {) Q  E/ I. l( P
2 B5 t# K: I  ]  v8 b! S" d) v, _
更多精彩内容请微信扫码关注- n0 g8 c5 H/ ^; Q5 L
001206kzn4bs9bi2znatb2.png
5 y: O: y6 ?) S6 L
之前发过的帖子
03:轻松搞定串口通信隔离2 P/ X) f" J! A3 ?/ Y
04:STM32中断优先级管理
6 Y* M! a, n% \& [# L

( J8 e3 i/ `, b) g; {3 }05:STM32单片机SWJ口引脚释放& \' x5 N7 X# e
06:真的明白Code、RO-data、RW-data和ZI-data吗?2 w6 B# X2 S& p* J/ k7 S1 H

1 d9 w% O, n/ g# ^3 f/ Z
! l2 M0 @, v/ W9 L- W
收藏 3 评论7 发布时间:2017-10-22 18:53

举报

7个回答
anywill 回答时间:2017-10-23 10:58:39
本帖最后由 anywill 于 2017-10-23 14:05 编辑
8 ]: ~* ]& y9 s( c5 Y( F! k
  p3 u) b$ ]' e$ k. @//nucleo+HC-SR04超声波模块. {0 o4 y" c: A0 d# A1 ~$ q, y0 R1 e
01:硬件说明上的9 {! L8 ~) a! Q( g8 U# {. ]
#include "mbed.h"* K& M2 R( C! x1 F5 q! n3 G3 Q
#include "ultrasonic.h"! {& I8 {+ e: p) F% R
9 X: ?0 @, L/ J  H
void dist(int distance)! a2 S: n- H+ m" D3 b$ K
{# p" @  ~$ r6 ]
    //put code here to happen when the distance is changed
7 F, b" |, q" \1 `    printf("Distance changed to %dmm\r\n", distance);4 N6 b' p" W! M# ^
}( T& J" A2 z5 y8 M" k+ y2 _

9 A$ z2 k" J* n: u& hultrasonic mu(D8, D9, .1, 1, &dist);    //Set the trigger pin to D8 and the echo pin to D9; ?% l4 o0 h, N- h/ |0 d
                                        //have updates every .1 seconds and a timeout after 1
6 A' }4 p" x  h$ {% ^2 U6 K$ ^                                        //second, and call dist when the distance changes0 ^/ z  k# j& m  i3 S; j

- ~9 q! n2 G3 f  Wint main()! q6 d8 N( y# `
{
, G- ?6 V6 T) k7 ?    mu.startUpdates();//start mesuring the distance
* B* |# f/ T9 m6 I; f6 ]    while(1)& y; m" |: b! Q! \
    {: M  o+ x, V6 q; n9 Y5 n
        //Do something else here
; C5 f# L: B4 V4 Q6 A' [, D        mu.checkDistance();     //call checkDistance() as much as possible, as this is where8 |# ]% o( L( V
                                //the class checks if dist needs to be called.% u! z  X0 F- i6 m' [
    }
5 N; {- {5 r8 w# b}+ c! f( P* ]/ K2 u5 E" o, y

7 ]+ C7 X5 P" ]- ?
5 Z6 z# `- v; z0 I1 ^- t
贺工 回答时间:2017-10-23 11:56:24
anywill 发表于 2017-10-23 10:58
( y: o  B3 u& l//nucleo+HC-SR04超声波模块
( \, \  V/ k; A+ i+ l  \; r8 A01:硬件说明上的
4 P7 _8 u+ |: V+ |% ]#include "mbed.h"

# g! C+ _1 e5 r+ d9 a: x) N. f5 U4 Z各有各的写法吧
贺工 回答时间:2017-10-23 12:30:31
还有一种控制方法:8 D; J6 q) Y( j; J- g" t' E: h
定时器一路PWM控制触发以及触发周期,超声波返回信号高电平时间用定时器通道捕捉功能获取
五哥1 回答时间:2017-10-24 12:19:31
实际上有三种方法
贺工 回答时间:2017-10-25 09:22:53
五哥1 发表于 2017-10-24 12:191 y+ F& r( O8 t  M4 ^$ a* C
实际上有三种方法

5 D5 i7 @: s* n6 b1 ?* ]2 V会好一种就好了
sh97 回答时间:2018-7-29 22:20:28
请问Task20ms_Flg在哪里定义
a2450317232 回答时间:2018-10-29 19:22:21
萌新请教下,pbdata.h是直接用就行了是吗?这里没详细内容额,求解答,感激

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版