本文从本人的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简介的更多相关文章

  1. 用NI的数据采集卡实现简单电子测试之6——数字I/O及测试平台

    本文从本人的163博客搬迁至此. 前面几个例子介绍了NI数据采集卡的模拟输入和输出功能,本例则集中介绍USB-6009的数字输入输出功能.本例包括基本数字IO电路及在LabVIEW中控制USB-600 ...

  2. 用NI的数据采集卡实现简单电子测试之2——绘制三极管输出特性曲线(面)图

    本文从本人的163博客搬迁至此. 想设计几个实验,既能展示NI的LabVIEW和数据采集卡的功能特点,又能够让普通电类专业本科学生可以理解,自然首先想到了<电子技术基础>课程的内容.第一个 ...

  3. 用NI的数据采集卡实现简单电子测试之5——压控振荡器的测试

    本文从本人的163博客搬迁至此. 为了展示连续信号采集的方法,以其外部触发采集功能.我用运算放大器实现了一个最简单的低频压控振荡器(VCO),作为USB-6009采集的信号源.在LabVIEW下编写的 ...

  4. 用NI的数据采集卡实现简单电子测试之4——半导体温度传感器

    本文从本人的163博客搬迁至此. 为了展示NImax(Measurement & Automation explorer)的强大配置功能,做了一个半导体温度传感器测试的示例. 一.半导体温度传 ...

  5. 用NI的数据采集卡实现简单电子测试之3——绘制二极管V-I特性曲线图

    本文从本人的163博客搬迁至此. 接下来用USB-6009和LabVIEW实现对二极管最重要的特性曲线“V-I特性曲线”的测试和绘制. 一.什么是二极管V-I特性曲线    康华光版的<电子技术 ...

  6. 【转】linux设备驱动之MMC SD卡——核心层简单分析

    原文网址:http://blog.chinaunix.net/uid-28685940-id-3889878.html /*************************************** ...

  7. python3 练手实例5 做一个简单电子时钟

    import time,sys,os while(1): t = time.strftime('%Y-%m-%d\n%H:%M:%S',time.localtime(time.time())) pri ...

  8. 自己实现简单的AOP(一)简介

    AOP 和 OOP,在我看来是两种相辅相成的技术,作为OOP的补充,AOP 有着自己特殊的应用场景. 假设,我们需要在Service层实现以下几项基本功能: /// <para>1.自动管 ...

  9. 自制简单的.Net ORM框架 (一) 简介

    在自己研究ORM之前,也使用过几个成熟的ORM方案,例如:EntityFramework,PetaPoco,Dapper 等,用是很好用,但是对自己来说总是不那么方便,EF比较笨重,Dapper要自定 ...

随机推荐

  1. Object、String、数组的 toString() 方法和 equals() 方法及java.util.Arrays

    public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...

  2. 关于Redo Log的基本操作

    1.创建新的日志组 alter database add logfile group 4 ('/u01/oracle/product/10.0.2/oradata/ORCL/redo41.log') ...

  3. springmvc源码解析-初始化

    1.      概述 对于Web开发者,MVC模型是大家再熟悉不过的了,SpringMVC中,满足条件的请求进入到负责请求分发的DispatcherServlet,DispatcherServlet根 ...

  4. “拒绝了对对象数据库的 EXECUTE 权限”之解决

    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决 [错误状态] “/XXX”应用程序中的服务器错误. ----------------------- ...

  5. 修改UIView的默认Layer后,修改View的值会动态修改Layer的值

    修改UIView的默认Layer后,修改View的值会动态修改Layer的值 效果图: 如上图所示,当我们修改了一个UIView的子类中的Layer内置类型时(如上图中我们将CALayer直接替换成了 ...

  6. LocationCoder 地图经纬度解析

    LocationCoder 地图经纬度解析 其实,在地图里面将地图解析成有意义的地址,或者把地址转换成有意义的经纬度都是很容易的事情,只是我将其封装了支持KVO,通知中心,block取结果,代理取结果 ...

  7. 【Excel】如何用SUMIF实现SUMIFS的功能

    如何用SUMIF实现SUMIFS的功能   添加辅助列,辅助列内容为"条件区域1内容+条件区域内容2" 举个例子,我要挑选出"二车间"的"过桥过路费& ...

  8. October 04th 2017 Week 40th Wednesday

    We teach people how to remember, we never teach them how to grow. 我们教会人们如何记忆,却从来不教他们如何成长. Without pr ...

  9. November 6th 2016 Week 46th Sunday

    The starting point of all achievements is desire. 成功的第一步是渴望. Those who make great achievements are o ...

  10. Hello World ! 第一篇随笔

    Hello World ! 第一篇随笔 /* * Language: C++ * Code Name: Hello World ! * @author Metak */ #include <io ...