FCFR-USB9812说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FCFR-USB9812说明书
版本1.0
北京星烁华创科技有限公司
网址:
技术支持邮箱:support@
销售邮箱:sales@
版权所有(C)北京星烁华创科技有限公司 2011
在无北京星烁华创科技有限公司优先书面授权书前提下,此出版物任何一个部分不可通过任何形式进行复制、修改和翻译。

对于非法复制、修改和翻译商业行为,将根据国家知识产权相关法律追求其法律责任。

从此文件发布日期起,在此发表的是当前或者拟定的信息。

由于我们会不断对产品进行改进和增加特征,此出版物中的信息如有变动恕不通知。

版本历史
版本日期备注
V1.0 2011-5-10 初版
目录
第一章 简介 (1)
1.1 概述 (1)
1.2 USB9812采集卡特性 (1)
1.3 USB9812采集卡规格 (2)
1.4 系统框图 (3)
1.5 应用场合 (3)
1.6 出库清单 (3)
第二章 采集卡测试 (4)
2.1 驱动安装 (4)
2.2 采集功能测试 (6)
2.3 累加功能测试 (8)
第三章 工作原理 (11)
3.1 系统框图 (11)
3.2 采样钟 (11)
3.3 触发源 (11)
3.4 触发模式 (12)
3.4.1 连续采集 (12)
3.4.2 后触发采集 (12)
3.4.3 延时触发采集 (13)
3.4.4 连续触发采集 (13)
3.5 数据格式 (13)
3.6 DI/DO数据格式 (15)
3.7 累加工作原理 (15)
第四章 硬件功能 (17)
4.1 USB9812板物理定义 (17)
4.1.1 板尺寸和主要器件布置图 (17)
4.1.2 模拟输入阻抗选择定义 (18)
4.1.3 模拟输入范围选择定义 (18)
4.1.4 电源座定义 (18)
4.1.5 DI/DO定义 (19)
第五章 软件功能 (20)
5.1 驱动文件组成 (20)
5.2 软件流程 (20)
5.3 函数列表 (21)
5.4 结构和枚举定义 (22)
5.5 DLL函数说明 (23)
5.5.1 USB9812_Link (23)
5.5.2 USB9812_UnLink (24)
5.5.3 USB9812_InitAD (25)
5.5.4 USB9812_ReadAD (26)
5.5.5 USB9812_StopAD (29)
5.5.6 USB9812_IsHighDevice (29)
5.5.7 USB9812_SetDO (30)
5.5.8 USB9812_GetDI (30)
5.5.9 USB9812_GetFifoFlag (31)
5.5.10 USB9812_GetDevInfo (32)
第六章 用户需知 (33)
6.1 使用注意事项 (33)
6.2 维修 (33)
第一章简介
1.1 概述
FCFR-USB9812(简称USB9812)是一款高速累加功能采集卡,AD位数三档可选8bit/12bit/14bit,采样率支持每通道100MS/s,两个通道完全独立,每通道硬件FIFO支持32MSa。

数字化仪采用USB2.0接口。

USB9812采集卡可广泛应用于分析仪器、雷达信号采集等场合。

USB9812支持累加功能,数据处理能力每秒100M采样点,最大累加长度1M采样点,最大累加次数65536次。

USB9982是1GS/s超高速累加功能数据采集卡,USB9812适用于高速低成本应用场合。

1.2 USB9812采集卡特性
⏹USB2.0高速接口
⏹AD指标:8bit/12bit/14bit,100MS/s
⏹AD通道:2个独立通道
⏹通道独立:支持两通道独立采集和累加
⏹硬件FIFO:两个通道各32MSa
⏹支持连续采集和触发采集
⏹触发源:模拟信号触发、外触发和内部PWM触发(定时器)
⏹USB2.0实时传输带宽36MBytes/S
⏹Windows2000以上操作系统支持
⏹软件支持:VC、VB、LABVIEW
图1.1 USB9812采集卡
1.3 USB9812采集卡规格
表1.1 USB9812采集卡规格
型号USB9812C USB9812B
USB9812A 模拟输入
分辨率8位 12位 14位
通道数量2通道独立,SMA输入座
USB2.0实时传输36MByets/S
采样率 100MS/s/通道
采样时钟基准时钟:板上时钟/外部时钟,软件选择。

两个通道共用采样钟。

外时钟SMA输入,DC耦合,3.3V TTL方波。

基准时钟可分频,分频因子取值1,2,3…10。

输入极性单端输入
输入范围和增益-0.5V~+0.5V,-2.5V~+2.5V(默认),
焊接选择
-1V~+1V,-5V~+5V(默认),焊
接选择
输入耦合AC DC(默认)或AC(仅50阻抗支持)输入阻抗高阻(1.5M欧)或50欧,焊接选择
-3db带宽<30MHz
触发源触发模式:连续采集,后触发,延时触发。

触发源:外数字触发,内PWM触发和模拟信号触发
外触发:仅支持:3.3V/5V TTL信号,SMA座输入。

内PWM触发:可输出到SMA座上,3.3V TTL 方波输出。

硬件FIFO/采样点各32MSa,联系我们
数据传输轮询,DMA
模拟输入接插件SMA
累加功能
处理能力100MS/s
AD通道两个通道可独立设置累加参数
最大累加次数65536
最大累加长度1MSa
数字DI/DO
普通DI 8路
普通DO 7路
兼容性5V TTL
接插件IDC-26
通常规格
板尺寸140mm x 100mm(不包含接插件)
工作温度0~50℃
存储温度-20℃~80℃
湿度 5-95%,非凝露
电源要求5V/980mA
传输接口USB2.0
编程环境 VC、VB、LABVIEW
支持操作系统Windows 2000、Windows XP、WIN7
1.4 系统框图
图 1.2 USB9812框图
1.5 应用场合
⏹无线电通信
⏹雷达信号采集
⏹分析仪器
⏹通信仪表
⏹飞行质谱仪
1.6 出库清单
1)采集卡一块
2)光盘一张
3)USB2.0高速屏蔽线一根
第二章采集卡测试
2.1 驱动安装
先插入采集卡,电源指示灯亮,系统弹出设备驱动安装界面,见图2.1,选择“从列表或指定位置安装”,弹出图2.2界面,指定设备驱动所在的目录,下一步系统进行驱动安装,安装完成后,界面见图2.3。

设备安装成功后,可以测试采集卡。

图2.1 设备驱动安装界面1
图2.2 设备驱动安装界面2
图2.3 设备驱动安装界面3
2.2 采集功能测试
图2.4 数据采集程序界面
“启动”和“结束”是多线程采集方式,可以连续采集,采集的结果既可以显示,也可以保存,选择见图中“保存/保存”按钮;“单次采集”是采集一段数据保存起来。

⏹连续采集测试
参数包括:分频因子,采样时钟默认采用板上采样钟内钟。

采样率设置修改“分频因子”,采样率等于基准时钟除以分频因子,基准时钟是采样基准时钟,分频因子输入1,2…10分别对应1,2…10分频。

⏹触发采集测试
约束于USB传输带宽,连续采集不能太高,高速采集可用触发采集方式。

触发采集参数包括:分频因子、触发长度、触发源。

触发模式包括:后触发、延时触发;触发源包括:外正沿触发(数字触发),外负沿触发(数字触发),内部PWM 正沿触发(数字触发),内部PWM负沿触发(数字触发),模拟输入信号正沿触发(模拟触发),模拟输入信号负沿触发(模拟触发),模拟输入信号触发源需要设置触发门限;
延时触发需要设置触发延时参数,例如100代表在触发事件后,再延时100个采样基准时钟后开始,采集触发长度单位是Op,1个Op表示8个采样点。

“触发模式”选中后触发,触发源选中“外部触发”,需要输入外部触发信号,触发信号频率<10MHz,采集卡支持连续触发,触发长度计算方法:
触发长度计算方法:Lt <= Fs / Ft
Lt
为触发长度
为采样率
Fs
为触发源信号频率
Ft
说明:
1.Lt单位采样点,para_init.TriggerLength单位是Op, para_init.TriggerLength =
Lt / 8;
2.Fs为采样率。

3.如果 Ft*Lt > Fs,则触发冲突,某些触发信号将不会响应。

采集卡支持连续触发采集,除了上述约束外,和连续采集类似,还要约束于USB 实时传输速度,不同的计算机配置,实时传输速度约有不同,大致是36MBytes/S。

计算方法:Lt*Ft*Cch <= Fc
其中:Fc为连续传输速率,Cch为通道数。

如果Lt*Ft*Cch > Fc,则用户可以将数据暂时缓存在板上硬件FIFO中,此时可能会报告缓存溢出,但读取一个FIFO长度数据是完整的。

2.3 累加功能测试
模拟输入信号触发源
图 2.5 累加功能测试界面
见图2.5,将相同100KHz的正弦波信号通过SMA接入到采集卡J2(CH1)和J3(CH2)上,将CH1设置成后触发模式,触发源选择“AD正沿”,触发长度设置成2048(也就是2048*8=16384个采样点),触发门限是127(USB9812C最大量化值的一半),选中“使能累加”,累加门限255(USB9812C最大量化值),所有采样点都进行累加,累加次数是100次。

CH2和CH1参数设置大致相同,只是触发源选择“AD负沿”。

每接收到一个触发信号后,采集16384个采样点,与接收到下一次触发的采样点,一一对应进行累加,再接收到第100个触发信号后,进行累加,结束后将累加结果写入硬件FIFO,通过USB2.0上传给PC。

当选中累加功能时,显示波形界面的最大值是255(USB9812C)乘以累加次数。

内部PWM信号触发源
图2.6 累加功能程序界面
见图2.6,将相同100KHz的正弦波信号通过SMA接入到采集卡J2(CH1)和J3(CH2)上,将CH1设置成后触发模式,数据源选择“计数器数据”,触发源选择“PWM正沿”,触发长度设置成2048(也就是2048*8=16384个采样点),触发门限是127(USB9812C最大量化值的一半),选中“使能累加”,累加门限255(USB9812C 最大量化值),所有采样点都进行累加,累加次数是100次。

CH2和CH1参数设置大致相同,据源选择“AD数据”。

计数器数据源可以用来检测卡的数字功能,将AD数据替换成0,1,2..255累加数据,可检测传输和累加功能正确与否,
如果选中了PWM触发源,触发的频率就是界面上PWM输出频率来决定,界面上是5000Hz。

注意:
1.通过跳线J6(PWM1)和 J7(PWM2),1和2短接,可将PWM波形通过J4
和J5输出,来同步外部设备。

2.如果两个通道PWM频率设置完全相同,则两个PWM是完全同相位的,其它采
集和累加参数一样时,两个通道累加也是同步的。

两个通道的PWM也设置成不相同,此时两个通道完全独立。

3.PWM1和PWM2的输出J6和J7的引脚PIN1上,不受触发源是否PWM触发的
设置,只要initAD函数设置了,就会输出,直到发出stopAD停止输出。

外触发源
和内PWM触发源类似,外正沿/外负沿都是数字触发,CH1外数字触发通过J4 SMA座输入;CH2外数字触发通过J5 SMA座输入。

同时要将J6和J7的PIN2和PIN3短接。

说明:
1.最大累加长度是1MSa,所以累加功能使能时,最大触发长度是131072。

2.最后累加结果数据,不能超过USB9812的USB实时带宽36MBytes/s。

3.累加后数据量:单次触发数据量是: TrigFreq*TrigLen*TRIG_UNIT,累加结
果数据量:(TrigFreq*TrigLen*TRIG_UNIT*4)/lADDcnt,4表示采样点累加后变成32bit,lADDcnt是累加次数。

提示:采集卡工作时,不要用手触摸卡。

第三章工作原理
3.1 系统框图
采集卡有两种工作方式,一是采集工作方式,而是累加工作方式;采集卡两个采集通道完全独立,除了共用采样钟基准时钟,其它所有参数都可以独立设置。

采集工作方式:
见图1.2,模拟信号经过调理后,经过各路AD转换后,写入海量硬件FIFO 中,两个通道各自有独立的32MSa大小FIFO,通过USB2.0接口传输给PC;采集卡支持连续采集和触发采集方式。

海量硬件FIFO,保证USB2.0连续采集数据的完整性。

后触发、延时触发支持连续触发,一边触发采集一边传输,单次触发长度最大是硬件FIFO长度。

累加工作方式:
仅触发模式是后触发、延时触发支持累加方式,第一次触发数据进入FPGA 后,缓存起来,等待下次触发源,发生触发后,本次触发样点和取出的第一次触发样点一一对应进行累加,累加结果缓存起来,再次等待下次触发源…以此类推,当累加次数满足设定次数后,将累加结果写入海量FIFO中,通过USB2.0接口传输给PC。

累加后的数据量会大大减少,主要和累加的次数有关。

累加详细工作原理见3.7章节。

无论是采集工作方式和累加工作方式最后结果传输都通过USB2.0传输给PC,传输速度不能大于36MByetes/S。

3.2 采样钟
采样基准钟包括内钟和外钟,板外时钟输入要求是方波,3.3V TTL电平,占空比1:1,要求输入时钟的相噪小。

3.3 触发源
触发源包括外数字触发、模拟信号触发和内部PWM数字触发,模拟信号触发需要设置触发门限。

准时钟
图3.1 数字触发
见图3.1是数字触发,有正沿触发和负沿触发两种情况,为了保证采样基准钟能够采集到触发沿,数字触发信号脉宽必须保持2个采样基准时钟以上。

图3.2 模拟触发
图3.2是模拟触发,模拟触发除了设置信号正沿和负沿外,还需要设置触发门限,8位AD 触发门限范围0~255,12位AD 触发门限范围0~4095,14位AD 触发门限范围0~16383。

3.4 触发模式
USB9812采集卡支持连续采集、后触发采集、延时触发采集。

3.4.1
连续采集
连续采集参数是:采样基准钟选择和时钟分频因子,转换结束后,转换数据起写入海量缓存。

实现连续高速数据采集和存储。

连续采集时,需要监控AD 缓存是否溢出,如果溢出,则会出现丢数,需要重新启动采集。

3.4.2
后触发采集
图3.3 后触发采集
见图3.3,后触发采集是在启动采集后,等待触发事件发生,再采集触发长度规定的数据量。

后触发采集参数包括:采样时钟选择、分频因子、触发长度和触发源,触发长度最大是FIFO 长度。

累加工作方式,触发长度最大是触发深度。

启动采集
触发事件
采集结束
3.4.3
延时触发采集
图3.4 延时触发采集
见图3.4 延时触发采集,延时采集类似于后触发采集,区别是在触发事件发生,不是立刻开始采集,而是等待延时一段事件后开始采集,延时单位是采样基准时钟。

后触发采集参数包括:采样时钟选择、分频因子、延时参数、触发长度和触发源,触发长度最大是FIFO 长度。

累加工作方式,触发长度最大是触发深度。

3.4.4
连续触发采集
图3.5 连续触发采集
后触发和延时触发支持连续触发采集,在启动采集后,只要接收到触发事件就不断将触发数据写入到缓存中,采集数据和读取数据同步。

累加工作方式和连续触发类似,不是将原始数据上传,而是将触发数据累加后上传。

3.5 数据格式
USB9812C 每个采样点占1个字节,共8bit 。

表3.1 AD 数据位
D7 D6 D5 D4 D3 D2D1
D0AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
启动采集触发事件
时间
启动采集触发事件1
触发事件2
USB9812A和B 每个采样点占2个字节,共16bit。

表3.2 AD数据位
D15 D14 D13 D12 D11 D10D9D8D7D6D5D4 D3 D2D1D0 AD15 AD14 AD13 AD12 AD11 AD10AD9AD8AD7AD6AD5AD4 AD3 AD2AD1AD0
USB9812C:AD7~AD0:AD转换结果,AD数据格式见表3.3。

表3.3 AD直接二进制码数据格式
AD输入十六进制码
正满度FF
正满度-1LSB FE
中间值+1LSB 81
零点80
中间值-1LSB 7F
负满度+1LSB 01
负满度00
USB9812B:AD11~AD0:AD转换结果,AD数据格式见表3.4。

表3.4 AD直接二进制码数据格式
AD输入十六进制码
正满度FFF
正满度-1LSB FFE
中间值+1LSB 801
零点800
中间值-1LSB 7FF
负满度+1LSB 001
负满度000
USB9812A:AD13~AD0:AD转换结果,AD数据格式见表3.5。

表3.5 AD直接二进制码数据格式
AD输入十六进制码
正满度3FFF
正满度-1LSB 3FFE
中间值+1LSB 2001
零点2000
中间值-1LSB 1FFF
负满度+1LSB 0001
负满度0000
AD是直接二进制码输出,AD数据和物理量计算方法如下:
量化数值和电压换算关系:
v_value = Vpp*addat / AD_V ALUE-(Vpp/2)
其中: addat是AD数据 v_value是计算结果 Vpp最大输入范围
AD_V ALUE 最大量化数值,USB9812A 是16383,USB9812B 是4095,USB9812C 是255。

累加后数据格式:
表3.6 累加数据格式
D31 D30 D29 D28 D27 D26 D25 D24 D23 D22 D21 D20 D19 D18 D17 D31 R31 R30 R29 R28 R27 R26 R25 R24 R23 R22 R21 R20 R19 R18 R17 R31
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0
USB9812A 、USB9812B 、USB9812C 累加结果都是32bit ,R31~R0,占4个字节。

3.6 DI/DO 数据格式
采集卡包括8路DI 和8路DO ,兼容5V TTL
电平,各占一个字节,共8位。

表3.5 DI/DO 数据位
D7
D6
D5
D4
D3
D2
D1
D0
DI7/DO7
DI6/DO6 DI5/DO5DI4/DO4DI3/DO3DI2/DO2DI1/DO1 DI0/DO0
其中:
DI7~DI0:DI 数据,1表示输入高电平,0表示输入低电平。

DO7~DO0:DO 数据,1表示输出高电平,0表示输出低电平。

3.7 累加工作原理
图3.6 连续触发和累加
触发采集数据实现累加功能;采集模式为触发采集,触发源为外部信号,触发长度为n ,累加次数为k ,也就是累加k 次触发数据,最终上传是累加后数据。

采集数据为8bit/12bit/14bit 精度,累计后数据为32bit ,如下表所示
时间
启动采集
触发事件1
触发事件2
时间
触发事件k
FCFR-USB9812说明书
表3.6 累加功能表
触发1 D1_0 D1_1 D1_2 … … D1_n 触发2 D2_0 D2_1 D2_2 … … D2_n
… …
… … … … … … … … … …
触发k Dk_0 Dk_1 Dk_2 … … Dk_n
累加后数据
D1_0
+ D2_0
+ … …
+ Dk_0
D1_1
+ D2_1
+ … …
+ Dk_1
D1_2
+ D2_2
+ … …
+ Dk_2
… … D1_n
+ D2_n
+ … …
+ Dk_n
注意事项:
1. 累加操作设置操作门限:
设置累加门限为L。

累加过程中,读入的采集数据(比如D00)和L比较:采集点小于L,则累加采集点;采集点等于或大于L,则累加L。

如果要将所有数据累加,直接将累加门限设置成AD量化数值
255(USB9812C)/4095(USB9812B)/16383(USB9812A)。

2. 通道:
USB9812支持双通道采集和累加,而且两个通道是完全独立的,触发参数、累加参数、触发源都可以不一样。

当然,也可以一个通道是累加工作方式,一个通道是采集工作方式。

3. 数据处理能力限制:
目前USB9812最大数值处理能力是每通道100Mbytes/S,因为累加功能一般用在后触发或延时触发模式中,可根据触发长度和触发频率可计算出数据量。

累加次数满足k次后,最后要将累加结果要从累加缓存读出,写入海量硬件FIFO中,传输给PC,此时FPGA无法进行累加,如果发生触发,将不会响应,直到累加结果传输完成后,FPGA将重新响应。

如果触发长度,大于触发事件1和触发事件2事件间隔乘以采样率,触发事件2也不会响应。

4. 数据传输速度限制:
数据做完累加后数据,因为限制于USB接口传输速度,传输速度不能高于每秒36Mbytes。

最后结果数据量计算,例如每秒触发数据量是100M采样点,累加次数是20次,则累加结果数据量是(100M/20)*4(累加后数据是32bit),等于20Mbytes/S,满足传输速度限制要求。

4. 触发源:
触发源包括外正沿触发、外负沿触发、内PWM正沿触发、内PWM负沿触发、模拟输入信号正沿触发、模拟输入信号负沿触发。

外触发和内PWM触发是通过跳线来选择。

内部PWM也可以输出,来同步外部设备。

如果两个通道所有采集参数和累加参数都相同,在外触发源时,CH1和CH2触发源相同,则CH1和CH2采集和累加同步的;在内PWM触发源,CH1和CH2设置的PWM频率相同,则CH1和CH2采集和累加也是同步的。

如果是模拟输入信号触发,需要设置触发门限,程序中有滤波操作,防止误操作。

第四章硬件功能
4.1 USB9812板物理定义
4.1.1板尺寸和主要器件布置图
板尺寸:140mm(长) * 100mm(宽)
图4.1 USB9812主要元件布置图
P1-USB-A型座。

P2-外电源输入座,建议5V/2A输入。

J8-DI/DO,IDC-26座。

J1-外时钟输入,SMA座。

J2-CH1模拟输入,SMA座。

J3-CH2模拟输入,SMA座。

J4 -CH1外触发输入座(3.3V或5V TTL)/内PWM触发输出座(3.3VTTL),SMA座。

J5 -CH2外触发输入座(3.3V或5V TTL)/内PWM触发输出座(3.3VTTL),SMA座。

J6 - CH1触发源选择,1和2短接是内PWM触发,2和3短接是外触发。

提示:如果触发源选择是内PWM触发,1和2短接,J6是输出,不能输入信号,否则冲突。

J7 - CH2触发源选择,1和2短接是内PWM触发,2和3短接是外触发。

提示:如果触发源选择是内PWM触发,1和2短接,J7是输出,不能输入信号,否则冲突。

JS1-CH1输入阻抗选择,焊点,。

JS4-CH2输入阻抗选择,焊点。

JS2、JS3-CH1输入范围选择,焊点。

JS5、JS6-CH2输入范围选择,焊点。

LED4-电源指示灯
LED2-CH1累加功能触发溢出指示灯,如果某个触发不响应,则灯状态将翻转,灯闪烁越频繁,则表示触发不响应越多。

LED3-CH2累加功能触发溢出指示灯,同CH1。

4.1.2模拟输入阻抗选择定义
CH1阻抗:JS1短接,50欧阻抗;JS1断开,高阻。

CH2阻抗:JS4短接,50欧阻抗;JS4断开,高阻。

4.1.3模拟输入范围选择定义
USB9812C:
CH1范围:JS2和JS3都断开,-0.5V~0.5V范围。

JS2和JS3都短接,-2.5V~2.5V范围。

CH2范围:JS5和JS6都断开,-0.5V~0.5V范围。

JS5和JS6都短接,-2.5V~2.5V范围。

USB9812A和USB9812B:
CH1范围:JS2和JS3都断开,-1V~1V范围。

JS2和JS3都短接,-5V~5V范围。

CH2范围:JS5和JS6都断开,-1V~1V范围。

JS5和JS6都短接,-5V~5V范围。

4.1.4电源座定义
表4.1 电源插座P2定义
序号名称功能
1 GND 地
2 VDD 电源
3 GND 地
4.1.5DI/DO定义
表4.2 J8定义
序号名称功能序号名称功能
1 预留FPGA IO 3.3V 2预留FPGA IO 3.3V
3 预留FPGA IO 3.3V 4预留FPGA IO 3.3V
5 GND 地6GND 地
7 DO0 数字输出0 8DO1 数字输出1
9 DO2 数字输出2 10DO3 数字输出3
11 DO4 保留12DO7 数字输出5
13 DO6 数字输出6 14DO7 数字输出7
15 GND 地16GND 地
17 GND 地18GND 地
19 DI0 数字输入0 20DI1 数字输入1
21 DI2 数字输入2 22DI3 数字输入3
23 DI4 数字输入4 24DI5 数字输入5
25 DI6 数字输入6 26DI7 数字输入7
第五章软件功能
5.1 驱动文件组成
表5.1 驱动文件
文件名文件类型及功能适用的操作系统
USB9812.Sys Win32标准设备驱动WDM模式的
设备驱动程序库
Win98SE,WinMe,WinNT,
Win2000,WinXP
USB9812.Dll 底层驱动程序库的用户级函数接口
封装所用的动态库。

所有操作系统
USB9812.Lib 基于Microsoft Visual C++工程开发
环境的驱动程序函数接口输入库。

所有操作系统
USB9812.h 基于Microsoft Visual C++工程开发
环境的函数调用头文件。

所有操作系统
USB9812.Bas 基于Microsoft Visual Basic工程开发
环境的驱动程序函数接口输入模块
文件
所有操作系统
5.2 软件流程
为了方便用户编程,实现实时采集、实时处理和显示,USB9812.DLL提供了一系列简单函数,来完成设置和读数操作。

采集卡软件流程图见图5.1,先InitAD函数初始化和启动AD,函数ReadAD发出读请求,读取数据长度必须是256个采集点的整数倍,StopAD函数结束采集。

为了实现触发方式的高速采集,没有采用查询方式,而是和连续采集一样,直接发出读函数请求。

图5.1 数据采集流程图
5.3 函数列表
表5.2 驱动接口函数列表(每个函数省略了前缀“USB9812_”)
函数名函数功能
IsHighDevice 全速、高速USB设备判断
Link 连接设备
UnLink 断开设备连接
InitAD 初始化AD,启动AD采集
ReadAD 读取AD数据
StopAD 停止AD采集
SetDO 设置DO
GetDI 读取DI
GetFifoFlag 读取硬件FIFO标志
GetDevInfo 读取设备信息
使用注意:
Visual C++ :
将USB9812.h和USB9812.LIB拷贝到建立的VC项目文件下,并添加到项目中。

Visual Basic:
将模块文件((*.Bas)拷贝到建立的VB项目文件下,并添加到项目中。

5.4 结构和枚举定义
采集初始化结构
typedef struct _USB9812_PARA_INIT
{
LONG ClkDeci; //分频因子
LONG TriggerMode; //触发模式
LONG TriggerSource; //触发源
LONG TriggerDelay; //触发延时,仅延时触发模式有效
LONG TriggerLength; //触发长度
LONG TriggerLevel; //触发门限
LONG lSelDataSrc; //数据源选择,0-AD数据 1-计数器数据
LONG bEnADD; //累加功能使能,0非使能1使能
LONG lADDthd; //累加门限,仅bEnAdd使能时有效
LONG lADDcnt; //累加次数,仅bEnAdd使能时有效
LONG pwm_lHighCnt; //PWM周期高电平计数,基准10ns
LONG pwm_lAllCnt; //PWM周期总计数,基准10ns
} USB9812_PARA_INIT,*PUSB9812_PARA_INIT;
#endif
ClkDeci-分频因子,取值范围1,2,…10,1表示1分频,2表示2分频依次类推TriggerMode -触发模式,设置见枚举EmTriggerMode。

TriggerSource -触发源,设置见枚举EmTriggerSource。

TriggerDelay -触发延时,仅对后触发采集有效,延时单位是采样基准钟。

TriggerLength -触发长度,触发长度单位是Op,一个Op是8个采样点。

TriggerLevel -触发门限,
USB9812A取数值范围1~16363;
USB9812B取数值范围1~4095;
USB9812C取数值范围1~255。

lSelDataSrc -数据源选择,0-AD数据 1-计数器数据。

bEnADD-累加功能使能,仅USB9812A版本有效,使能时,采集卡输出累加数据,不使能时,采集卡输出原始数据。

lADDthd -累加门限,范围0~255,仅bEnAdd使能时有效,小于该门限的数据才参与累加。

lADDcnt -累加次数,范围1~65536,仅bEnAdd使能时有效。

pwm_lHighCn - PWM周期高电平计数,基准10ns
pwm_lAllCnt - PWM周期总计数,基准10ns
触发模式
typedef enum EmTriggerMode
{
TRIG_MODE_CONTINUE = 0, //连续采集
TRIG_MODE_POST = 1, //后触发
TRIG_MODE_DELAY = 2, //延时触发
//前触发,USB9812不支持
3,
TRIG_MODE_PRE
=
TRIG_MODE_MIDDLE = 4, //中触发,USB9812不支持
} TRIGGER_MODE;
触发源
typedef enum EmTriggerSource
{
TRIG_SRC_EXT_RISING = 0, //外正沿触发(数字触发)
TRIG_SRC_EXT_FALLING = 1, //外负沿触发(数字触发)
TRIG_SRC_PWM_RISING = 2, //内部PWM正沿触发(数字触发)
TRIG_SRC_PWM_FALLING = 3, //内部PWM负沿触发(数字触发)
TRIG_SRC_AD_RISING = 4, //模拟输入信号正沿触发(模拟触发,需设置触发门限) TRIG_SRC_AD_FALLING = 5 //模拟输入信号负沿触发(模拟触发,需设置触发门限} TRIGGER_SOURCE;
通道选择
typedef enum EmCHSel
{
SEL_CH1 = 0, // CH1
SEL_CH2 = 1 // CH2
} CH_SEL;
时钟选择
typedef enum EmADClkSel
{
ADCLK_INT = 0, //板上时钟
ADCLK_EXT = 1 //板外时钟
} ADCLK_SEL;
读/写零偏
#define WRITEOFFSET 0 //写零偏
#define READOFFSET 1 //读零偏
波形发生器基准时钟
#define PWM_BASE_FREQ 100000000L
ReadAD函数最大读取长度,3MSa
#define READ_MAX_LEN 0x300000
5.5 DLL函数说明
5.5.1USB9812_Link
函数原型:
VC:
HANDLE USB9812_Link(UCHAR DeviceNO);
VB:
Declare Function USB9812_Link Lib "USB9812.dll" (ByVal DeviceNO As Byte) As Long
功能:连接设备,连接成功后。

参数:
DeviceNO 设备号,例如0、1、2···,如果有多个USB设备连接在同一台PC上,例如设备数是2,则设备号依次为0和1,来分别连接设备。

返回:
设备句柄,如果非INVALID_HANDLE_VALUE,则打开设备成功
调用例子:
VC:
HANDLE hDevice = INVALID_HANDLE_VALUE;
hDevice = USB9812_Link(0)
if(!)//打开第一个设备
{
;//打开设备失败
return
}
VB:
Dim hDevice As Long
hDevice = INVALID_HANDLE_VALUE
hDevice = USB9812_Link(0)
If hDevice = INVALID_HANDLE_VALUE Then
Exit Sub
End If
5.5.2USB9812_UnLink
函数原型:
VC:
BOOL USB9812_UnLink(HANDLE hDevice);
VB:
Declare Function USB9812_UnLink Lib "USB9812.dll" (ByVal hDevice As Long) As Boolean 功能:断开设备连接。

参数:
设备句柄
hDevice
返回:
TRUE成功
FALSE失败
调用例子:
VC:
HANDLE hDevice = INVALID_HANDLE_VALUE;
hDevice = USB9812_Link(0)
if(!)//打开第一个设备
{
;//打开设备失败
return
}
//断开设备
if(!USB9812_UnLink(hDevice))
{
;//断开设备失败
}
VB:
Dim hDevice As Long
hDevice = INVALID_HANDLE_VALUE
hDevice = USB9812_Link(0)
If hDevice = INVALID_HANDLE_VALUE Then
Exit Sub
End If
result = USB9812_UnLink(hDevice)
If result = 0 Then
Exit Sub
End If
5.5.3USB9812_InitAD
VC:
函数原型:
BOOL USB9812_InitAD(HANDLE hDevice , LONG lSelADClk, PUSB9812_PARA_INIT
ch1_para_init, PUSB9812_PARA_INIT ch2_para_init)
VB:
Declare Function USB9812_InitAD Lib "USB9812.dll" (ByVal hDevice As Long, ByVal lSelADClk As Long, ByRef ch1_para_init As USB9812_PARA_INIT,ByRef ch2_para_init As
USB9812_PARA_INIT) As Boolean
功能:初始化AD,启动数据采集,调用USB9812_InitAD函数后,必须用USB9812_StopAD函数来结束数据采集。

参数:
hDevice 设备句柄。

lSelADClk 采样基准时钟选择。

CH1采集初始化结构。

ch1_para_init
ch2_para_init CH2采集初始化结构。

返回:
TRUE成功
FALSE失败
调用例子:
VC:
USB9812_PARA_INIT para_init;
LONG lSelADClk = ADCLK_INT;//采样钟选择
para_init1.TriggerMode = m_cmbMode.GetCurSel();//采集模式
para_init1.TriggerMode = m_cmbMode.GetCurSel();//采集模式
m_cmbSrc.GetCurSel();//触发源
=
para_init1.TriggerSource
para_init1.lSelDataSrc = m_cmbDataSrc.GetCurSel();// 数据源
para_init1.ClkDeci = m_nClkdiv; //分频因子取值1,2,3 (100)
para_init1.TriggerLength = m_nTrigLen; //触发长度
para_init1.TriggerDelay = m_nTrigDelay; //触发延时,仅延时触发有效,以基准时钟为单位
para_init1.TriggerLevel = m_lTrigLevel; //触发电平,仅触发模式+模拟信号触发源时,参数有效
para_init1.bEnADD = m_bEnADD; //累加使能
para_DDcnt = m_lADDcnt; //累加次数,仅bEnADD是TRUE时,参数有效
para_DDthd = m_lADDthd; //累加门限,仅bEnADD是TRUE时,参数有效
para_init1.pwm_lAllCnt = PWM_BASE_CLK/(m_lPWMprd); //PWM周期总计数
para_init1.pwm_lHighCnt = para_init1.pwm_lAllCnt/2; //PWM周期高电平计数,PWM等占空比 //memcpy(&para_init2,&para_init1,sizeof(USB9812_PARA_INIT));
= m_cmbMode2.GetCurSel();//采集模式
para_init2.TriggerMode
m_cmbSrc2.GetCurSel();//触发源
=
para_init2.TriggerSource
para_init2.lSelDataSrc = m_cmbDataSrc2.GetCurSel();// 数据源
para_init2.ClkDeci = m_nClkdiv2; //分频因子取值1,2,3 (100)
para_init2.TriggerLength = m_nTrigLen2; //触发长度
para_init2.TriggerDelay = m_nTrigDelay2; //触发延时,仅延时触发有效,以基准时钟为单位
para_init2.TriggerLevel = m_lTrigLevel2; //触发电平,仅触发模式+模拟信号触发源时,参数有效
para_init2.bEnADD = m_bEnADD2; //累加使能
para_DDcnt = m_lADDcnt2; //累加次数,仅bEnADD是TRUE时,参数有效
para_DDthd = m_lADDthd2; //累加门限,仅bEnADD是TRUE时,参数有效
para_init2.pwm_lAllCnt = PWM_BASE_CLK/(m_lPWMprd2); //PWM周期总计数
para_init2.pwm_lHighCnt = para_init2.pwm_lAllCnt/2; //PWM周期高电平计数,PWM等占空比
//初始化和启动AD
if(!USB9812_InitAD(hDevice,&para_init))
{
m_strOutput+="初始化AD失败\r\n";
UpdateData(FALSE);
;
return
}
VB:
见5.5.4
5.5.4USB9812_ReadAD
函数原型:
VC:
BOOL USB9812_ReadAD(HANDLE hDevice, LONG lSelCH, PUCHAR pBuf, ULONG nCount); VB:
Declare Function USB9812_ReadAD Lib "USB9812.dll" (ByVal hDevice As Long, ByVal lSelCH As Long, ByRef pBuf As Byte, ByVal nCount As Long) As Boolean
功能:读取采集数据
参数:
hDevice 设备句柄。

通道选择,0-选择CH1,1-选择CH2。

lSelCH
pBuf 接收数据指针,
原始数据格式:
USB9812C:pBuf[0]-采样点0,pBuf[1]-采样点1 …
USB9812A和USB9812B:采样点0-pBuf[1]<<8| pBuf[0]
采样点1-pBuf[3]<<8| pBuf[2]…
累加数据格式:
USB9812A、USB9812B和USB9812C:都是32bit累加数据结果,
累加0- pBuf[3]<<24| pBuf[2]<<16|pBuf[1]<<8| pBuf[0]
累加1- pBuf[7]<<24| pBuf[6]<<16|pBuf[5]<<8| pBuf[4]

读取采集点大小,值必须是256整数倍,nCount最大是3M采样点。

nCount
返回:
TRUE成功
FALSE失败
调用例子:
VC:
//初始化结构
USB9812_PARA_INIT para_init1;
USB9812_PARA_INIT para_init2;
para_init1.TriggerMode = m_cmbMode.GetCurSel();//采集模式
para_init1.TriggerMode = m_cmbMode.GetCurSel();//采集模式
=
m_cmbSrc.GetCurSel();//触发源
para_init1.TriggerSource
para_init1.lSelDataSrc = m_cmbDataSrc.GetCurSel();// 数据源
para_init1.ClkDeci = m_nClkdiv; //分频因子取值1,2,3 (100)
para_init1.TriggerLength = m_nTrigLen; //触发长度
para_init1.TriggerDelay = m_nTrigDelay; //触发延时,仅延时触发有效,以基准时钟为单位
para_init1.TriggerLevel = m_lTrigLevel; //触发电平,仅触发模式+模拟信号触发源时,参数有效
para_init1.bEnADD = m_bEnADD; //累加使能
para_DDcnt = m_lADDcnt; //累加次数,仅bEnADD是TRUE时,参数有效
para_DDthd = m_lADDthd; //累加门限,仅bEnADD是TRUE时,参数有效
para_init1.pwm_lAllCnt = PWM_BASE_CLK/(m_lPWMprd); //PWM周期总计数
para_init1.pwm_lHighCnt = para_init1.pwm_lAllCnt/2; //PWM周期高电平计数,PWM等占空比 //memcpy(&para_init2,&para_init1,sizeof(USB9812_PARA_INIT));
= m_cmbMode2.GetCurSel();//采集模式
para_init2.TriggerMode
=
m_cmbSrc2.GetCurSel();//触发源
para_init2.TriggerSource
para_init2.lSelDataSrc = m_cmbDataSrc2.GetCurSel();// 数据源
para_init2.ClkDeci = m_nClkdiv2; //分频因子取值1,2,3 (100)
para_init2.TriggerLength = m_nTrigLen2; //触发长度
para_init2.TriggerDelay = m_nTrigDelay2; //触发延时,仅延时触发有效,以基准时钟为单位
para_init2.TriggerLevel = m_lTrigLevel2; //触发电平,仅触发模式+模拟信号触发源时,参数有效para_init2.bEnADD = m_bEnADD2; //累加使能
para_DDcnt = m_lADDcnt2; //累加次数,仅bEnADD是TRUE时,参数有效
para_DDthd = m_lADDthd2; //累加门限,仅bEnADD是TRUE时,参数有效
para_init2.pwm_lAllCnt = PWM_BASE_CLK/(m_lPWMprd2); //PWM周期总计数
para_init2.pwm_lHighCnt = para_init2.pwm_lAllCnt/2; //PWM周期高电平计数,PWM等占空比
//初始化和启动AD
if(!USB9812_InitAD(hDevice,ADCLK_INT,&para_init1, &para_init2))
{
m_strOutput+="初始化AD失败\r\n";
UpdateData(FALSE);
;
return
}
LONG samcnt = 102400;
//分配内存
PUSHORT inBuffer = NULL;
inBuffer = new UCHAR [samcnt];
//读取CH1 AD结果
,0,inBuffer,samcnt))
(!USB9812_ReadAD(hDevice
if
{
m_strOutput+= "Error: 读取AD失败\r\n";
UpdateData(FALSE);
return;
}
//停止AD
if(!USB9812_StopAD(hDevice,0))
{
m_strOutput+="结束AD失败\r\n";
UpdateData(FALSE);
;
return
}
VB:
Dim para_init1 As USB9812_PARA_INIT
Dim para_init2 As USB9812_PARA_INIT
Dim nDev As Byte '设备号
Dim result As Boolean
Dim hilow As Byte '高速低速USB设备
Dim samcnt As Long '采样次数
Dim hDevice As Long ‘设备句柄
hDevice = INVALID_HANDLE_VALUE
hDevice = USB9812_Link(0)。

相关文档
最新文档