论坛» 嵌入式开发» STM32

shiyongzhuSTM32L053开发板 超声波测距系统

助工
2016-01-03 20:15 1楼

本次使用STM32L053开发板,本计划利用多个超声波模块HC-SR04完成一个空间目标空间定位系统,但是由于无线通信芯片nRF24L01迟迟没有调试成功,所以此处先使用超声波模块HC-SR04制作一个超声波测距系统,后面等待nRF24L01调试通过再完成原计划。

一、硬件组成

整个系统简图如下:


STM32L053通过HC-SR04测量出距离,然后再由LCD1602显示。

HC-SR04的引脚主要有VCC(电源)、trig(控制端)、echo(接收端)、GND(地)。VCC+5V电源,GND接地,trigPB1echoPB0

LCD1602的引脚有VSS(电源地)、VDD(电源正极)、VL(液晶显示偏压信号)、RS(数据/命令选择端)、R/W(读/写选择端)、E(使能信号)、D0~D7(数据口)、BLA(背光源正极)、BLK(背光源负极)。VDD接+5V电源,VSS接电源地,RS接PB2,RW接PB10,E接PB15,D0~D7接PC0~PC7,其他信号按照下图连接。



本人采用一块实验板作为基本,将整个系统在板子上进行了搭建,搭建效果图如下:




二、软件编写

1、超声波测距

基本工作原理:(1)采用IOTRIG触发测距,给至少10us的高电平信号;(2)模块自动发送840khz的方波,自动检测是否有信号返回;(3)有信号返回,通过IOECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2



2LCD显示

LCD1602的基本操作分为四种:

1.读状态:输入RS=0RW=1E=高脉冲。输出:D0D7为状态字。

2.读数据:输入RS=1RW=1E=高脉冲。输出:D0D7为数据。

3.写命令:输入RS=0RW=0E=高脉冲。输出:无。

4.写数据:输入RS=1RW=0E=高脉冲。输出:无。

进行如下的宏定义

#define LCD_DB(data) (GPIOC->ODR = ((GPIOC->ODR)&(0xFF00))|(data)) //完成写数据

#define LCD_RS_H (GPIOB->BSRR = 0x0004)

#define LCD_RS_L (GPIOB->BSRR = 0x0004<<16)

#define LCD_RW_H (GPIOB->BSRR = 0x0400)

#define LCD_RW_L (GPIOB->BSRR = 0x0400<<16)

#define LCD_E_H (GPIOB->BSRR = 0x8000)

#define LCD_E_L (GPIOB->BSRR = 0x8000<<16)

通过以上的宏,可以控制LCD控制口状态,写入命令和数据,具体就不详述了,详情可以参考附件中的程序(LCD1602.c)。



3、主程序

主程序比较简单,具体如下:



三、运行效果展示

最后制作整体的效果如下,能够使用,就是前端的超声波的指向有时不准,而且测量时周边最好不要有其他障碍物。

http://v.youku.com/v_show/id_XMTQzNDI3NDM2MA==.html

UltrasonicRanging.rar



专家
2016-01-03 20:33 2楼
很棒的制作
院士
2016-01-04 00:24 3楼
真棒,一个不错的作品
助工
2016-01-04 09:16 4楼
楼主真是棒,璐璐期待你的完整更新呦,加油~
助工
2016-08-11 20:53 5楼

你好,看一下下面的链接,你也许会感兴趣

http://forum.eepw.com.cn/thread/276388/1

菜鸟
2018-04-16 20:56 6楼

超声波定位?看一下

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]