20431|43

51

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

自编超声波测距模块(HC-SR04)STC程序开源 [复制链接]

 
本帖最后由 她叫小红 于 2017-3-10 13:45 编辑

各位朋友,大家好~  
       相信很多朋友都用过一款HC-SR04超声波测距模块,这个模块售价很平民,某宝上仅4RMB左右,能测3-400cm,真的很不错的。
      前一段时间,偶尔看到一款超声波测距模块(m**eblock的),控制方式与HC-SR04有所不同,硬件上是大同小异的,但售价非常有逼格
      本菜出于好奇,在网上找了很久的资料,大多数都是讲怎么使用HC-SR04模块的,而我想找的资料是如何制作HC-SR04这个模块,关键是模块中STC单片机的程序。

1、原理部分
      HC-SR04这个模块是2线制的(不包含电源线),
Echo与Trig,Trig负责接收10us以上的触发信号,Echo则是输出距离信号;下面是时序图:

      而m**eblock的超声波模块采用1线制(不包含电源线),,Echo与Trig和二为一(SIG),在一定程度上节省了IO资源,SIG在收到触发信号后采集并输出距离信号,其时序图与HC-SR04类似,使用起来略有不同,需要注意IO模式的转换,而如果使用m**eblock官方提供的库(Arduino)就非常简单了;
             关于HC-SR04系列超声波传感器的介绍网上有很多的帖子,本菜不赘述了。


2、硬件部分:
      下面就先看一个原理图吧,由于本菜的硬件不行,只是简单的分析一下,有说错的地方,欢迎大神们吐槽!


左边是m**eblock的原理图,右边是HC-SR04的原理图,可以看到,硬件部分的实现方式是大同小异的,下面以m**eblock为例。
      这里主要分成三个部分:
      1、主控IC部分:完成触发信号的检测、产生8个40KHz脉冲信号、检测回波信号、输出距离信号等;
      2、发射部分:由主控IC产生8个40KHz脉冲信号后,经过MAX232放大后驱动超声波发射端;
      3、接收部分:将微弱的回波信号放大,送到主控IC的IO端检测回波。

3、软件部分
下面是程序思路,围绕STC展开,说一下STC每个管脚的作用~
1、P30(SIG): 负责监测触发信号;
   配置其为高阻输入,可以轮询其高低电平并使用Timer0(2),也可以轮询高电平后使用INT4低电平,完成一个触发脉冲的检测(10us以上),一旦检测到触发信号,此管脚配置为推挽输出,并拉低,当8个40KHz信号发送完成后将其拉高,等到回波到来。

2、P33(T2)、P32(T1):8个40KHz脉冲信号;
   配置为推挽输出,当SIG检测到触发信号后,其同时发送8个40KHz信号,注意这两个信号存在半个周期的相位差(重要!),发射完成之后将SIG拉高。

3、P31(T_PWR):MAX232供、断电;
   配置其为推挽输出;通过NPN控制232,低电平有效,只在8个40KHz脉冲信号时给232供电,防止杂波出现,232在这里起到一个驱动放大功率的作用;

4、P34(PWM): 比较电压;
   一开始我以为这是一个PWM信号,后来发现我错了,可以看一下电路图中的放大器A,是作为一个比较器使用的。其实只要在检测回波信号的时候将其拉高就行了。(目前我是这样做的)

5、P35(CHK):回波检测;
    配置为高阻输入;可以利用INT3来检测下降沿并使用Timer2(0)计算周期,并检测回波频率,判断是否为发射出去的40KHz信号,检测完成后将SIG拉高,完成一次测量。

    第一次发表这么长的开源贴子,欢迎大家吐槽(鼓励~~),源代码中几乎每一条代码后都跟有注释,相信大家读起来不会太费时间的。程序中难免有些处理不妥的地方,欢迎大家下载优化,记得分享您的成果哈~~~

HC-SR04-V1.2.zip

4.27 MB, 下载次数: 2038

此帖出自51单片机论坛

最新回复

对PCB有什么要求吗  详情 回复 发表于 2024-10-29 16:53
点赞 关注(9)
个人签名
 

回复
举报

664

帖子

104

TA的资源

纯净的硅(中级)

沙发
 
这个需要支持一下,
此帖出自51单片机论坛

点评

谢谢支持,哈哈  详情 回复 发表于 2017-3-13 21:49
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
不知道性能如何
此帖出自51单片机论坛

点评

4-375cm左右,定点波动0.25cm,貌似还是在232没有正常驱动的情况下测的  详情 回复 发表于 2017-3-13 21:51
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

4
 
gs001588 发表于 2017-3-11 21:49
这个需要支持一下,

谢谢支持,哈哈
此帖出自51单片机论坛
 
个人签名
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

5
 
17er 发表于 2017-3-13 11:38
不知道性能如何

4-375cm左右,定点波动0.25cm,貌似还是在232没有正常驱动的情况下测的
此帖出自51单片机论坛
 
个人签名
 
 

回复

14

帖子

2

TA的资源

一粒金砂(中级)

6
 
谢谢分享,下载来练习练习
此帖出自51单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
本帖最后由 liunan233 于 2017-4-26 15:08 编辑

帅帅的楼主本人目前在做这个超声波遇到一些问题不知可否交流一下Q976888081
此帖出自51单片机论坛

点评

你好,有一段时间没有上了 问题解决了么 ? 850637704  详情 回复 发表于 2017-5-8 11:42
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

8
 
liunan233 发表于 2017-4-26 14:03
帅帅的楼主本人目前在做这个超声波遇到一些问题不知可否交流一下Q976888081

你好,有一段时间没有上了  问题解决了么 ? 850637704
此帖出自51单片机论坛
 
个人签名
 
 

回复

7

帖子

1

TA的资源

一粒金砂(初级)

9
 
学习一下
此帖出自51单片机论坛
 
 
 

回复

117

帖子

0

TA的资源

一粒金砂(中级)

10
 
我想请问,超声波探头接收端,收到的时候也是8个40kh的脉冲吗,为什么我用示波器测不出来,用电压表去量一直显示0v?
此帖出自51单片机论坛

点评

接收头出来的信号是解调过的  详情 回复 发表于 2017-6-25 08:56
收到的不一定是8个40kHz的脉冲哦,如果距离较远的话,可能就一两个脉冲,但是频率基本不变。  详情 回复 发表于 2017-5-19 11:28
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

11
 
赵怡彬 发表于 2017-5-17 23:28
我想请问,超声波探头接收端,收到的时候也是8个40kh的脉冲吗,为什么我用示波器测不出来,用电压表去量一 ...

收到的不一定是8个40kHz的脉冲哦,如果距离较远的话,可能就一两个脉冲,但是频率基本不变。
此帖出自51单片机论坛
 
个人签名
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
請問一下帖主,這顆STC的詳細型號是什麼呢?
此帖出自51单片机论坛

点评

我用的是STC11的 具体不记得了,只要定时器,或者还加上外部中断就可以了  详情 回复 发表于 2017-6-24 22:27
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

13
 
flipDaco 发表于 2017-6-23 18:12
請問一下帖主,這顆STC的詳細型號是什麼呢?

我用的是STC11的  具体不记得了,只要定时器,或者还加上外部中断就可以了
此帖出自51单片机论坛
 
个人签名
 
 

回复

4005

帖子

0

TA的资源

版主

14
 
赵怡彬 发表于 2017-5-17 23:28
我想请问,超声波探头接收端,收到的时候也是8个40kh的脉冲吗,为什么我用示波器测不出来,用电压表去量一 ...

接收头出来的信号是解调过的
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

15
 
LZ,您好!
     有两个地方没整明白,请教一下,
    (1)“5、P35(CHK):回波检测;配置为高阻输入;可以利用INT3来检测下降沿并使用Timer2(0)计算周期,并检测回波频率,判断是否为发射出去的40KHz信号,检测完成后将SIG拉高,完成一次测量。 ”
    这里是否应该是“检测完成后将SIG拉低”。

    (2)在中断服务函数void exint3() interrupt 11 里面,
      1. EX_COUNT大于2时会自加,否则清零,而后面的语句中,当EX_COUNT=1时重新对T0加载计数初值,
否则当EX_COUNT=0时?,关闭定时器T0,并判断回波频率。
     2. 这里的判断条件if( (((TH0<<8)|TL0) < 36491)||(((TH0<<8)|TL0) > 36490))怎么理解,36490与16491之间就表示回波频率是40K?
     3. 不知道你实际检测的时候会不会出现回波频率判断出错的情况,比如检测到的((TH0<<8)|TL0)是3个周期的总时间。
   
此帖出自51单片机论坛

点评

感谢这么仔细的阅读我的程序! 1、这么应该是我写错了 应该换成小于号的 2、这里注释错误,这里应该是超时的判断,没有做频率检测了 3、也是会的,所以去掉了频率检测 年代有些久远了,可能有误,仅供参考!  详情 回复 发表于 2017-6-26 13:09
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

16
 
ljmf5 发表于 2017-6-26 11:18
LZ,您好!
     有两个地方没整明白,请教一下,
    (1)“5、P35(CHK):回波检测;配置为高阻输入 ...

感谢这么仔细的阅读我的程序!
1、这么应该是我写错了  应该换成小于号的
2、这里注释错误,这里应该是超时的判断,没有做频率检测了
3、也是会的,所以去掉了频率检测
年代有些久远了,可能有误,仅供参考!
此帖出自51单片机论坛
 
个人签名
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

17
 
她叫小红 发表于 2017-6-26 13:09
感谢这么仔细的阅读我的程序!
1、这么应该是我写错了  应该换成小于号的
2、这里注释错误,这里应该 ...

谢谢!
现在也是在做超声波,学习参考一下
此帖出自51单片机论坛
 
 
 

回复

15

帖子

5

TA的资源

一粒金砂(初级)

18
 
好,请大家热烈讨论。本菜鸟也能学习一下。
此帖出自51单片机论坛

点评

看您怎么也不像是菜鸟啊  详情 回复 发表于 2017-7-20 18:29
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

19
 
5000322 发表于 2017-7-20 16:00
好,请大家热烈讨论。本菜鸟也能学习一下。

看您怎么也不像是菜鸟啊
此帖出自51单片机论坛
 
个人签名
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

20
 
菜鸟膜拜大神,希望能向前辈学习
此帖出自51单片机论坛

点评

你在说我么?  详情 回复 发表于 2017-9-28 18:08
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表