GAGE 82G 采集卡在激光测距机中的应用
GAGE 82G 采集卡在激光测距机中的应用
作者:伍丽莎;王江;杨向东;吕明爱;王楚;王秀芳
1 前言
激光测距仪机的终端任务是将具有一定时间间隔的主回波脉冲信号进行处理、并给出所测的距离。采用 Gage 82G 数据采集卡和 VC++ 开发软件,解决了激光测距机对回波信号的处理及距离显示。
2 采集卡的接口函数和硬件设置
Gage 82G 数据采集卡给用户提供了 Windows标准动态连接库文件 Gage_drv.lib 。 gage_ driver_initialize 设置系统中的每个采集卡,并初始化驱动。gage_force_capture 通过采集卡硬件用于强迫获取数据。gage_input_control 用于设置采集卡的输入通道。gage_start_capture 准备采集卡硬件的数据采集。gage_transfer_buffer 从指定通道拷贝采集卡板载存储器空间采样点的值到特定缓冲器。
gage_triggered 判断是否采集卡碰见了触发事件。 gage_trigger_control_2 建立采集卡的触发参数。 硬件参数设置:采样速率 2G~1K S/s;单通道和多通道采样模式;触发源含 A、B 通道触发、外部时钟触发及内部触发;外部触发 BNC 输入电偶:AC、DC;外部触发 BNC 输入范围±10V~± 100mV;触发深度 0~8MB;触发电平 0~255;输入电阻 50hom、1Mhom;触发沿含上升和下降沿。
3 采集卡的程序设计
选用 VC++程序设计采集卡数据控制程序,其数据流程如图 1,分为 6 个步骤:
第一步:初始化驱动程序和硬件:在 I/O 选定安装硬件的位置、建立存储路径。通过查看GAGESCOP.INC 结构文件找到存储器部分在系统安装采集卡的 I/O 位置。通过采集卡的有效配置可以建立和更新 GAGESCOP.INC。初始化驱动和硬件通过 InitBoard()完成。
第二步:准备采集卡的数据获取:在任何时候,开始一个数据的获取过程,最优先的是准备采集卡的数据获取。在获取数据期间,企图改变采集卡设置是十分困难的。通过函数 SetBoard(),对采集卡设置修改。在修改过程中,为了满足需要,SetBoard()执行多个 Gage API 命令。
第三步:开始获取数据:gage_start_capture 程序开始获取前触发数据,并等待触发事件。 gage_start_capture(GAGE_SOFTWARE==board.sour ce) 程序取 一个参 数 ,当触 发 源被设 置 到SOFTWARE,便自动数据获取。当参数为 0 时,通过 gage_software_trigger 命令,内部触发也可发生。
第四步:完成一次获取:一次采集后,通过应用程序询问是否重置。先采集卡直到使用gage_triggered 程序触发开始记数。一旦触发,直到使用 gage_busy 命令,采集卡才不再获取数据。对于高速重复触发,普遍使用短触发时间段,对于点触发,大多使用长触发时间段。如果超过触发时间段,就使用 gage_force_capture 程序来强迫触发。如果超过占线时间,使用 gage_abort_capture 程序来中断获取。具体程序如下:
检查是否发生触发。在指定记号总数内,触发没有发生,通过 gage_force_capture 命令强迫触发。如果触发信号很慢,应通过 TRIG_TIMEOUT 增加:
ticks = GetTickCount();
while (!gage_triggered())
{ if (GetTickCount() >= ticks + TRIG_TIMEOUT)
gage_force_capture(board.source);
}
检查获取是否完成。如果不在指定记数总数内,通过 gage_abort_capture 中断获取。对于缓慢的采样速率,暂停时间的数值保持不变,应该通过BUSY_TIMEOUT 增加:
icks = GetTickCount();
while (gage_busy ())
{ if (GetTickCount() > ticks + BUSY_TIMEOUT)
{ gage_abort_capture (board.source); }
}
第五步:传输数据:在采集卡不再繁忙时gage_busy 程序返回 0,数据可以被传输。通过gage_calculate_addresses 命令来确定采样数据板载存储器的地址。这个程序返回开始地址,触发地址,和结束地址,需要这些地址来确定在存储器中获取的数据的位置。
存储器就像是一个循环的缓冲器,所以地址的直接数字比较应该避免。例如,因为超过存储器记数一圈,这时从板载存储器获取的结束地址可能比开始地址有一个更低数字值。为了确定获取长度,无疑要用结束地址减去开始地址,因此错误地产生了一个负值。gage_normalilze_address 程序,将记录存储器一圈完成,用于比较。在数据传输前,采集卡必须使用 gage_need_ram 程序为数据传输做准备。传输数据前,使用 age_need_ram(1);而在传输数据完成后,使用 gage_need_ram(0)。从板载存储器里找回数据的方法是使用 gage_transfer_buffer_3程序。如果硬件支持,程序传输数据使用大数据块的 PCI 插槽_控制。PCI 插槽_控制是越过 PCI 插槽来传输数据最快的方法。如果没有 CPU 的裁审, PCI 传输数据的速率可保持在每秒 100Mege 位以上。当在单通道模式操作硬件时,从 2 个 ADC 存储库里 gage_transfer_buffer_3 也可自动插入数据。 第六步:计算距离:利用双通道模式采集,2个 ADC 同步使用严格相同时钟信号,没有时间差存在。实现了 2 个通道同时采样。A 通道为触发通道,B 通道为接受通道,用时间间隔来计算距离:
MaxValue = (double) gage_mem_read_chan_b(location);
for (i = 0 ; i < points ; i++)
{ value = gage_mem_read_chan_b (location);
location = (location + 1) & board_info->
max_available_memory - 1;
if(MaxValue > value)
{ MaxValue = (double)value; j=j+k; k=1; } else { k=k+1; }
}
distance=(j-1)*tbs*0.15;
distance 为计算的距离,tbs 为采样间隔时间(取决于用户所选取的采样速率)。
4 结束语
采用 GAGE 82G 采集卡,以 VC++.net 作为开发平台,利用 VC 生成的友好界面和 GAGE 82G 的资源,在 1 秒内可得到所测的距离信息,提高工作效率,该程序在 Windows XP,Windows 2000 下调试成功。以后的开发将致力于提高处理连续信号能力和实时性,缩短处理信号时间。同时,利用 Matlab从数据文件中取出数据,进行图形显示,可以更加直观的观看波形。
本文章转自爱学术(aixueshu.com),如有侵权,请联系删除