用NI的数据采集卡实现简单电子测试之1——USB-6009简介
本文从本人的163博客搬迁至此。
几年以来,一直担任学校“虚拟仪器”课程教师。以前上课都以介绍LabVIEW编程为主,硬件实验一直没有开展。这次借“西部高校实力提升工程”的机会,学院采购了一批NI的数据采集卡,终于有机会让学生动手开展一点硬件实验了。这次采购的是入门级的USB数据采集卡——USB-6009,NI没有为这卡提供外围实验电路,要用他上实验课还得自己动手为这个“小宝贝”设计几个实验,并配些外围电路。接下来的几篇博文,将分几次介绍为学生设计的实验及外围电路,写到哪算哪吧。今天先从小宝贝工具USB-6009介绍起。(NI官方网站上介绍资料的内容就不原样重复了,只把我觉得有用、有趣和大家会感兴趣的内容摘一下)
在NI众多的数据采集卡中,USB-6009可以算是性能最低的了,价格也相对最低——官方渠道约小3000元(个人觉得还是比国产的其他数据采集卡还是贵多了)。USB-6009性能不高,但“麻雀虽小,五脏俱全”,常见的功能一应俱全,基本能够体现LabVIEW+NI数据采集卡的开发特点。先来张外观照片。

再看看内部电路板(PCB的顶层,底层没东西)。

一、USB-6009的内部构成
打开后盖,看到USB-6009主要有两个芯片,一个是Silicon Labs的单片机,另一个是TI的十四位ADC,这两个芯片决定了USB-6009的基本性能。
单片机上的激光丝印看不出它的型号,但“Silicon Labs”、“TQFP-32封装”、“有USB DEVICE接口”几个条件一综合,大概能猜出来了:C8051F320——2.3KB RAM+16KB Flash。
TI的ADS7871是个功能挺全面的ADC。四个全差分通道,或变为八个单端通道。其他参数包括:14位分辨率;带有片上PGA;参考电压等都和USB-6009一样。个人觉得这个ADC最大的缺点就是最高采样率只有48KBPS。
二、USB-6009的模拟输入
1、输入范围
ADS7871,虽然可以接受差分形式的负电压,但同时要求输入电压的绝对值不能为负(0V到接近电源电压)。组成USB-6009后,模拟输入范围有一个值得注意的参数变化:USB-6009的任意模拟输入引脚都可以接受负电压(具体可达-10V到+10V),也就是支持真正的双极性输入,这一点可能是由USB-6009板子上的偏置调整电路做到的。就此要为NI点赞,实在是大大方便了使用者。偏置电路的出厂较准,在产品的生产过程中实在是比较麻烦的一件事情,这也许也是USB-6009价格较高的重要原因之一。
2、模拟分辨率
ADS7871的分辨率是14bits,在-10V到+10V的情况下,分辨率约为1.22mV。在很多应用中,这个分辨率并不算很高,例如后面将要提到的半导体温度传感器测温实验中1.22mV的分辨率就显得不太够。
当然在很多情况下,可以在进入A/D转换之前,对模拟信号进行放大以提高输入其分辨率,这样做的代价了是降低模拟信号的输入范围。例如,用PGA(可编程增益放大器)将信号放大10倍后ADC对放大前模拟信号分辨率将达到122uV,而输入范围将被限制在-1V到+1V之间。
值得注意的是NI对USB6009的设置非常有趣,只允许差分输入模式的模拟通道使用PGA,而对单端模式的通道却不能使用PGA。也就是说一旦在LabVIEW中将USB-6009的某个通道设置为RSE模式(单端)后,不论怎样配置其他参数,这个通道的分辨率都将为1.2mV。如果将USB-6009的某个通道设置为差分模式后,LabVIEW会自动的根据该通道模拟输入范围参数来控制PGA的增益值,从而达到提高模拟分辨率的效果。因此在这种情况下对模拟输入最大值和最小值的设置将是非常重要的。
3、模拟输入阻抗
ADS7871的输入阻抗达到6M欧姆,但USB-6009的输入阻抗仅为150K欧姆左右,可能是由于输入范围调整造成的,在客观上也起到了提高输入电流,提升抗干扰能力的作用。但在进行某些高输出阻抗的测试中,这可能导致测试失败,需要小心。
4、缓冲FIFO
C8051F320的片上RAM只有2.3KB,这意味着USB-6009单次采集缓冲的大小不可能超过这个数量。在LabVIEW编程时,最好不要把各个通道的“每通道采样数”之和设置到1K以上(每次采样需要14bits缓冲宽度)。
二、USB-6009的模拟输出
1、输出范围
USB-6009的输出电压范围是0-5V,且不能用程序调整该电压范围。这与模拟输入参数相差较大,在设计时需要特别注意,例如后面将要介绍的,用USB-6009测试三极管输出特性曲线的例子中,就需要调整模拟输出电压范围。
2、模拟输出阻抗
为保护USB-6009的模拟输出电路,其输出端串联了一个50欧姆的输出电阻。在使用中如果不注意这个输出电阻,它可能会在后级电路的输入阻抗的共同作用下,影响输出的电压值。
3、输出刷新速度
USB-6009的模拟输出非常奇怪:刷新速度只有150SPS!不知NI在这一点上是如何考虑的,这导致USB-6009基本无法输出有意义的时域波形,其模拟输出只能产生控制电压。
4、2.5V参考电压输出
这是由USB-6009输出的参考电压,在数字输出一边的第14脚,但应该属于模拟输出引脚,作用是供外部电路作为参考电压。使用时要注意,这个参考电压的输出阻抗较大,可达2K欧姆左右——这一点USB-6009的参考手册没有述及。
三、USB-6009的数字I/O
USB-6009共有12个数字I/O,分为P0——八个和P1——四个。每个都可以单独配置为“数字输入”、“集电极开路输出”或“推挽输出”三种模式。
1、数字输出
缺省情况下,为保证USB-6009的端口安全,当任意I/O被配置为输出时,它将采用集电极开路输出。虽称为“集电极开路”,但并非真正意义上的集电极开路。真实情况是这样的:该I/O的输出集电极被一个4.7K的电阻弱上拉到5V电源。这也意味着,如果使用缺省输出模式,最多只能输出1mA左右的拉电流——1mA即使只用来点亮一个小LED灯都很暗淡。在缺省的输出模式下如果想获得较大输出电流,应该采用灌电流形式:根据手册可获得8.5mA灌电流。
当然也可以采用“推挽输出”模式,获取较大的拉电流。但这种模式需要在LabVIEW中使用属性节点功能来配置,且推挽模式使用的高电平为3.3V。
2、数字输入
使用数字输入功能时,需要注意的是在“数字输入”模式下,USB-6009的输入阻抗较小。以连接触摸按键为例,需要使用1K欧姆左右的上拉电阻,才能使USB-6009读到高电平。
未完待续…………
用NI的数据采集卡实现简单电子测试之1——USB-6009简介的更多相关文章
- 用NI的数据采集卡实现简单电子测试之6——数字I/O及测试平台
本文从本人的163博客搬迁至此. 前面几个例子介绍了NI数据采集卡的模拟输入和输出功能,本例则集中介绍USB-6009的数字输入输出功能.本例包括基本数字IO电路及在LabVIEW中控制USB-600 ...
- 用NI的数据采集卡实现简单电子测试之2——绘制三极管输出特性曲线(面)图
本文从本人的163博客搬迁至此. 想设计几个实验,既能展示NI的LabVIEW和数据采集卡的功能特点,又能够让普通电类专业本科学生可以理解,自然首先想到了<电子技术基础>课程的内容.第一个 ...
- 用NI的数据采集卡实现简单电子测试之5——压控振荡器的测试
本文从本人的163博客搬迁至此. 为了展示连续信号采集的方法,以其外部触发采集功能.我用运算放大器实现了一个最简单的低频压控振荡器(VCO),作为USB-6009采集的信号源.在LabVIEW下编写的 ...
- 用NI的数据采集卡实现简单电子测试之4——半导体温度传感器
本文从本人的163博客搬迁至此. 为了展示NImax(Measurement & Automation explorer)的强大配置功能,做了一个半导体温度传感器测试的示例. 一.半导体温度传 ...
- 用NI的数据采集卡实现简单电子测试之3——绘制二极管V-I特性曲线图
本文从本人的163博客搬迁至此. 接下来用USB-6009和LabVIEW实现对二极管最重要的特性曲线“V-I特性曲线”的测试和绘制. 一.什么是二极管V-I特性曲线 康华光版的<电子技术 ...
- 【转】linux设备驱动之MMC SD卡——核心层简单分析
原文网址:http://blog.chinaunix.net/uid-28685940-id-3889878.html /*************************************** ...
- python3 练手实例5 做一个简单电子时钟
import time,sys,os while(1): t = time.strftime('%Y-%m-%d\n%H:%M:%S',time.localtime(time.time())) pri ...
- 自己实现简单的AOP(一)简介
AOP 和 OOP,在我看来是两种相辅相成的技术,作为OOP的补充,AOP 有着自己特殊的应用场景. 假设,我们需要在Service层实现以下几项基本功能: /// <para>1.自动管 ...
- 自制简单的.Net ORM框架 (一) 简介
在自己研究ORM之前,也使用过几个成熟的ORM方案,例如:EntityFramework,PetaPoco,Dapper 等,用是很好用,但是对自己来说总是不那么方便,EF比较笨重,Dapper要自定 ...
随机推荐
- 前端HTML空格与后台PHP utf-8空格
今天在处理html input输入框时,发现一个问题: 在用户名输入框中输入admin "'p(中间是一个空格),点保存后台提示数据保存成功,按理应该是未修改,通过chrome调试工具发现传 ...
- python面试十题
问题1: 请问如何修改以下python代码,使得下面的代码调用类A的show方法? class A(): def show(self): print("base show") cl ...
- 铁乐学python_md5校验两个文件的一致性
# 写一个函数,参数是两个文件的路径 # 返回的结果是T/F # 判断两个文件的md5值是否相同 import hashlib def diff_md5(file1,file2): def chick ...
- windows下PyCharm安装及使用
一.首先安装pycharm,可以参考这篇文章:http://www.jianshu.com/p/042324342bf4 1.win10_X64,其他Win版本也可以. 2.PyCharm版本:Pro ...
- 如何访问WEB-INFO目录中的jsp文件
说明:应用服务器把WEB-INF指为禁访目录,即直接在浏览器里是不能访问的. 如何访问如下: 1.在项目的web.xml文件中去配置servlet <servlet> <servle ...
- sql: having使用,及删除重复数据
写了好几年的sql,having语句基本上很少写,这就有一点尴尬了,现在总结一下having的作用,每日整理一下学习文档. having 通常伴随group by使用,过滤group by的数据集. ...
- Java 实现对文件系统的监控
在开发中经常会用到监控文件或是目录的状态,如果你还在手写轮巡扫描文件的话,那你久out了. 1. Commons io为我们提供了一套可靠.高性能的一套文件系统监控API 1.1. 需要的jar包如下 ...
- 学习python第四天——Oracle分组
1.分组的概念: 关键字:group by子句 结论:在select列表中如果出现了聚合函数,不是聚合函数的列,必须都要定义到group by子句的后面 需求: 查询公司各个部门的平均工资? sele ...
- Python:基础知识(二)
常用模块 urllib2 :用于发送网络请求,获取数据 (Pyhton2中的urllib2工具包,在Python3中分拆成了urllib.request和urllib.error两个包.) json: ...
- leetcode589. N-ary Tree Preorder Traversal
python 版: class Solution(object): def preorder(self, root): ret, q = [], root and [root] while q: no ...