. . . .
1.2.1回流信号放大电路
采用电路来实现测距仪功能的主要困难在于,回波小信号的检测。由于在接收探头的压电晶体两端产生的回波电信号极其微弱,在uV量级,因此要进行高增益的放大,然后才能进行有效的检测。在这里,我们采用了三个NPN型8050三极管的共射极交流耦合组态进行三级放大。在两级的级连处采用了0.1uF的电容进行交流耦合,集电极接至5V电源以提供集电结的反偏电压,基极接在两个串联50K电阻上,以获得直流工作点(2.5V)。放大之后的信号由上图中的SIGNAL端输出。
单极直流电流增益: 单级直流电压增益:
交流电压增益要低于直流增益,经过实测,此电路的三级交流电压增益在30000左右,可将uV级的电压信号放大至十至百mV的量级。 1.2.2 信号检波电路
经过回波信号放大电路,已经进入了数字芯片可以检测的围,但此时的信号仍为频率信号,并不能直接为单片机所识别。因此还需要一个检波译码芯片,能够识别出40KHz的频率波并将其转化为数字电平信号。
.. .. ..
. . . .
LM567为一种典型的音频信号译码芯片,音频信号由其3脚引入。当此音频信号的频率与LM567的设置频率相同时,则其第8脚的输出电平由高变低。LM567的设置频率由5、6脚之间接上的可调电阻器的阻值进行调节。
可变电阻调节方法:将一个40KHz的频率源连接到LM567的3脚,将LM567的OUT端连接至电压表,然后调节5、6脚之间的电位器直到OUT端的电平变低。
至此,微弱的回波电信号在此已转化为LM567的OUT端输出的可被单片机识别的数字电平信号。 1.3超声波测距程序设计 程序流程
.. .. ..
. . . .
源代码:
/*****************************************************************/ /* 文件名; clock_c */ /* 程序描述:显示时钟 */ /*****************************************************************/ //系统包含的头文件 #include
void _ADC_Interrupt(void); //ADC中断子程序
.. .. ..
. . . .
void _KBD_Interrupt(void); //键盘中断子程序 void _TOF_Interrupt(void); //定时器溢出中断子程序 void _TCH1_Interrupt(void);//定时器通道1中断子程序 void _TCH0_Interrupt(void);//定时器通道0中断子程序 void _IRQ_Interrupt(void); //外部中断中断子程序 void _Startup(void); //复位中断子程序 //用户子程序定义
void SYS_Init(void); //系统初始化子程序 void pled(unsigned char k);//串行数据输出子程序
void display(unsigned char dispchar,unsigned char n);//数码管显示子程序 //宏定义
#define CONFIG1_VAL 0x3D //用户配置config1寄存器的值 #define CONFIG1_ADR 0xFDEA //CONFIG1_VAL存放的地址 #define JMP_TAB_ADR 0xFDEB //用户中断向量起始地址 #define JMP_Code 0xCC //跳转指令直接寻址方式的指令码
typedef void (*tIntFunc)(void); //声明一个指向函数的数据类型 typedef struct jumpEntry { //声明一个结构体jumpEntry类型 unsigned char jmpIstr;
tIntFunc intFunc; //定义一个tIntFunc类型的变量 } JumpEntry;
//CONFIG1_VAL存放到CONFIG1_ADR定义的地址中
const unsigned char CONFIGX CONFIG1_ADR = CONFIG1_VAL; //定义各中断向量的中断入口
const JumpEntry IntJmpTable[] JMP_TAB_ADR = { //定义数组IntJmpTable,元素为JumpEntry类型
JMP_Code, _ADC_Interrupt, //AD转换中断矢量地址:$FDEB
.. .. ..
. . . .
JMP_Code, _KBD_Interrupt, //键盘唤醒中断矢量地址:$FDEE JMP_Code, _TOF_Interrupt, //定时计数器溢出中断矢量地址:$FDF1
JMP_Code, _TCH1_Interrupt, //定时器通道1溢出中断矢量地址:$FDF4
JMP_Code, _TCH0_Interrupt, //定时器通道0溢出中断矢量地址: $FDF7
JMP_Code, _IRQ_Interrupt, //IRQ矢量地址: $FDFA JMP_Code, _Startup //复位矢量地址:$FDFD };
//数码管显示编码 容为:{0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,-,三} const
unsigned
char
sgcode[20]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71, 0,0x40,0x49,0x66} ;
unsigned char dspbf[4]={0x0d,0x0c,0x0d,0x0c}; //存放待显示的数据 //unsigned char mscnt; //定时器溢出计数位
int backtime; 时间
Bool intflag=0; 中断标志
Bool intflag2=0; 志 int temp; int temp1;
//主程序开始
//定义一个全局变量,存储超声发射标
//定义一个全局变量,存储超声接收
//定义一个全局变量,存储超声波传播
.. .. ..
超声波测距仪实验报告



