原创 超声波测距器的设计

2008-11-19 00:46 3241 13 19 分类: MCU/ 嵌入式

                             超声波测距器的设计


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


 


超声波测距器在汽车倒车,建筑工地和一些工业现场有着很广泛的用途。其测量范围0.10~<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.0 m,测量精度可高达1 cm左右。


579b256c-bdf4-4df1-b62d-3259cc17caaa.jpg



                                                1.1


本设计采用新型8051控制器c8051f020,系统采用22.1184MHZ的高精度晶振,来获得稳定的时间频率,以减少测量误差。C8051f020P3.0端口输出超声波换能器所需的40khz方波信号,利用中断口检测超声波接收电路输出的返回信号。显示电路采用SPI延伸的LCD1602液晶。


 


本设计的重点就是超声波的接收和发射电路。


超声波的发射电路如下图1.2


点击看大图


                          图1.2


发射电路主要由反向器74HC04和超声波换能器构成,P3.0端口输出的40khz方波信号一路经反向器送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种方式可以提高超声波的发射强度。


超声波接收电路如下图1.3


点击看大图


                                            1.3


集成电路CX20106A是一款红外接收的专用芯片,常用于电视红外遥控器。常用的载波频率38khz与测距的40khz较为相近,可以利用它来做接收电路。适当的改变C3的大小,可以改变接受电路的灵敏度和抗干扰能力。


显示电路如下图1.4


d73174be-1fa5-468f-9570-7a8b525dc5ea.jpg


                                               1.4


采用c8051f020 SPI 从而驱动595控制lcd1602. 其中LCDCS595的片选信号


本设计把片选信号 定义为P3.1 .


sbit   LCDCS  P3^1;


 


另一个重点就是超声波测距的算法计算。


D =  S/2(v+t)/2     ---------------------------------------------------------------------------1-1


其中D为被测物与测距器的距离。


    S为声波的来回路程。


    V为声速。


    T为所用时间。


 


C8051F020 外设及其丰富,本设计只用到了外部中断和SPI的部分管脚,在此基础上还可以增加不少内容,纯粹使用前后台系统,会使系统的适时性受到限制,在下篇我会详细介绍基于c8051f020的ucos_II的移植。


代码部分:


 


//-------------------------------------------------------------------------


//  SPI_Init()


//-------------------------------------------------------------------------


void SPI0_Init (void)


{


   SPI0CFG = 0x07;                     // data sampled on 1st SCK rising edge


                                       // 8-bit data words


   SPI0CFG|=0x40;                      //CKPOL =1;01000111


 


   SPI0CN = 0x03;                      // Master mode; SPI enabled; flags


                                       // cleared


   SPI0CKR = SYSCLK/2/2000000-1;       // SPI clock <= 8MHz (limited by


                                       // EEPROM spec.)


}


 


void MSPI_SendData(unsigned char  ddata)


{ 


    LCDCS = 0;                      // 片选HC595


     SPIF = 0;


     SPI0DAT = ddata;


     while (SPIF == 0);                   // 等待写结束


    LCDCS = 1;


}


 


 


                        ----------------------------------zjw5000   2008-11-18 

PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

用户462956 2009-1-16 16:58

有什么好文章大家共享嘛

用户925035 2008-12-25 17:26

呵呵,不是做研究的,只是想把c8081f的模块都熟悉下。有点舍近求远了

用户925035 2008-12-24 14:28

22RMB左右吧

用户1191552 2008-12-17 23:15

简单问题复杂化,你是不是学校研究的啊?

用户925035 2008-11-20 16:36

好的啊 ,有什么好文章大家共享嘛。

用户174122 2008-11-20 12:25

可以转载你的文章吗
相关推荐阅读
用户925035 2009-11-15 00:44
通用按键消抖函数 -- 数据与过程分离
AUTO:  nicksean 不务正业          项目里经常处理按键消抖, 本来这个消抖的过程是与具体按下的键无关的, 可以前的代码总是在消抖的同时处理具体的按键值, 再加上长按 短按 组合...
用户925035 2009-11-13 13:16
液晶ST7920串行显示
液晶显示128*64以7920为主控制器,采用3线制,比较经济简单。代码如下.....
用户925035 2009-11-13 13:11
DS18B20 C51完整版
使用WINBOND W78C516单片机,11.0592MHZ晶振,用共阳LED数码管P0口输出段码,P1口扫描/*******************************************...
用户925035 2009-11-12 13:19
74HC164驱动数码管
          74HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品...
用户925035 2009-11-10 20:13
at24c512多字节读写函数 欢迎测试
刚写的at24c512多字节读写函数,欢迎测试。/********************************************************************函数功能:EE...
用户925035 2009-11-10 19:59
旋转编码器
    很好的旋转编码器的读码程序,设旋转编码器的输出波形如下                 ______        ______        ______        ______正转时:...
我要评论
6
13
关闭 站长推荐上一条 /3 下一条