基于msp4306638的超声波测距 - 图文

更新时间:2023-11-08 06:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

作者姓名:吴磊(超声波测距)

超声波测距仪设计实验报告

引言

随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。展望未来,超声波测距仪作为种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,以满足日益发展的社会需求,如声纳的发展趋势基本为:研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需要;继续发展采用低频线谱检测的潜艇拖曳线列阵声纳,实现超远程的被动探测和识别;研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;大力降低潜艇自噪声,改善潜艇声纳的工作环境。无庸置疑,未来的超声波测距仪将与自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。

一 课题要求

设计超声波测距系统,设计要求:

(1)用给定的超声波模块制作超声波测距系统; (2)用按键实现测距、清零、复位等控制; (3)用4 位LED 数码管或液晶显示测量到的距离。

二 实验原理

超声波在液体、固体中衰减小、穿透力强、对某些固体、穿透深度能达到几十米的范围;另外,超声波方向性好,能够定向传播。因此,可以作为物体探查和进行测量的可靠手段。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停 止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2。

1

作者姓名:吴磊(超声波测距)

三 整体电路设计

整体电路的控制核心为单片机msp430f6638。超声波发射和接收电路中都对相应信号进行整形及放大,以保证测量结果尽可能精确。超声波探头接OUT口实现超声波的发射和接收。整体结构图包括超声波发射电路,超声波接收电路,单片机电路,显示电路和清零电路等几部分模块组成。

整体电路结构图如图4-1。

Msp430单片机 图2-1超声波测距原理图

单片机发出40kHZ的信号,经放大后通过超声波发射器输出;超声波接收器将接收到的超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行判别、计算,得出距离数并送液晶显示。

超声波模块输入 超声波模块输出 段式数码管显示 按键清零程序 四 系统的硬件电路设计

硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。单片机采用 msp430f6638 。采用 8MHz 高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用 IO 端口输出超声波启动的脉冲信号,利用外中断口监测超声波接收电路输出的返回信号。显示电路采用简单实用的段式数码管。

4.1 单片机的功能特点及应用

2

作者姓名:吴磊(超声波测距)

MSP430F6638 教学开发系统由主板及电池板、键盘板、电机板3个子板构成。系统核心 CPU采用 TI公司MSP430系列16位超低功耗MCU中最新的F6638芯片,系统还拥有丰富的外设资源与接口, 不但可以作为单片机实验教学平台, 还可以作为工业控制、 无线射 频应用、物联网系统等开发与评估平台使用。

图4-1 Msp430最小系统

4.2 单片机在本实验中的应用

本实验中msp430单片机P1.0用于超声波发射电路,P4.0用于接收电路,P4.4用于清零功能的开关。,P5. 3,P5.4,P5.5用于液晶屏的显示。

3

作者姓名:吴磊(超声波测距)

图4-1 msp430f6638单片机实物图

4.3 超声波模块

4.3.1超声波测距原理

压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信 号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波 时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。

4

作者姓名:吴磊(超声波测距)

图4-2 超声波模块实物图

4.3.2 超声波模块工作特点

(1)采用IO口TRIG触发测距,给至少10us的高电平信号; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口ECHO输出一高电平,高电平持续的时间就是 超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2; 4.3.3 超声波电路原理图

5

作者姓名:吴磊(超声波测距)

图6-3 超声波模块电路原理图

4.4 段式数码管显示模块

液晶显示器 (LCD/Liquid Crystal Display)的显像原理,是将液晶置于两片导电玻璃之间,靠两个电极间电场的驱动,引起液晶分子扭曲,以控制光源透射或遮蔽功能,在电源关开之间产生明暗而将影像显示出来,若加上彩色滤光片,则可显示彩色影像。 常见的液晶显示器分为 TN-LCD(扭曲向列 LCD)、STN-LCD(超扭曲向列 LCD)、DSTN-LCD(双层超扭曲向列 LCD)和 TFT-LCD(薄膜晶体管 LCD)四种。它们的显示原理主要是利用液晶的扭曲向列型(TN)效应配合偏光板来实现对光线通过路径的"开"和"关"的。

6

作者姓名:吴磊(超声波测距)

将所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。将所有数码管的8个显示笔划\的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

液晶数码管与传统的显像管显示器相比,其优点如下: 一、显示质量高

由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不象阴极射线管显示器(CRT)那样需要不断刷新亮点。因此,液晶显示器画质高而且绝对不会闪烁,把眼睛疲劳降到最低。 二、没有电磁辐射

传统显示器的显示材料是荧光粉,通过电子束撞击荧光粉发光显示,电子束在打到荧光粉上的一刹那间会产生强大的电磁辐射,尽管目前有许多显示器产品在处理辐射问题上进行了比较有效的处理,尽可能地把辐射量降到最低,但要彻底消除是困难的。相对来说,液晶显示器在防止辐射方面具有先天的优势,因为它根本就不存在辐射。 三、可视面积大

7

作者姓名:吴磊(超声波测距)

对于相同尺寸的显示器来说,液晶显示器的可视面积要更大一些。液晶显示器的可视面积跟它的对角线尺寸相同。阴极射线管显示器显像管前面板四周有一英寸左右的边框不能用于显示。

五、数字式接口

液晶显示器都是数字式的,不像阴极射线管显示器采用模拟接口。也就是说,使用液晶显示器再也不需要像往常那样把数字信号转化成模拟信号再行输出了。理论上,这会使色彩和定位都更加准确完美。 七、“身材”匀称小巧

传统的阴极射线管显示器,后面总是拖着一个笨重的射线管。液晶显示器突破了这一限制,给人一种全新的感觉。传统显示器是通过电子枪发射电子束到屏幕,因而显像管的管颈不能做得很短,当屏幕增加时也必然增大整个显示器的体积。而液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示目的,即使屏幕加大,它的体积也不会成正比的增加,而且在重量上比相同显示面积的传统显示器要轻得多。

4.5 开关模块

8

作者姓名:吴磊(超声波测距)

开关模块为按键式开关,一段与GND连接,一段与串口连接,可以通过电路原理图查找相应的端口,方便且安全,外形美观小巧

图8-1 开关模块实物图

9

作者姓名:吴磊(超声波测距)

图8-2 开关模块电路原理图

五 仿真图形和最终实验结果

前期一直得不到想要的脉冲波,一直是高电平 ,开始以为是for循环受到了中断的影响后来发现是开了XT2晶振的缘故,系统本身晶振一开始,重复开启导致系统出现了错误,输出不了低电平,后来删掉了晶振,得到了想要的完美脉冲波形

图5-1 脉冲波示波器显示

如图5-2经过最终的调试,当障碍物距超声波模块5cm处时,显示屏上显示了“5”,即代表所测距离为5cm,与实际相符

10

作者姓名:吴磊(超声波测距)

图5-2 最终实验结果

5.1 程序框图

Y N

11

开始 初始化 开启中断和计时器 判断是不是上升沿 计时器清零开始计时 计时器停止并输出结果 输出到显示屏 作者姓名:吴磊(超声波测距)

5.2 主函数模块说明

WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 P1DIR|=BIT0;

P4SEL|=BIT0; //P4.0作为捕获模块功能的输入端输入方波 P4DIR &=~BIT4; //定义P4.4输入 P4REN |=BIT4; // 上下拉电阻使能 P4OUT |=BIT4; //设置为上拉电阻 P4IES|=BIT4; //使能中断

P4IE|= BIT4; //下降沿触发中断

首先定义超声波模块的输入和输出,还有开关模块的输入,一开始的时候知识定义了开关模块的输入,并没有上拉使能和使能中断,导致开始程序调试不出来,后来参考了以前单片机实验的程序和课本,定义了相关使能,在端口测到了电压的变化

5.4 定时器设置模块说明

TBCCTL0&=~(CCIS1+CCIS0); // 捕获源为P4.0,即CCI0A(也是CCI0B) TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式 TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求 TBCTL|=ID_3; //输入始终8分频 TBCTL|=TBSSEL_2; //选择时钟MCLK TBCTL|=TBCLR; //定时器清零, TBCTL|=MC_2; //定时器开始计数(连续计数模式0~0xFFFF)

initLcdSeg() ; //初始化液晶屏 _EINT();

定时器模块我用的是我相对较熟悉的timeB定时器,定义了捕获端口,开启了同步捕获模式,并允许捕获比较模块提出中断请求,我在这个时候就已经开启了定时器,当捕获到相应的上升沿和下降沿后计时器会进行相应的清零和结束,如果捕获到上升沿在开始计数的话会有较大的误差,所以我采取了这种方式

5.5 定时器中断模块说明

#pragma vector=TIMERB0_VECTOR

12

作者姓名:吴磊(超声波测距)

__interrupt void TimerB0(void) {

if(TBCCTL0&CM0) //捕获到上升沿 {

TBCTL|=TBCLR;

TBCCTL0=(TBCCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一 }

else if(TBCCTL0&CM1) //捕获到下降沿 {

width=TBCCR0; //记录下结束时间

TBCCTL0=(TBCCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1置零, float_range=0.15*width;//计算距离,单位毫米

定时器中断模块我没有采用if else 说明函数而是,定义了2种中断情况,一种是捕获到上升沿,此时计数器清零,开始计时 ,清除中断标志,再次进入for循环函数,到捕获到下降沿时再次进入中断函数,此时计数器停止,记录计时器记录的时间并乘以相应的系数并输出,系数是根据实际情况计算出的,理论数值没有考虑温度,湿度和超声波模块电路等相应情况,所以相对于实际系数偏大

5.6 创新模块—计数清零

#pragma vector=PORT4_VECTOR __interrupt void port_4(void) { P4IFG &=~BIT4; if((P4IN&BIT4)==0) //按键S7 __delay_cycles(16000); //延时去抖 LCDSEG_DisplayNumber(0,0); __delay_cycles(MCLK_FREQ/32);

//延时

此模块我是我自己创新,独立写出来的,花了较多时间,别人的譬如“清屏模块”对此模块有较多的借鉴。

13

作者姓名:吴磊(超声波测距)

我一开始编写这个模块的时候本来想把这个中断加入for循环里,但是发现当定时器中断来的时候for语句暂时不执行导致失败,后来在网上查询了相关中断优先级和嵌套,发现端口的中断优先级高于定时器中断优先级,即当这2个中断同时来临的时候,单片机优先执行端口的中断函数,执行完后才执行定时器中断,于是在函数中又加了一个端口中断,并让它显示“0”的时间略长于测量时间,最终完美得到了想要的结果。

图5.6.1 清零模块展示

六 心得体会

刚开始的时候困难很多,在网上找到了一些例程,但都不是msp430f6638的,发现上面有好多430的程序的寄存器6638都不认识,为此仔细查阅了课本,找到了对应的寄存器,然后在脉冲产生模块耽搁了好久,一直输出高电平,一开始认为是中断影响了点评输出,后来发现是因为程序开启了XT2寄存器,删除后就能输出正确波形了 ,超声波模块调试完成后发现显示模块有点迟钝,后来发现知识延时问题,当减小屏幕延时后,示数也就灵敏许多。硬件软件调试完毕后与其他组交流经验,导致后来程序雷同度不小,也是有点尴尬。这几天的调试由于网上的例程几乎没有,所有的信息都是来源与课本和4次单片机实验,导致课设难度不小,同时我也发现了自己在C语言编程上的不足,不得不翻起了以前的课本完善了相关的知识。

14

作者姓名:吴磊(超声波测距)

在课设的前期我不止一次想放弃用msp430编程,采用网上例程相对较多的51单片机调试,但由于51的复杂最终放弃了,后来也想过用参加过的“飞思卡尔智能车竞赛”用的K60单片机调试,因为同学可以给与更多的编程帮助,后来也放弃了,以为我一开始就是准备用msp430来调试,后来在老师和同学的无私的帮助下,克服了许多困难,最终成功完成了本次课设。

七 附录

7.1程序:

#include

#include \调用段式液晶驱动头文件 #define XT2_FREQ 4000000

#define MCLK_FREQ 16000000 #define SMCLK_FREQ 4000000

#define CPU_F ((double)8000000)

#define DelayUs(x) __delay_cycles((unsigned long)(CPU_F*(double)x/1000000.0)) #define DelayMs(x) __delay_cycles((unsigned long)(CPU_F*(double)x/1000.0))

unsigned int width; float float_range; unsigned int_range;

void main() {

WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 P1DIR|=BIT0;

P4SEL|=BIT0; //P4.0作为捕获模块功能的输入端输入方波 P4DIR &=~BIT4; //定义P4.4输入 P4REN |=BIT4; // 上下拉电阻使能 P4OUT |=BIT4; //设置为上啦电阻 P4IES|=BIT4; //使能中断

P4IE|= BIT4; //下降沿触发中断

15

作者姓名:吴磊(超声波测距)

TBCCTL0&=~(CCIS1+CCIS0); // 捕获源为P4.0,即CCI0A(也是CCI0B) TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式 TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求 TBCTL|=ID_3; //输入始终8分频 TBCTL|=TBSSEL_2; //选择时钟MCLK TBCTL|=TBCLR; //定时器清零, TBCTL|=MC_2; //定时器开始计数(连续计数模式0~0xFFFF)

initLcdSeg() ; //初始化液晶屏 _EINT();

for(;;) { P1OUT|=BIT0; //输入高电平 DelayMs(10); P1OUT&=~BIT0; //输入低电平 DelayMs(100); } }

//―――――定时器TB的CCR0的中断:用于检测脉冲上升与下降沿―――― #pragma vector=TIMERB0_VECTOR __interrupt void TimerB0(void) {

if(TBCCTL0&CM0) //捕获到上升沿 {

TBCTL|=TBCLR;

TBCCTL0=(TBCCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一 }

else if(TBCCTL0&CM1) //捕获到下降沿 {

width=TBCCR0; //记录下结束时间

TBCCTL0=(TBCCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1置零, float_range=0.15*width;//计算距离,单位毫米

LCDSEG_DisplayNumber(float_range,0); //显示六位数,从111111-999999 __delay_cycles(MCLK_FREQ/32); //延时 }

16

作者姓名:吴磊(超声波测距)

}

#pragma vector=PORT4_VECTOR __interrupt void port_4(void) { P4IFG &=~BIT4; if((P4IN&BIT4)==0) //按键S7 __delay_cycles(16000); //延时去抖 LCDSEG_DisplayNumber(0,0); __delay_cycles(MCLK_FREQ/32); }

//延时

8.1参考资料:

[1] 熊壮. 程序设计技术.重庆大学出版社,2006.

[2] 李丽霞.单片机在超声波测距中的应用[J] .电子技术,2002 ,29 (6) :7-9.

[3] 宋永东,周美丽,白宗文.高精度超声波测距系统设计[J],《现代电子技术》2008 年第 15 期总第

278 期.

[4]沈建华 杨艳秦 MSP430超低功耗单片机原理与应用 清华大学出版社 2005.

17

本文来源:https://www.bwwdw.com/article/it32.html

Top