西北工业大学嵌入式stm32超声波测距.docx

上传人:b****7 文档编号:10850829 上传时间:2023-02-23 格式:DOCX 页数:13 大小:140.11KB
下载 相关 举报
西北工业大学嵌入式stm32超声波测距.docx_第1页
第1页 / 共13页
西北工业大学嵌入式stm32超声波测距.docx_第2页
第2页 / 共13页
西北工业大学嵌入式stm32超声波测距.docx_第3页
第3页 / 共13页
西北工业大学嵌入式stm32超声波测距.docx_第4页
第4页 / 共13页
西北工业大学嵌入式stm32超声波测距.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

西北工业大学嵌入式stm32超声波测距.docx

《西北工业大学嵌入式stm32超声波测距.docx》由会员分享,可在线阅读,更多相关《西北工业大学嵌入式stm32超声波测距.docx(13页珍藏版)》请在冰豆网上搜索。

西北工业大学嵌入式stm32超声波测距.docx

西北工业大学嵌入式stm32超声波测距

嵌入式系统及应用

开放性实验报告

Stm32

HC-SR04超声波测距

第一章绪论

 

1.1STM32超声波测距系统

HC-SR04超声波测距模块简介

HC-SRO4超声波测距模块可提供2cm-400cm的非接触式距离感测功能,

测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。

使用电压:

DC---5V

静态电流:

小于2mA

电平输出:

高5V低0V

感应角度:

不大于15度

探测距离:

2cm-450cm

高精度:

可达3mm

HC-SR04超声波测距模块原理

采用10口TRIG触发测距,给TRIG至少10us的高电平信号

模块自动发送8个40khz的方波,自动检测是否有信号返回;

有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

测试距离=(高电平时间*声速(340M/S))/2;T(T)={(V25-Vsense)

/Avg_Slope}+25

V25=Vsense在25度时的数值(典型值为:

)。

Avg_Slope温度与Vsense曲线的平均斜率(单位为mv厂C或uv/°C)(典型值为C)。

利用以上公式,我们就可以方便的计算出当前物体超声波模块之间的距离。

程序中使用:

测试距离=高电平时间*声速(340M/S))/2这个公式

设计要求

使用ARM开发板上硬件资源与超声波模块结合,编程实现实时距离显示功能,通过数码管实时显示距离,并在距离小于设定报警距离时使用蜂鸣器报警。

总体设计方案及框图

距离测量及获取方法

通过设置定时器,开启中断,读取ECHC输出高电平的持续时间,计算结果作为当前距离。

总体设计方案

实时距离:

本超声波测距系统可实现对距离的实时测量,并不断显示在数码管上

保持距离:

用户可通过按键使得当前距离值在数码管保持,也可再次返回对距离的实时测量,此模式下距离小于报警值不会报警,仅为显示模式。

两种模式相互转换,并且可以在距离保持状态时通过按键进入修改报警距离模式,如果实测距离小于下限值,蜂鸣器报警,当距离大于下限值时,报警自动停止。

程序框图

1

开始

r1

初始化

k,J

显示当前距离

数码管及按键扫描

数码管显示距离

rr

K1是否按下

\

第二章正文

要求重述及分析

2.1.1设计任务

超声波测距系统

设计要求

使用STM-32开发板上硬件资源及HC-SR04超声波测距模块,编程实现超声波测距功能,通过数码管实时显示距离。

要求分析

1使用HC-SR04超声波测距模块以及stm-32自带数码管、LED等

2实现实时距离测量功能,通过数码管实时显示当前距离:

设计程序实现对距离报警值的设定,并在低于报警值时使用蜂鸣器等进行提示。

相关配置具体设计

相关配置

1输入口输出口配置:

将PC8设为与Trig相连的输出口,将PC7设置为接收

Echo返回数据的输入口。

使能APB2总线上的GPIOC寸钟,根据参数配置对应引

GP'PIC_lzitStrti:

G?

rD_PicEljeii£pCoiEig(GFIO_&emap_SWJ_JTAGD^satisfEKAELE];

A2EcriphCl□clcCniG(E

_GPIOCIRM-AF盟氏Tiph_AEI6EKABLEj;

 

2按键配置:

控制按键的端口:

PA15和PB4~7。

使能APB2总线上的GPIOA

以及GPIOB时钟,根据参数配置对应引脚

"按鞋曲K3K4_K5-

RCCAP32PeriphClockCrod(RCCJLP32Feripb&FIOBrENABLER;"使能蛍口对钟

〃_E拉豔入

"IO口速岌为

〃桎希设定参数初始比

GPIOInitStructure.GPIOPin=GPIOPin4|GPIOPin5|GPIOPinG|GPIOPin7;

GPIOInitStruct口工巴尼肌口讯口已亡=GPIO_Hod.e_IPU;

GPIOInitStracture.GPIOSpeed■GPI0_Sp-eed_2HHz:

GPIOInlt(GPIOB,.4GPIOInlcStT\icCurei;

//A15K1

RCC_JlP32PerlpiicioCkcn.d(RCC_AT32Eeilp31_^IOArENABLE];

GPIQ_I^ltStruc^Jie.GPIO_ein=GFIQ^Fin^lS;

GPIO^IniuStrucwre.GPIo2Mode=GPIQ_Ho5e_IPU;//上拉输入

GPIcTln士匸Srrncr口氓上口匸呂戶“=GPT0_5peed_5MH2;"2口纯度为龙曲忑

GPIOInit(SPTOArtGPIOInitStzucture);

3蜂鸣器:

控制蜂鸣器的端口为PB&APB2总线上GPIOB时钟已经使能可省

略,根据参数配置PB8端口

//E32

"推挽输出

"TO口速盏为SOKHe

〃根据设定参数初始化

〃蜂鸣器3PI0_InitSti,ictuie,GPI0_Pin-GPIOPi^S;

GPIOInit-St-neture.GFIOMode=GFIOMadeOutPF;GPIO_InitStructure.GPIO_Speed=GPIO_5peed_5OMHz;

GFIOI^ic(GEICE*i&PICInitStiucrure):

4数码管配置:

控制数码管的端口:

PE0~13p使能APB2总线上的GPIOE时

钟,根据参数配置对应引脚

voidCvoid)

GEIC_Ini「【ypeDef;

RCCAP32PerlphClo匚]cCmd(RUG_云FEZF£tipb_GFrJEFENABLE);J/-贷能F®FG^J时許NixietnUeGPIO^GPIOPin-0x3fff;//PEO-PE15

Nixierube2fiP10■GPIo2Mode=GFIO_Mode_Oat-_PP;//奉挠输出

N13£i*rilbe2Gpro-GproZs^eed=GPIC^SpeZd^aMHz;丿/工。

口速度为£0曲立

GPIC_InitTGPIOEf£Mixieti^e_GPZCT;_"根捋怎走参勲初始叱

5定时器配置:

voidtxmerset(void}

H

Tinf.£3*5^1aitlypeEsfTIH_r^e5ft5^St^Gt^eF

|//TIME272M

TIM_TlmeBastStructure.TIM_Per丄口赳-?

;

Z,II4_TiiLe3aseStz:

u.ct口:

r色“T工14_P:

r色mu良丄皂i:

=~-i

TIH_TiiEe3aseStru.cc口二巳■二工M.ClocIrDivision=IIH_CKD_DIV1;

TIH_Tin-已BaseStructure.riM_Caun匸昌三阿口毋巳=7IM_CounterMede_Up;TIM[Tiir上弓电Iiiit(TTH2,fIM_Iir.eBaseStructi:

re>:

TIN2cie&rFlag{TIM2.rTIH_FLAQ2DPdate);

TIM_ITC口nfig(T工止”TIMITUpdate,52JA3LE.7

TIHCm(TJM2fDISABLE);

具体设计

按键扫描设计:

当按键按下时,对应的10口为低电平,没有按下时为高电平

3-

uintStKeyScan(GFIO_TypeDef*GPIOx^uint16_tGPIO_Fin_x)Htin匸三_t

I---_--

if(GPIOReadlnputDaEaBit(GPIOx,GPIO^Pinx)―KEYON)

{

delay_ins(35);

if(GPlO_ReadInputDataBlt(GPIOk,G?

IO_Pin_x)=KE¥_ON)

i~-~~

returnKEYON;

}_

elac

{

returnKEY_OFF;

}

returnKEYOFF;

}_

数码管显示设计:

c:

.ir?

i9_diiplay(1,t-irzisdiaolay(2,E^rnadiaplay(3,

千頁十

a/lCCC^LC):

SPIOE->BSRR=s«L€|s;

"小数点

deU/(L);

二二rzimdisplay(4,a%10);

vcidNixie:

ubeligh-(uSnunru8

case1;f©10£->0»|=0^C01«:

;e?

ICE->ER=l=:

'Kjc-OfjFICE->BRB|=Ox:

'f:

;GPIflE^fl5RR|=

ase2:

(S,I0E->B5RR|-OlOODKO;GPI0E-)£HH|-0x3d00rBEHttTBHH|=OxCOf:

;CTKE->B5RH|=Nixi^itMca];

cue3:

(9I«->B5RR|«nxDOt]l«10;G?

ICZ-)fiRR|-DxlbQO;jPICi->BRt|-OxODfE;»IOZ^B3Rfi|-Hixi[x[第:

±];

case4;(fflOE->B5BR|=Ox«El«ll;GPKEJBRR|=0翊加半GPKX-3KU|=DxGDff;GPWEr>E5ER|=Blxie-i[daci];

5:

(亞1尢->^5茨-戶.x31:

_«12;C?

IC!

->EK=HlfL:

SPlOE-JSRfl±.k.j^!

;PICE->E£RI.|=血上匚工[弗泊]:

rase(Sn«->0OT|=ajOC5:

«:

3;t?

ICE-^RR=:

-xlfjDr:

PTOE-5BH1|=血门兰;SPME-〉貼碾|=Rixie\[da-a];

tieikUtreat;!

lirsak;}

bjsak:

br-at;|

翕知Wcr*d<

//恠次轮流显示数字

voldtum5_d.Laplay1,i^trum)(_

tiSn=

far(n=3;n<6;n+-1

{

delay

(1);

Nixietube_lj.ght(二,nuit);

超声波测距设计:

给TRIG至少10us的高电平信号,使用定时器中断法获得

ECHO输入端PC7低电平持续时间,即为超声波一来回所用时间如(黄线为ECHO输入信号,测出低电平所用时间)算出物体和超声波测距模块之间距离。

 

int翠匸Distance(丿三一算髭塞

GPIOFesetEita(GPIOC,3PIC_?

iL_S};//£生起產注信寻delay(5}?

_

GFI0_5etBitsIGFIOC,3PIC_?

in_G);厂反相战丸器先J后1

while(GPIORsadInputDaca:

ic(GEIO;fGPIC_Pin_7)==0)//S受疑g翻

(—--

TIMCnc(rrM2,ENABLE};

count=r;

1

Millie(GPIOR=atHnnurEacafiit(GPIO:

fGPI0_Pin_7)==:

)./芟爰筑±L

{一--

]HfftuGemimt«l,7;//Djstuce=((71+1}/72*10^]*(9+1)*Go™t*a4(}/2*100Q=Gaunt*!

.?

leu-irnDutan?

e;

|)

报警功能设计:

在进入数码管显示前对当前距离进行判断若小于报警距离则

启动蜂鸣器

"wiiiled)//进入超离波测距

{aDistance=getDistance()+10;

if(sDist&nssov)

{GPIO_SetBits(GPIO3,GPI0_Pin_E>;

delay[10};

GPIO_Res&EBits(GPIOSrGFIO_Pin_3):

}~~~

di3palv2tsDistance):

if(KeyScan(GPIOBrGPIO_Pin_^)=KEY_OK){goro3;

实验结果分析

实验结果

使用超声波测距模块、按键、蜂鸣器等实现了距离测量系统的设计,本设计

可实时测距以及暂停显示当前距离,实现了对距离的测量,具体功能如下:

1距离报警值的设置:

程序启动先进入报警值设置,通过按下按键KEY3KEY4分别使得报警值增大和

减小。

报警值会在数码管上显示,默认报警值为。

2实时测距系统:

此时程序循环获取当前距离并显示在数码管上,同时根据当前距离与距离报警值

选择是否启动蜂鸣器,若当前距离小于报警值则启动蜂鸣器。

此时按下KEY2则

进入距离保持状态。

3距离测量系统

此时超声波传感器暂停,数码管上保持显示上一时刻距离,按下KEY5可进入实

时距离测量,按下KEY1则会返回报警值设置。

结果分析

试验达到了预期的效果,实现了两种模式下的距离测量及两种模式的相互切

换,并实现距离报警值的设定与显示,当前距离小于报警值时进行报警。

误差在

5mm以内

实际距离与超声波测量距离

测量距离/cm

理论距离/cm

误差/mm

3

2

11

2

20

2

30

3

33

1

40

3

总结

实验中遇到的问题及解决办法

1数码管显示距离值时无小数点。

给需要显示小数点的数字的显示码“与”小数点显示码0x80再显示即可加

上小数点。

2每次按键设置报警值是报警值跳动太快

增加按键扫描函数里的延时即可。

试验心得

本次实验设计学会了如何熟练使用HC-SR04超声波测距模块、定时器、数码管等设备,加深了对寄存器,中断,库函数等的理解。

这次实验让我明白,遇到问题不要慌张,可以一步一步去测试是哪里出现问题,再重点解决。

多在网上查找资料,一步一步让实验成功

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1