《小目微弱信号检测电路设计.docx》由会员分享,可在线阅读,更多相关《小目微弱信号检测电路设计.docx(8页珍藏版)》请在三一办公上搜索。
1、小目微弱信号检测电路设计小目标微弱信号检测电路设计 在靶场测试领域,天幕靶是一种常用的光电触发设备。既可以用作区截装置测量弹丸的飞行速度,也可采用多幕交汇技术测量弹丸的着靶坐标,还可以作为其他设备的测试触发装置。但现有天幕靶灵敏度低、视场小、抗干扰能力差。本文设计了一种小目标微弱信号检测电路,通过光电二极管进行光电信号转换,并且设计了信号放大电路与滤波处理, 有效地滤除了干扰信号, 提高了天幕靶抗干扰能力。 硬件设计 整体流程图如下图所示,光电探测器将接收到的光信号转换为电信号,并通过前置放大电路与主放大电路进行信号放大,电压比较器可以将电信号转换成脉冲,经过滤波电路将干扰信号去除后送入单片机
2、的中断控制口,单片机产生中断,处理中断程序,然后会有脉冲输出,脉冲经过信号输出电路进行整形,由于输出信号需要进行长距离的传输,因此需要驱动电路将信号驱动。图1为整体设计硬件原理图。 图1 整体设计硬件原理图 光电转换电路 利用可见光探测器单元硅PIN光电二极管作为光电转换期间来完成光信号到电信号的转换。这种器件体积小而且响应速度快,被广泛的应用于光电检测。光电二极管是半导体产品,当它受到光照时会产生电流或电压。它们没有内置增益,但与其他类型的光子探测器相比却有着更大的动态范围。本电路设计采用20只光电二极管连接起来形成阵列。图2为其中的两路设计,其余各路连接方法相同。其中LM7812为电源稳压
3、芯片,保证输出稳定的电压,R1、R2为采样电阻,电容C5与C6主要用于交流耦合。 图2 光电转换电路 前置放大电路 光电前置放大电路如图3所示, 电路在光电转换电路和放大器的输出之间加一个由R3和C7组成的RC滤波电路, 这样就限制了放大器输出信号的带宽, 滤掉了经过放大的噪声和放大器本身的噪声。电容C8 用来补偿RC滤波环节引起的相角滞后,电容C9用来补偿放大电路输入端的复合电容引起的相角滞后, 控制噪声增益的峰值。 图3 前置放大电路 主放大电路 由于前置放大器的输出信号比较微弱,需要进行再次放大以满足后续电路的需求。图4为2级放大电路,每一级放大10倍,加上前置放大电路可将信号放大100
4、0倍左右。 图4 主放大电路图 电压比较器电路 由于有用信号常常受到噪声的干扰,单一阀值比较器有可能引发信号的误触发,为了抑制这种现象, 本文设计了图5所示的电压比较器电路, 输入端通过钳位二极管来防止比较器输出信号跳变。比较器反相输入电压比门限电压高时, 比较器输出低电平二极管D3将导通, 将比较器同相输入端电平钳位在一个很低电平, 这样比较器输出信号将不会发生跳变; 电阻R5用来抑制浪涌电流,电阻R4为上拉电阻,与5 V 电源相连,使得输出高电平为5V,低电平为0V。 图5 电压比较器电路 滤波电路 根据天幕靶工作原理可知,当天幕内的光通量发生足够大的变化时, 光电传感器会响应这种变化而产
5、生电信号。这就是说一些非弹丸物体在穿过光幕时也会使得天幕内光通量发生变化以至光电传感器产生电信号。从原理上来讲,这种现象并非异常,而对测试来讲属于干扰。 在具体靶场测试中,当干扰严重时会导致测试根本无法进行。因此, 如何排除干扰,提高天幕靶的抗干扰能力,保证系统的正常运行, 是一个必须解决的问题。本设计采用RC滤波电路,滤波电路如图6所示。 图6 RC滤波电路 单片机电路 综合本系统对功耗和数据处理等方面的要求,本设计采用STC89C52RC单片机作为微弱信号检测电路的处理芯片。STC89C52RC系列芯片能够很好满足本电路高性能、低成本、低功耗的要求。 7.1 STC89C52RC简介 ST
6、C89C52RC单片机片内集成了8K的FLASH程序存储器,512字节的RAM数据存储器,至少1K的E2PROM,8个中断源,4个中断优先级,3个定时器,2个数据指针,1个UART,32个I/O口。该芯片使用Atmel公司高密度非易失性存储器技术制造,与80C51系列产品指令和引脚完全兼容。片上flash允许程序存储器在线编程,也适于常规编程器。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许读写存储器、定时器/计数器、串口、中断继续工作。掉电保护方式下,读写存储器内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位
7、为止。由于STC89C52拥有灵巧的8位CPU和在系统上可编程闪烁存储单元,使得它能够为众多嵌入式控制应用系统提供灵活、有效的解决方案。图7为STC89C52原理图: 图7 STC89C52原理图 7.2 微弱信号检测电路电源设计 为了满足此检测系统对不同电压值的要求,本设计采用9V电池供电。电池输出的电压通过DC/DC变换模块LM2576HVT-5实现9v转5v降压,来对外部AD转换芯片等的模拟电源进行供电。然后使用LM1117-3.3芯片将5v转化为3.3V电压。电压转换电路如下图8所示: 图8 供电电路设计原理图 LM1117是一款低压差的线性稳压芯片。当电路输出为1A时,输入输出的电压
8、差典型值仅为1.2V。该芯片过流保护和热保护功能很完善,能够在复杂环境条件下提供稳定的电源。同时使用修正技术,确保输出电压和参考源精度在1%的精度范围内。 7.3 芯片晶振与复位电路 当单片机上电时,此时振荡器开始运行,只要RST引脚得到持续两个机器周期的高电平,芯片便可完成自动复位。外部复位电路是通过提供两个机器周期以上的高电平来进行复位的。本系统采用的是上电自动复位,由于上电瞬间电容器上的电压不能突变,RST上的电压是Vcc上的电压与电容器上的电压之差,因而RST上的电压就是Vcc上的电压。随着充电的进行,电容器上的电压开始不断上升,RST上的电压不断下降,RST脚上只要保持10ms以上高
9、电平,系统就会有效自动复位。电容C1可取10-33F,R取10k,充电时间常数为100ms。 STC89C52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入端与输出端,外接石英晶体或陶瓷振荡器以及补偿电容C2、C3构成并联谐振电路。STC89C52系统中的晶振频率一般在1.2-12MHz选择,外接电容C2、C3的大小也会影响振荡器频率的高低、振荡频率的稳定、起振时间及温度的稳定性。本系统使用的是12MHz石英晶振,电容C1、C2为30pF。其电路图如图9所示。 图9 复位和晶振电路设计原理图 信号输出电路 STC89C52RC用于脉冲宽度的测量和信号传输通
10、道阻通状态的转换,并负责特征参数的修改和设置。74HCT00用于信号逻辑极性的转换,Q1用于将信号从TTL电平转换到CMOS电平,CD4098则用于输出脉冲的整形控制。信号输出电路如图10所示: 图10 信号输出电路 信号驱动电路 在测试中,红外天幕靶放在射击弹道上,一般测时部分距离弹道都有一定的距离,经过处理后的信号需要进行长线传输,为了确保输出信号的远距离传输,采用了如图11所示的HEXFET互补对称输出电路。 图11 信号驱动电路 软件设计 当负脉冲信号输入时,单片机发生INT0外部中断,服务过程在延迟Tmin后,测试INT0状态是否仍为低电平,若是,则置位P1.1,同时开启CT0计时器
11、,并使能CT0的中断响应,74HCT00输出高电平,信号经过脉冲整形控制以后进入驱动电路,来驱动外部设备。 程序设计系统中单片机控制软件的组成包括:主程序模块,INT0、INT1、CT0、CT1中断服务模块等. 主程序模块主要负责完成系统硬件的上电后设备的初始化处理,设定各定时器/计数器的工作状态,最后使单片机在空闲等待循环状态下监听系统中断。外部中断、计时器中断服务负责信号的识别过程的控制处理。图12表示了外部中断INT0的处理流程.INT0以沿触发方式聆听输入信号的下降沿,接到输入信号时,服务程序首先进行间隔为Tmin的固定延时,在延时结束后又一次查询信号输入端口的信号状态,如果在此时间段
12、内输入信号变为低电平,系统将视输入为高频的干扰,退回到下一信号的识别准备状态。如果P1.1被置高电平, 74HCT00开始进入输入信号上升沿测试状态,CT0计时开始,然后,INT0中断处理结束。 结束 是 INT0=0? 否 P1.1=1 CT0开始计时 干扰信号 信号延迟 开始 图 12 中断INT0流程图 CT0中断产生标志着输入信号宽度超出了规定的识别范围,输入低频的干扰脉冲.在此情况下,P1.2被置为低电平,防止强干扰信号下造成的电路拖尾干扰对识别功能的影响. 结束 延时结束 系统复位 为低频干扰 启动延时程序 P1.2=0 P1.1=0 开始 图 12 中断CT0流程图 INT1和C
13、T1分别用来实现系统快速复位和屏蔽拖尾信号造成干扰中屏蔽脉冲宽度控制.控制操作比较简单,不再赘述,流程图分别如图13和图14所示. P1.1=0 开始 结束 CT0计时 恢复CT0为常图13 INT1中断复位程序 开始 图14 INT1中断复位程序 结束 CT0计时 恢复CT0为常P1.2=1 芯片初始化程序 #include sbit p3_7=P37; sbit p1_0=P10; sbit p1_1=P11; sbit p1_2=P12; sbit p1_3=P13; sbit p1_4=P14; sbit p1_5=P15; void delay(unsigned char tt) for(;tt0;tt-); void init2 p1_5=0; delay(240); /主机发出延时500微秒的复位低脉冲 void main while(1) p3_7=1; p1_0=0; delay(2); p3_7=0; delay(250); p3_7=1; p1_1=0; delay(30); p1_2=0; if(p3_7=0) init1; else p1_3=0;