基于CX20106超声波测距的调试
在超声测距中,一般采用40KHz的信号。可以通过硬件来产生,比如555,CMOS电路CD4046。还可以通过软件来产生。本方案中采用 单片机软件产生。
关于40KHz信号的产生。如果用单片机定时器中断产生,要特别注意中断服务程序的编写。中断服务不能过长,如果过长,单片机在前一个中断服务程序还没执行完之前,又会有下一个中断产生。所以,单片机将会产生一个错误频率的信号。往往这个错误的频率会比预期的值偏低。比如程序原本要产生一个40KHz的信号。实际单片机只能产生一个20KHz左右的信号。(金聚宝电子提供的程序仅供参考)
40KHz的信号可以用一个汇编语言子程序来产生。程序如下:
NAME CS_T
? PR? CS_T? CS_T SEGMENT CODE
PUBLIC CS_T
RSEG ?PR?CS_T?CS_T
CS_T: PUSH ACC
MOV TH0, #00H
MOV TL0, #00H
MOV A, #4D
SETB TR0
CST_1: CPL P1.0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ ACC,CS_T1
POP ACC
RET
;
END
平常C语言用的很多,我个人觉得C语言更富有亲切感。40KHz的信号可以用一个汇编语言子程序来产生。程序如下
/************************************
*输入整型i,从p3_5端口产生i/2个方波
*************************************
*/
cs_t(unsigned char i)
{
while(i--)
{
P3_5=!P3_5;
Some_Nop_T();
}
}
以下为超声波的接收电路

关于CX20106的调试。其内部结构如图1
图1
在图2中
R4和C3 是控制CX20106 内部放大增益,R5控制带通滤波器的中心频率。一般取R4=4欧,C3=1Uf.。其余元件按图2取值。US_T为超声波接收头,OUT_INT当收到超声波是产生一个下降沿,接到单片机的外部中断上。
一些资料表示,在CX20106的1脚输入0.2mV的信号。在5脚将会输出滤波后放大的有用信号。在实测中,5脚并没有一个放大的信号输出。实际调试的时候只关心芯片的7脚在收到信号是是否有一个下降沿产生。
在本电路的调试中,如果一直发射超声波,在7脚将会有周期的低电平产生。不会像通常认为的那样,即一直发射信号时,7脚一直为低电平。这是刚用CX20106时的一个常见错误。只要通过单片机来来计算发射信号时到收到信号是产生下降沿这段时间的长度,再通过数学计算,转化为距离,然后在显示器上显示。
用户569053 2009-5-12 10:29