西北工业大学嵌入式Word文件下载.docx
- 文档编号:21421866
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:14
- 大小:537.02KB
西北工业大学嵌入式Word文件下载.docx
《西北工业大学嵌入式Word文件下载.docx》由会员分享,可在线阅读,更多相关《西北工业大学嵌入式Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
)。
Avg_Slope=温度与Vsense曲线的平均斜率(单位为mv/°
C或uv/°
C)(典型值为°
C)。
利用以上公式,我们就可以方便的讣算出当前物体超声波模块之间的距离。
程序中使用:
测试距离二高电平时间*声速⑶0M/S))/2这个公式
设计要求
使用ARM开发板上硬件资源与超声波模块结合,编程实现实时距离显示功能,通过数码管实时显示距离,并在距离小于设定报警距离时使用蜂鸣器报警。
总体设计方案及框图
距离测量及获取方法
通过设置定时器,开启中断,读取ECHO输出高电平的持续时间,计算结果作为当前距离。
总体设计方案
实时距离:
本超声波测距系统可实现对距离的实时测量,并不断显示在数码管上
保持距离:
用户可通过按键使得当前距离值在数码管保持,也可再次返回对距离的实时测量,此模式下距离小于报警值不会报警,仅为显示模式。
两种模式相互转换,并且可以在距离保持状态时通过按键进入修改报警距离模式,如果实测距离小于下限值,蜂鸣器报警,当距离大于下限值时,报警自动停止。
程序框图
第二章正文
要求重述及分析
2.1.1设计任务
超声波测距系统
使用STM-32开发板上硬件资源及HC-SR04超声波测距模块,编程实现超声波测距功能,通过数码管实时显示距离。
要求分析
1使用HC-SR04超声波测距模块以及stm-32自带数码管、LED等
2实现实时距离测量功能,通过数码管实时显示当前距离:
设计程序实现对距离报警值的设定,并在低于报警值时使用蜂鸣器等进行提示。
相关配置具体设计
相关配置
1输入口输出口配置:
将PC8设为与Trig相连的输出口,将PC7设置为接收Echo返回数据的输入口。
使能APB2总线上的GPI0C时钟,根据参数配置对应引脚。
GPIO^InitT^eDef3PIC_InitStruccure;
GPIO^PinRenapConfigtGPIO^Remap^SWJ^JTAGDisable.ENABLE);
//关闭jtag
RCC_AP52EeriphClockCiriC(RCC^APSZPeript^GPiOC|RCO_AP52Eeriph_ArIOfENABLE);
GPIO_InitStruc^ure.GPIC^Fin=TRIG_PIN;
GPIO^InitStructure.GPIOJ^ode=SPIC^Mcde^Out^PP;
GPIO^InitStrucLure.GPIO^Speed=SPIC^Sreed^dOMMz;
GPIO^Init(TR]:
G_PORT,&
GFIO_InitScructure)
GPIO_IritStruc-ure.GPIO^Ein=E3HC_PIN;
GPIO^InitStructure.GPIOJ<
ode=SPIC_Mcde_IPD;
GPIO~Init(ECHOPORT,&
GFIOInitScructuxe?
;
t**r^—•—
〃PC7接ECHO
〃设为输入
ECHOEIN
GPIO_Pi?
:
_7
2按键配置:
控制按键的端口:
PA15和PBC7o使能APB2总线上的GPIOA以及GPIOB时钟,根据参数配置对应引脚。
〃按键K2K3K4"
X5
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBfENABLE);
//使能端口时钟
GPIO_InicStrucwre.GPIO^Pin=GPIO__Pin_4|GPIO_Pin_5|GPIOPin6|GPIO_Pin_7;
GPIO^InitStrucwre.GPIOJ4ode=GPIO_Mode_IPU;
"
"
//-E拉输入一一
GPIO^InicStrucwre.GPIO^Speed=GPIO_5peed_21-IHz;
//HO口逹度为2MHz
GPIo2lnit(GPIOBr&
GPIO_InitStruecure?
//根据设定參数初始化
//A15KI一
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOAfENABLE);
GPIO_InicStructure.GPIO^Pin=GPIO__Pin_15;
GPIO^InitStrucwre.GPIOJ-iode=GPIOJ-Iode^IPU;
//上拉输入
GPIO^InicStructure.GPIO^Speed=GPIO_5peed_2i-IHz;
GPIOInit(GPIO2ir&
GPIOInitStxucture);
3蜂鸣器:
控制蜂鸣器的端口为PB8。
APB2总线上GFIOB时钟已经使能可省略,根据参数配置PB8端口。
//蜂鸣器
//P38
〃推挽输出
〃10口速•度为50MHz
//根据设定参数初始化
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStru.cture.GPIO_Mode=GPIO_ModeOutPP;
GPIO_InicScrucEure.GPIO_Speed=GPIO_Speed_501-IHz;
GPI0_Init(GPIOB,&
&
PIO_InitStiucture);
4数码管配置:
控制数码管的端口:
PE0~13。
p使能APB2总线上的GPIOE时钟,根据参数配置对应引脚。
voidNixietilbe^init.(void}
1i"
GPIO_InitTypeDefNixiecube^GPIC;
RCC_AP32PeriphClockCmd(RCC_APB2Periph^GPIOE,ENABLE);
//•使能PG,PC端口对钟
Nixievube^GPIO・GPTO_P:
Ln=0x3fff;
//PEO一PE15
Nixievube^&
PIO・GPIOJ4ode=GPIO_Mode_Out_PP;
//推挽输出
Nixie-eube^&
PIO・GPIO^Speed=GPIO_Speed_5014Hz;
//HO口逢.复为50MHz
GPIO_Init7GPIOEf&
Nixiett2be_GPIoT;
~//根揺设定参数初始化
}"
5定时器配置:
voidtiznerset(void.)
TIM_TimeBaselnitTypeDefTIM_TimeBaseStructure;
|//TIME272M一
TIM__TimeBaseStruezure・TIM__Period=9;
TIM_TimeBaseStruezure・TIM__Prescaler=71;
IimeBaseStru.ccure.TIM_ClockDivision=TIM_CKD__DIV1;
TIM_TimeBaseStru.cture.TIM_CouncerMode=IIM__CouncezMode_Up;
TIM_TimeBaseInit(TIM2F&
TIM_TxmeBaseScr口o匸口ru);
TIM2ciearFlag(TIM2,TIl^FLAG^Updace);
TIM2lTConfig(TIM2zTIM_IT_Updace,ENABLE};
TIM~Cmd(TIM2zDISABLE)?
具体设计
按键扫描设计:
当按键按下时,对应的10口为低电平,没有按下时为高电平
/
uintSzKeyScan(GPIOTypeDef*GPIOxfuintl6zGPIOPinx)//uintSz
{_-一一一-
if(GPI0_ReadInputData3it(GPIOx,GPIO_Pin_x)==KEY^ON)
{
delay_ms(35);
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_x)==KEY_ON)
returnKEY_ON;
}
else
returnKEY_OFF;
数码管显示设计:
voiddispal/2(inta)
//小数点
curns^diaplaya/lCOO%lC);
//千a/lCC%10);
〃百curns^diaplay(3fa/lC%10);
〃十SPIOE->
3SRR=s«
161s;
delay(l);
curns^diaplay(4ra%lC);
〃个
voidNixiecube^lighc(u8nuitfu8data){~
switch(nun)
case-
case2
case3
case4
case5
case6
{GPI0E->
3SRR
{GPIOE->
BSRR
第几世
1=
0x0002«
e;
uxOCO:
«
9;
0x0001«
10;
ll;
OxOCOL«
12;
0xOC01«
13;
GPIOH->
BRR
GPIOE->
BRRGPIOE->
GPIOS->
|=0x3e90;
|=0x3d00;
|=0x3b00;
|=0x3700;
|=9x2f00;
|=OxlfOO;
数字493PI0E->
3RR|=OxOOff;
3PIOE->
BSRR|=Nixie
BRR|=OxOOff;
jc[曲a];
break;
x[aaca];
x[daca];
default:
brea<
〃依次轮流显示数字
voidturns_diaplay(int±
rintnvim){_
uSn=0;
for(n=0;
n<
6;
n++)
delay(1>
Nixietube^light(i#num);
超声波测距设计:
给TRIG至少lOus的高电平信号,使用定时器中断法获得
ECHO输入端PC7低电平持续时间,即为超声波一来回所用时间如(黃线为ECHO输入信号,测出低电平所用时间)算岀物体和超声波测距模块之间距离。
GPI0_Re3etBit3(GPIOCr3PIC_Pin_8);
//发生超主波信号
delay(5);
GPIOJecBits(GPIOC,SPIC_Pin_8);
//反相放夭器先J后1
while(GPIO_RsadInputEa-aBit(GEIO2rGPIO_Pin_7)==0)//接受端gan
{一"
Tm_Cnd(TIM2zENABLE);
count:
=0;
while(GPIO^RsadlnputEa^aBit(GEIO:
fGPI0_Pin_7)==:
)〃接受端:
k
count*1.7
{一一
Distance=ccunc*1.7;
//Distance=[(71-1)/72*10"
6]*(9+1)*ccun3*340/2*1000
}returnDistance;
报警功能设讣:
在进入数码管显示前对当前距离进行判断若小于报警距离则
启动蜂鸣器
while⑴//连入超声波测距
{sDistance=get_Distance()+10;
if(sDistance<
sv)
{GPIO_SetBits(GPIOB,GPIO_Pin_8}:
delay(10);
GPIO_ReserBirs(GPIOB,GFIO_Pin_8);
}~
dispaly2(sDistance);
if(KeyScan(GPIOB,GPIO_Pin_4)==KEY.ON)
{gotoB;
}}}
实验结果分析
实验结果
使用超声波测距模块、按键、蜂鸣器等实现了距离测量系统的设讣,本设计可实时测距以及暂停显示当前距离,实现了对距离的测量,具体功能如下:
1距离报警值的设置:
程序启动先进入报警值设置,通过按下按键KEY3、KEY4分别使得报警值增大和减小。
报警值会在数码管上显示,默认报警值为。
2实时测距系统:
此时程序循环获取当前距离并显示在数码管上,同时根据当前距离与距离报警值选择是否启动蜂鸣器,若当前距离小于报警值则启动蜂鸣器。
此时按下KEY2则进入距离保持状态。
3距离测量系统
此时超声波传感器暂停,数码管上保持显示上一时刻距离,按下KEY5可进入实时距离测量,按下KEY1则会返回报警值设置。
结果分析
试验达到了预期的效果,实现了两种模式下的距离测量及两种模式的相互切换,并实现距离报警值的设定与显示,当前距离小于报警值时进行报警。
误差在5mm以内
实际距离与超声波测量距离
测量距离/cm
理论距离/cm
误差/mm
3
2
11
20
30
33
1
40
总结
实验中遇到的问题及解决办法
1数码管显示距离值时无小数点。
给需要显示小数点的数字的显示码“与”小数点显示码0x80再显示即可加上小数点。
2每次按键设置报警值是报警值跳动太快
增加按键扫描函数里的延时即可。
试验心得
本次实验设计学会了如何熟练使用HC-SR04超声波测距模块、定时器、数码管等设备,加深了对寄存器,中断,库函数等的理解。
这次实验让我明口,遇到问题不要慌张,可以一步一步去测试是哪里出现问题,再重点解决。
多在网上查找资料,一步一步让实验成功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西北工业大学 嵌入式