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

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

[复制链接]
贺工 发布时间:2017-10-22 18:53
1:HC-SR04超声波测距原理
4 E# x/ M  I% U3 V7 V 超声波模块.PNG # B+ d' S: E9 o  h
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。. r( \0 h3 g  f8 m) L. C7 d
基本工作原理:  {0 z/ e- T+ I1 \
(1)采用IO口TRIG触发测距,给最少10us的高电平信号。 / m2 e1 N: m+ Z
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
& r( o3 H* Q6 E3 m' T(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。 & @: o" ?( v1 d# Y0 z) W
测试距离=(高电平时间*声速(340M/S))/2+ M" }2 E- B8 S- J  S
8 Y8 T. q% m$ @2 Y2 ]4 J, }

$ d( ^* y3 n4 S1 X/ s2:超声波时序图
5 [  V! }8 Z- C0 z+ v9 ] 超声波时序图.PNG
8 m* M0 S& f* T& g以上时序图表明你只需要提供一个 10uS以上脉冲触发信号,该模块内部将
0 d& I" H! P; U$ x, X: t发出8个 40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。4 ^, A4 p% Q/ ~% @: F* V
回响信号的脉冲宽度与所测的距离成正比。 由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。! M( t; r. n9 j- _( J) w: R
. F/ ]' Z5 D1 M  C; y1 e
  d, D3 i, k7 V0 O
3:软件控制HC-SR04超声波模块
01:硬件说明
超声波模块测距触发引脚Trig--->PC6
超声波模块测距信号返回引脚Echo--->PC7
2 `: u6 z! O/ o& z
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

: _# D* x) F8 T% W( o, L; Y6 }

) M$ `# j* o  ^& q1 a2 ~0 Bultrasonic.h文件3 P/ l5 a" e* ~
u_头文件.PNG
0 z5 n% e% k; B1 e& l9 k5 H7 k4 A' G* D. Z, W
* t' c9 f4 A) e9 J5 _
ultrasonic.c文件
7 `( J! z! f  H' W- i8 m u_1.PNG $ e7 b( K8 r) U0 o* o& S0 U
u_2.PNG 9 O. R- m. @% ~3 R2 E
' l( @4 A$ j, i, w4 b& N
' n3 r0 J7 `2 U4 u' U
time.c文件) g. [( X% i# k6 D5 u% n1 S
t2_1.PNG
9 M4 b) |' l: a# h4 d1 _ t2_2.PNG
6 `: |# _5 [5 E# I; Z+ N
, q& p2 u  H5 S" R+ J2 J

$ F8 a8 O( |+ O6 J3:实验测试
* r( q. w0 y! U9 D4 D; N4 b01:实验平台:1 c, y* l& m. L: l
pt.PNG # a4 u! v. j* A9 b+ g3 ]! @8 F* o
02:测试结果:
9 p; [# y3 n3 M2 x( v
$ I: z, M6 y0 o3 F 测试结果.PNG ' S9 x) D' q" ?8 B2 F5 O
) T( i8 s: K2 ^
+ R, i$ M+ n5 y# h; _" Q
更多精彩内容请微信扫码关注
2 {0 L2 J0 G% T# u: |* O 001206kzn4bs9bi2znatb2.png
* N! c" t1 x/ {2 B4 a0 [1 a1 c
之前发过的帖子
03:轻松搞定串口通信隔离
. G% e% S& f) U2 Z1 @04:STM32中断优先级管理
  n9 Z0 b. h( Y  g
6 {+ ^: u. E- d4 b, G. X3 N' D
05:STM32单片机SWJ口引脚释放
# l$ ~' ^9 U' }- i5 e4 t* f06:真的明白Code、RO-data、RW-data和ZI-data吗?
; F: N& `! _1 h" Z2 a  o$ @, \ ( `. F1 c/ [6 t+ u) P; ?. G  s4 F1 X
- o3 ]2 ~5 b$ [2 g
赞 收藏 3 评论7 发布时间:2017-10-22 18:53

举报

7个回答
anywill 回答时间:2017-10-23 10:58:39
本帖最后由 anywill 于 2017-10-23 14:05 编辑 # Z  a1 W1 O) R( Q6 M  _

! Z  `; u% X0 B5 z; Q//nucleo+HC-SR04超声波模块
6 M* r  X- A* t. b5 ~6 n01:硬件说明上的
. p  y- H* t4 _- \#include "mbed.h"
5 |) m3 O# W4 O- `6 z* [: g#include "ultrasonic.h"4 J/ N# Q" G; ~
  ]! J: }2 g5 \7 _
void dist(int distance)
7 P3 i$ t" l! A$ h* N' i( L{
# \+ ?$ d. M  O    //put code here to happen when the distance is changed; q. X0 A( h& [. m* [
    printf("Distance changed to %dmm\r\n", distance);
* c9 Z/ S! s* B6 f! Y}$ M9 L4 c- }7 l+ i  g

! l7 t, ^6 K/ e# B, fultrasonic mu(D8, D9, .1, 1, &dist);    //Set the trigger pin to D8 and the echo pin to D9
5 F; r  H+ O3 Q- w                                        //have updates every .1 seconds and a timeout after 1
( _+ W& N" P: `. r) c) C                                        //second, and call dist when the distance changes
6 F6 }/ y' R+ a/ v, ]  ?$ r
6 T" A6 k" c. K9 a' A) c( C/ Eint main()2 @+ h  z/ Y) v% N* h
{. O6 V- F3 ]) u' W4 R
    mu.startUpdates();//start mesuring the distance
4 D: T2 T: ~# M  G    while(1)
% g) r3 Z; V. J1 {* o7 B    {
) D) h, S" i9 ^# r) c2 [        //Do something else here
) @9 J1 A. J8 t+ F: L- F" [        mu.checkDistance();     //call checkDistance() as much as possible, as this is where
( `3 ^. Y& |$ t& c/ j$ Z- F6 v                                //the class checks if dist needs to be called.7 F( }" x+ X2 X/ {# }# e1 e
    }
: ]' m4 B. n, P# Z& @  A2 x}5 R* ?" @4 f- b% P' o# P

& `, B" F- u4 i; J7 m
$ ~. ]* A) j7 W0 L
贺工 回答时间:2017-10-23 11:56:24
anywill 发表于 2017-10-23 10:58; m, ]4 |$ ?+ ~! s0 }) b
//nucleo+HC-SR04超声波模块
4 y% Y; j# ?) t: U$ R8 L# H7 o, e  Y01:硬件说明上的( h9 w# s3 y/ Y3 v# Q$ M
#include "mbed.h"
! J1 S9 Q2 z; t7 B  Q- J
各有各的写法吧
贺工 回答时间:2017-10-23 12:30:31
还有一种控制方法:
) g, ^0 \/ O7 \9 v/ f5 A定时器一路PWM控制触发以及触发周期,超声波返回信号高电平时间用定时器通道捕捉功能获取
五哥1 回答时间:2017-10-24 12:19:31
实际上有三种方法
贺工 回答时间:2017-10-25 09:22:53
五哥1 发表于 2017-10-24 12:19
: u  \4 E$ Z, P. n2 {实际上有三种方法

4 e# y: O1 B& i# C1 L会好一种就好了
sh97 回答时间:2018-7-29 22:20:28
请问Task20ms_Flg在哪里定义
a2450317232 回答时间:2018-10-29 19:22:21
萌新请教下,pbdata.h是直接用就行了是吗?这里没详细内容额,求解答,感激

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版