采用视频的无线激光定位设备的设计
扫描二维码
随时随地手机看文章
随着CCD(Charge Coupled Device)越来越广泛地被应用到工业、军事、民用行业。采用CCD摄像头作为装置的前端图像传感器并结合其他硬件电路对被测图像信息进行快速采样、传输及数据处理的应用系统正日益受到人们的关注。本文所介绍的是一种带有CCD摄像器件的视频信号处理装置,主要用于投影屏幕上目标点的坐标测量和光标定位。
1.系统总体设计方案
系统总体设计如图1所示,激光笔发射到被测画面的光点被CCD摄像器件接收,CCD摄像器件输出视频信号给同步分离电路和整形电路。利用同步分离电路后,可从视频信号中得到行同步信号和场同步信号和奇偶信号,行同步和场同步信号被送到计数电路。视频信号经过整形电路后得到光信号,光信号也被送往计数电路,计数电路处理后输出光点的二维位置信息,此信息经单片机处理后由串口传输到计算机,计算机通过软件编程实现光标的定位并模拟鼠标的单双击功能。
500)this.style.width=500;" border="0" />
图1 电路总体结构图
2.系统硬件电路设计
2.1整形电路
如图2所示,CCD摄像器件1输出的视频信号被直接传送到运算放大器4放大,运算放大器4输出的信号一路作为电压比较器7的一个输入,另一路被送到最大值保持电路5,最大值保持电路5主要包括电压跟随器5、电容C1、稳压管Dz1 三个器件,当有信号从电压跟随器5A连续输出时,由于二极管D1的存在,电容C1不断充电,电压不断增加,直到信号的最大值到来,这时C1的电压也增加到最大值,之后再有信号到来时由于其电压达不到加在电容两端的电压,因而电容不再充电,电压保持不变。当图中所示的场同步信号到来时,稳压管Dz1反相导通,电容才迅速放电,再有信号从电压跟随器5A 输出,电容又开始重新充电。通过这种设计,便可以从每场视频信号中提取出最强的信号,并将这个值通过电压跟随器6输出到电压比较器7的另一个输入端,电压比较器7输出的信号即为从视频信号中提取出的光信号,并且该光信号存在这样的特点:对于每一场视频信号而言,只有当当前信号值大于以往信号值时,光信号输出为高电平,否则输出为低电平。视频信号最大值过后,光信号输出时刻保持在低电平。在图2中,电压跟随器6相当于一个高输入阻抗元件,可以防止电容C1放电过快。电源VCC提供一个钳位电压。
500)this.style.width=500;" border="0" />
图2 整形电路详细原理图
2.2同步分离电路
视频信号是反映图像内容的电视信号, 它的电压高低表示图像像素的明暗程度。由于图像是随机性的, 因此视频信号电平也在一定范围内随机起伏。视频信号是在电子扫描作用下, 由摄像头将明暗不同的景象转换为相应的电信号, 然后经信号通道传送出去。目前在传送视频信号时,是把影像信号,消隐信号和复合同步信号三者按一定比例结合在一起发送的。我国采用的电视信号是隔行扫描(PAL)制式(黑白为CCIR),行频为15625Hz,行同步脉宽为4.7μs;场频为50 Hz,场同步脉宽为160μs[1]。
准确分离视频信号对系统的成功至关重要,在该系统中视频信号同步分离可以选用芯片LM1881来实现,输入为满足CCIR标准的视频信号,输出有复合同步信号、场同步信号、奇偶场标志信号。其中,复合同步信号中包含了周期为64μs的行同步信号和场回扫期间的周期为32μs的场均衡信号、场同步信号[2]。
2.3计数电路
2.3.1光信号行计数
选择20MHz的晶振作为行计数器的计数时钟脉冲输入,计数器的时钟频率实际上决定了视频信号每一行的采样点的数量,即每行水平的数字分辨率。行周期64μs,频率15625Hz,每行的采样点为20M/15625=1280,除去行消隐和行同步的时间,每行的有效采样点可达1000点以上。为了保证计数器不会溢出,需用二进制地址10位,因此我们选择采用12位计数器。由光信号和场同步脉冲通过与非门接到计数器的清零引脚,由20MHz时钟信号和行同步脉冲通过与非门接到计数器时钟脉冲输入引脚。当光信号到来时计数器开始计数,下一行同步脉冲到来时,会停止计数,同时触发锁存器,存储计数器中的数值,至此就获得了光点的行坐标。下一场同步脉冲到来时,会将计数器清零,开始新一行的点坐标测量[3]。图4是实现行计数的波形示意图。
500)this.style.width=500;" border="0" />
2.3.2 光信号场计数
场计数的工作原理与行计数类似,只是计数器时钟脉冲输入改为行同步脉冲。光信号到来时开始计数,当场同步脉冲到来时停止计数,触发锁存器,存储计数器中的数值,至此就获得了光点的场坐标。同时场同步脉冲会将计数器清零,开始新一场的点坐标测量。
由于摄像头采用隔行扫描方式,两场构成一帧画面,奇数场扫奇数行,偶数场扫偶数行,所以此时得到的场坐标与实际值之间有较大误差。为了提高精度,需要确定当前扫描的是奇数场还是偶数场。如果场计数器中的值为n,LM1881的奇偶场标志脚输出0,则表明当前扫描的是偶数场,光点实际应在第2n行;若输出1,表明扫描的是奇数场,光点实际应在第2n-1行。
3.单片机串口通信流程
在本系统中使用的单片机是陵阳SPCE061A,它的UART模块提供了一个全双工标准的通信口,用于与外设之间的串行通信。在使用SPEC061A的异步串行端口UART实现与PC通信时,由于SPEC061A的I/O电平和PC不一致,要采用一片MAX232进行电平转换,MAX232的RXD和TXD分别接SPCE061A的IOB10(TX)和1OB7(RX)。
根据RS-232的标准,SPCE061A单片机是按字节传输数据的。利用IOB口的特殊功能和UART IRQ中断,可以同时完成UART接口数据的接收和发送。SPCE061A单片机串行通信帧结构为:1位启动位,8位数据位,1位奇偶校验位,1位停止位。使用UART模块进行通信时,必须事先分别将管脚I0B7设置为输入状态,IOB10设置为输出状态。将波特率设置为9600b/s即可满足本系统实时数据传输要求。
初始化的代码为:
*P_IOB_Dir=0x0400; //IOB0~IOB7初始化为输入,IOB10为输出
*P_IOB_Attrib=0x0480;
*P_UART_BaudScalarHigh=0x05; //波特率设置为9600bps
*P_UART_BaudScalarLow=0x00;
*P_UART_Command1=0x0000; //允许接收、发送
*P_UART_Command2=0x00C0;
单片机数据发送程序代码片段为:
Ret=*P_UART_Command2; //检查标志位,查看上次数据是否发送完毕
Ret=Ret&0x0040;
while(Ret==0) //若没有等待继续发送
{
Ret=*P_UART_Command2;
Ret=Ret&0x0040;
*P_Watchdog_Clear=C_WDTCLR;
}
m1=m&0x000f; //将16进制m1转ASCLL码传送上位机
Hex_ASC(m1);
*P_UART_Data=m1;
4.PC机软件设计
在计算机接收端,由串口1接收单片机发来的数据,采用VB 6.0设计软件程序,串行通讯利用MSCOMM控件实现[4]。MSCOMM能十分方便地开发出使用计算机串口的计算机通信程序。在本系统中MSCOMM控件采用事件驱动方式从端口获取数据,软件处理流程为:打开串口开始接收单片机发送来的数据,首先判断数据帧的开始字节,是则关闭OnComm接收事件,然后接收数据字节,判断数据最大最小值,采用坐标转化算法将接收的坐标转化为屏幕坐标,最后打开OnComm接收事件,等待下一次OnComm事件产生。
Windows SDK中函数SetCursorPos()可以实现将鼠标光标显示在投影大屏幕上的激光点处,该函数带有两个参数x和y,表示鼠标在屏幕上的坐标。函数mouse_event()可以模拟一次鼠标事件,例如可用如下命令模拟左键单击:mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0。这样就实现了利用激光笔光点控制目标大屏幕的鼠标指针定位,移动和单双击。
5.结束语
试验表明,装备设计合理,满足设计技术指标要求,工作稳定可靠,且具有较强的可扩充性,只需做少许改动即可适应用户更高的要求,若要求进一步提高光标定位的精度,可选择更高的晶振作为行计数器脉冲的输入,必要时对计数器加以扩展。这相当于将像素点加以细化,因而精度提高。
本装置是配合计算机,投影仪而用于产品演示、电化教学及学术会议等场合的理想演示用工具。经过改装后,还可用于警员、军队枪械的模拟训练,有着广阔的应用前景。