1.系统总体设计方案
系统总体设计如图1所示,激光笔发射到被测画面的光点被CCD摄像器件接收,CCD摄像器件输出视频信号给同步分离电路和整形电路。利用同步分离电路后,可从视频信号中得到行同步信号和场同步信号和奇偶信号,行同步和场同步信号被送到计数电路。视频信号经过整形电路后得到光信号,光信号也被送往计数电路,计数电路处理后输出光点的二维位置信息,此信息经单片机处理后由串口传输到计算机,计算机通过软件编程实现光标的定位并模拟鼠标的单双击功能。
图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提供一个钳位电压。
图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是实现行计数的波形示意图。
图3 行计数的波形示意图
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.结束语
试验表明,装备设计合理,满足设计技术指标要求,工作稳定可靠,且具有较强的可扩充性,只需做少许改动即可适应用户更高的要求,若要求进一步提高光标定位的精度,可选择更高的晶振作为行计数器脉冲的输入,必要时对计数器加以扩展。这相当于将像素点加以细化,因而精度提高。
本装置是配合计算机,投影仪而用于产品演示、电化教学及学术会议等场合的理想演示用工具。经过改装后,还可用于警员、军队枪械的模拟训练,有着广阔的应用前景。
参考文献
[1]. 俞斯乐等编著.电视原理 (第五版).北京: 国防工业出版社,2000
[2]. LM1881, LM1881-X Video Sync Separator General Description. National Semiconductor, June 2003
[3]. 胡敦辉等. 采用视频方式的点坐标测量方法[J]. 电子技术应用,2003,(3):33-35
[4]. 李光明等. 用VB实现S7-300 PLC与PC机的普通串口通信[J].微计算机信息,2005, (09):38-40