西北工业大学嵌入式stm32超声波测距Word文件下载.docx
- 文档编号:6838862
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:13
- 大小:140.11KB
西北工业大学嵌入式stm32超声波测距Word文件下载.docx
《西北工业大学嵌入式stm32超声波测距Word文件下载.docx》由会员分享,可在线阅读,更多相关《西北工业大学嵌入式stm32超声波测距Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
测试距离=高电平时间*声速(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<
CC_AFB2esrIpl:
_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;
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;
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
20
30
33
40
总结
实验中遇到的问题及解决办法
1数码管显示距离值时无小数点。
给需要显示小数点的数字的显示码“与”小数点显示码0x80再显示即可加
上小数点。
2每次按键设置报警值是报警值跳动太快
增加按键扫描函数里的延时即可。
试验心得
本次实验设计学会了如何熟练使用HC-SR04超声波测距模块、定时器、数码管等设备,加深了对寄存器,中断,库函数等的理解。
这次实验让我明白,遇到问题不要慌张,可以一步一步去测试是哪里出现问题,再重点解决。
多在网上查找资料,一步一步让实验成功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西北工业大学 嵌入式 stm32 超声波 测距