首页 计算机虚拟仪器图形编程LabVIEW实验教材第八章 数字IO

计算机虚拟仪器图形编程LabVIEW实验教材第八章 数字IO

举报
开通vip

计算机虚拟仪器图形编程LabVIEW实验教材第八章 数字IO第七章 数字I/O 7.1 DI/O的基本知识 一般数据采集卡上都有DI/O功能,用来实现数据采集的触发、控制及计数等功能。DI/O 按TTL逻辑电平设计,其逻辑低电平在0到0.7V之间,高电平在3.4到5.0V之间。 数采板上多路(Line)数字 I/O 组成一组后被称为端口(Port)。一个端口由多少路数字 I/O 组成是依据其数采板而定的,在大多数情况下4或8路数字 I/O 组成一个端口。当读写端口时,你可以在同一时刻设置或获取多路DI/O的状态。MIO E 系列板卡有8路数字 I/O组成了一个端口,实际...

计算机虚拟仪器图形编程LabVIEW实验教材第八章 数字IO
第七章 数字I/O 7.1 DI/O的基本知识 一般数据采集卡上都有DI/O功能,用来实现数据采集的触发、控制及计数等功能。DI/O 按TTL逻辑电平 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ,其逻辑低电平在0到0.7V之间,高电平在3.4到5.0V之间。 数采板上多路(Line)数字 I/O 组成一组后被称为端口(Port)。一个端口由多少路数字 I/O 组成是依据其数采板而定的,在大多数情况下4或8路数字 I/O 组成一个端口。当读写端口时,你可以在同一时刻设置或获取多路DI/O的状态。MIO E 系列板卡有8路数字 I/O组成了一个端口,实际使用时这8路可以部分是输入,部分是输出。 数字量输入输出的应用分为以下两类:立即型(非锁存型)和定时型(锁存型)。在立即型情况下,当你调用数字 I/O函数后立即更新或读取数字量某一路或端口的状态。在定时型情况下,你可以使用外部信号来控制数字量数据的传输。 LabVIEW 中关于DI/O的VI也分为低、中、高三个等级。 在以下几个不同的子模板中: Data Acquisition » Digital I/O, 顶层 — 用于较简单应用中的Easy I/O VI。第二部分将讨论如何使用这些VI。LabVIEW基础教程中也将会详细讲述这些 VI。 Data Acquisition » Digital I/O, 底层 — 是一些属于中级水平应用的VI,主要用于需要时间或握手线方面的数字信号应用。这些VI可用于单字节数据的传输。第三部分将详细讨论关于这方面数字量信号的操作。图5-2 显示的是Data Acquisition » Digital I/O 子模板。 Data Acquisition » Digital I/O » Advanced Digital I/O — 高级水平DI/O VI 可用于作为创建其他数字VI的基本模块。这些高级数字量VI可用于立即型DI/O和定时型DI/O 。图5-3显示的是 Data Acquisition » Digital I/O » Advanced Digital I/O 子模板。 图 5-2. Data Acquisition » DI/O 子模板 图 5-3. Data Acquisition » Digital I/O » Advanced Digital I/O 子模板 立即型 DI/O 立即型DI/O 是最简单而且也是较经常使用的关于数字量方面的应用。它也叫非锁存型的DI/O,所有带有 DI/O 接口的数采板都支持这种DI/O 模式。在这种模式下,当LabVIEW 调用函数后即可立即设置或获取某路DI/O的状态。当某路DI/O被设定为某一状态后,那么该路DI/O 将一直保持这种状态直到其状态被重新设定为止。你可以通过软件改变某路DI/O 是输入或是输出方式。下面将讨论LabVIEW DAQ VI中的立即型 DI/O。 Easy I/O VI 使用Easy I/O digital VI 你可以立刻输入或输出某一路(某一端口)的数字量。当你设置DI/O VI iteration端为缺省参数时,每当你调用一次DI/O 函数时系统将会按需要自动设置一次数采板。当你在一个循环中重复调用某个DI/O 函数时,为了避免系统重复设置数采板,你可以设置DI/O VI iteration 端为正数。这些VI 可用于所有带有数字量输入输出的NI数采板。 Write to Digital Line 设置某一端口中某一路 DI/O为逻辑高或者逻辑低状态 Device 是数采板的设备号(device number);Port number 是该路DI/O 所在的端口号;Line 准备要写的该路DI/O 的通道号;Line state 是指准备要写的该路DI/O 的状态:高(true) 或低(false)。 图5-4. Write to Digital Line Read from Digital Line 读取某路 DI/O 的状态。Device 是数采板的设备号(device number);Port number 是该路DI/O 所在的端口号;Line 准备要读取的该路DI/O 的通道号;Line state 返回要读取的该路DI/O 的状态:高(true) 或低(false)。 图 5-5. Read From Digital Line Write to Digital Port 向某一指定的端口写一数字量,从而同时设定某一端口所有路DI/O通道的状态。Device 是数采板的设备号(device number);Port number 是准备要写的端口号;Pattern 是该端口要写的二进制或等同的十进制数字量。 图 5-6. Write to Digital Port Read from Digital Port 读取某一指定端口所有路的DI/O 通道的状态。Device 是数采板的设备号(device number);Port number 是准备要读取的端口号;Pattern 是返回从该端口读取的数字量(十进制形式)。 图 5-7. Read From Digital Port 如果在调用Easy I/O digital VI 时发生错误,系统将会弹出一对话框显示出错代码,这时你可以终止或继续执行VI。 注意:当你只调用一个Easy I/O digital VI实例读或写某个通道或端口时,程序是不会出错的。但是当再次调用函数时会通过改变移位寄存器的状态来重新改变DI/O的设置,故你不能调用多个VI实例来控制多个端口。在这种情况下你可以通过使用下面将讨论的高级VI来达到该目的。 高级 VI (Advanced Vis) 使用高级 DI/O VI 也可以执行立即型 DI/O。(实际上,Easy I/O VI 是由多个高级VI所组成的)。使用高级 VI你可以更高效的执行数字I/O的读写工作,因为当你调用高级VI 时,它不会象使用Easy I/O VI 那样每次运行时都需要去改变数采板的设置。高级VI允许你使用通道屏蔽技术更新某一端口中数个DI/O通道,而无须更新整个端口。根据高级VI提供的错误信息你可以用来开发出自己错误处理程序。这些高级VI 可用于所有带有数字量输入输出的NI 数采板。 DIO Port Config 设置某个端口为写或读状态。Device 和 port number设置板卡的设备号与端口号;Line direction map 设置端口为输入或输出状态;除了 TIO-10 与 MIO E 系列板卡外,其余板卡同一端口中所有各路DI/O必须是同向的,即:同是输入或者同是输出。task ID out 的输出将用于下一VI函数做为创建了一任务的唯一标识。 图5-8. DIO Port Config V DIO Port Write 根据已创建任务的标识taskID立即更新端口的DI/O通道状态。pattern 输入的是一十进制数,当其换算为二进制时代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 的是要更新的各路DI/O通道的状态。举个例子来说:若设pattern为1(二进制0001)那么将仅只设通道0为高电位,若设pattern为15(二进制1111)那将设通道0,1,2,3为高电位。 图 5-9. DIO Port Write VI 使用line mask 输入, 你可以仅只改变你指定的D /IO通道状态。line mask 输入的是一十进制数字,该数字的值决定了那一个DI/O通道的状态被更新。举个例子来说:若line mask设为1(二进制0001)那么只有通道0被更新,若line mask设为15(二进制1111)那么通道0,1,2,3状态将被更新。未被包含在line mask中的通道其状态将不会被改变。图5-10 显示的两个例子就是使用line mask来控制端口中那路DI/O通道状态会被更新。你可以使用Scale By Power of 2 函数来选择单路通道或输入一十进制数直接选择多路通道。在图5-10a中,pattern值设为8(二进制1000)时,通道3将会被更新。在图5-10b中,pattern值设为6(二进制0110)时,通道1,2将会被更新。假如你已设定该端口为输入状态,那么error out 将会返回一个错误代码。 图 5-10. 利用通道屏蔽技术来更新一个或多个通道的状态 DIO Port Read 根据已创建任务的标识taskID来获得端口的DI/O通道状态。pattern 返回的是一十进制数,当其换算为二进制时代表的是各路DI/O通道的状态。使用通道屏蔽技术你可以返回指定的通道状态,未被包含在line mask中的通道其状态将在pattern的返回值中被设为逻辑低(也就是0)。 图 5-11. DIO Port Read VI 立即型DI/O 的应用 立即型DI/O主要应用于:控制或监测继电器,作为计数器Gate口的输入或者用于其他TTL设备。例如可用立即型DI/O控制National Instruments SC-2062, SCXI-1160和SCXI-1161继电器开关。 例1—监测开关状态 本例演示如何使用Easy I/O VI Read from Digital Line 来监测一外部开关的状态,关闭该开关后即初始化LabVIEW测试程序。其硬件配置如图5-12所示。 图5-12. 使用DI/O监测开关的状态 在如图5-13所示的程序框图中,Read from Digital Line连续不停的读取端口0的第0路通道的状态直到该通道状态为TTL逻辑低(当开关关闭时),该VI退出While循环,然后运行下一测试子VI。Read from Digital Line设置端口为输入状态。 图5-13. 监测开关状态程序框图 例 2—继电器控制阀门 假如你想通过调节阀门来控制流入某个罐子中水的流量:当罐中液位低于某个位置时,你想要打开阀门让水流入;当罐中液位高于某个位置时,你想要关闭阀门。通常情况下阀门是关闭的,所以你必须通过提供外部电力(如:120VAC)来打开阀门。图5-14显示了如何使用SCXI-1161继电器模块来控制这样一个系统。SCXI-1161有8个继电器(图5-14仅显示了一个),每个继电器有一COM位置,一NC位置和一NO位置。当通电完成后或处于歇息状态时,SCXI-1161即从COM位置连接到NC位置。 图 5-14. SCXI-1161控制阀门 在本例中,数采板上的某路数字量 I/O被设为输出模式后与继电器0相连。当向该路DI/O写1时,与之相连的继电器会切换到NO位置即连通电路从而打开阀门。下面图5-15所示的LabVIEW程序框图就是用高级DI/O VI来控制该系统的。首先把SCXI-1161模块的端口0设为输出状态;用Scale By Power Of 2函数创建一通道屏蔽仅控制通道0;Get Tank Level 子VI返回罐子的液位。当液位低于设定的最低液位(LowLevel)时,程序即会向控制继电器的DI/O通道写入1从而打开阀门让水流入。与之相似,当罐子的液位高于设定的最高液位(HighLevel)时,程序即会向控制继电器的DI/O通道写入0从而关闭阀门停止水的流入。 图5-15. 阀门控制的程序框图 继电器接触保护 我们经常连接电动机,阀门,螺线管以及白炽灯这些具有感应性质的负载到继电器上,当继电器切换状态时就会产生巨大的反方向感生电动势。因为这些感应负载存储了大量的能量,所以常常在这种情况下会毁坏继电器或者缩短其寿命。最好的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 就是使用一接触保护电路来限制在这种情况附加的感生电动势。你可以设置保护电路直接通过负载(在小型直流情况应用时,你可以把保护电路直接安装通过继电器接触段)。假如你直接使用继电器,开启计算机时数采板会设置DI/O 线的输入为高阻抗,你需要在DI/O线上连接一电阻并在设置DI/O为输出模式前将其设为一已知的状态。 练习 5-1 目标:使用一路DI/O 完成一立即型数字量输出 建立一VI可通过前面板的开关可控制试验盒上边PA组的LED灯的状态。当你开启开关时LED灯亮,关闭开关时LED灯灭。请使用Data Acquisition » Digital I/O » Advanced Digital I/O 模板中的DIO Port Config 与DIO Port Write VI(请不要改变该端口其他各路DI/O的状态)。你可以使用Switch LED VI作为开始。 下图显示了试验盒上边PA组的LED灯与DAQ板端口0第0路DI/O的连接。 提示:确保DIO Port Config VI 的 line direction map 的输入端是-1,从而设置端口为输出模式。请记住DAQ信号附件使用的是负逻辑:当你写假(逻辑低)时LED则亮。且请使用通道屏蔽技术来更新0路DI/O。 练习 5-1 结束 练习 5-2 目标:在数字端口上执行立即型数字量输出 写一个VI可随机产生一个1到4的整数,通过DAQ信号附件端口0上的LED灯的状态来指示产生的是那一个随机数。假如是1,则左边的LED会亮而其他的灯全灭;假如是2则最左边的第二个灯会亮,依次类推。使用Data Acquisition » Digital I/O » Advanced Digital I/O模板中的DIO Port Config 和DIO Port Write VI。请使用Digital Random Number VI开始。 练习 5-2结束 定时型DI/O 定时型 DI/O也叫做锁存型 I/O是第二种类型的数字量通信,它用来使用外部信号控制或作为握手信号的数据传输。握手信号确保了在你初始化操作之前数采板或仪器已准备好了传输数据。 表5-2显示的是数采板能有的锁存型 DI/O端口的数目。对于某些数采板,具备锁存功能的端口数目小于实际数采板上端口的总数目,这是因为这些数采板使用的是Intel8255A PPI芯片来控制数字线的。每个芯片是由3个8位的端口组成,当芯片上一个或多个端口设置为锁存型DI/O时,这些端口中的某个端口上的几路DI/O是保留用来作为控制握手信号的。所以一个芯片上最多有两个端口被用做锁存型数字端口。 表 5-2. DAQ 板上能有的锁存型DI/O 端口的数目 DI/O-32 型数采板有4个8路DI/O端口。所有这些端口都可用做锁存型DI/O。另外,这种类型数采板有另一定时型DI/O功能即信号产生,是用一时钟产生握手信号来初始化数据传输。这就意味着你可以以一定的频率输出或接受数字量数据。这种方法在你的仪器或外部硬件不支持握手信号而你又想定时数据传输时是非常有用的。 定时型 DI/O VI 下面是使用握手线时传输数字量数据的高级VI: Digital Group Config 设置使用的device 和 端口。 你设置 port list 组成了一组端口。task ID out 用来作为识别任务的标号。group 输入是指已有一组端口,那么新设置将会替代已有的的设置。group direction 输入端指定了组中的端口的方向。当该组支持握手线时 handshaking返回值为1 ,否则为0。 Figure 5-16. Digital Group Config VI Digital Single Write 根据task ID 任务标识执行数字量的输出。opcode设定指定传输是否使用握手线。Pattern list是一准备被输出的一维数组。time limit设置决定传输时所分配的最大的时间。假如数据传输未在一定的时间内完成,函数将返回一个警告信息。patterns written输出将返回更新组(Group)后的组数。假如组中包含两个端口且pattern list有5个待输出的信号元素(即2.5个组信号),那么仅只有前四个信号元素被输出且patterns written的返回值为2。 Figure 5-17. Digital Single Write VI Digital Single Read 根据task ID 任务标识执行组内端口的数字量读取。Opcode输入端确定数据传输是否使用握手线。Number to read确定是那一组输入被执行。time limit设置决定传输时所分配的最大的时间。假如数据传输未在一定的时间内完成,函数将返回一个警告信息。Pattern list返回的是读取回的一维数组。patterns read输出将返回读取组(Group)后的组数。 Figure 5-18. Digital Single Read VI DIO Single Read/Write, 一中级VI你可以在Data Acquisition » Digital I/O模板中找到该VI,它是在我们上面讨论道的高级VI的基础上作出来的。请记住:当你在循环中使用DI/O时,最好使用高级VI以免象DIO Single Read/WriteVI这样在循环中重复设置配置。 Figure 5-19. DIO Single Read/Write VI Digital Single Read 与 Digital Single Write VI的执行是同步的;当它们被调用后直到完成期间,其他LabVIEW过程是不会被执行的。这种方式对于短急信息的传输来说是非常有效的,但是当你想传输长数据流时就有可能长时间的占用计算机的资源。在这种情况下你就可以使用下面将讲到的缓冲 DI/O。 例子 --- PC-PC 数据传输 你可以用有定时型DI/O的数采板来完成通信应用,例如 PC-to-PC的数据传输。图5-20显示了使用两台都装有DIO-32F数采板的计算机来完成PC-to-PC的数据传输。在这个例子中REQ 与ACK线分别用于输入与输出的握手线信号。当软件调用操作且在REQ线上接受到信号后,数采板就会执行一次数据传输。当执行完传输后数采板会在ACK线上发出一个脉冲。这样就可以保证数采板间数据传输的同步性。 Figure 5-20. DIO-32F 用于PC到PC 的数据传输 LabVIEW 框图 输出数采板 输入数采板 缓冲型 DI/O VI 假如需要大数量的数据传输,你也许希望使用非同步中断驱动式传输。这样不至于在传输数据时占用计算机的资源。使用这种方式传输数据时,一计算机内存缓冲被分配为后台线程输入或输出缓冲中。 中级Data Acquisition » Digital I/O的模板中包含了用于建立数字量信号发生的VI。表5-3中显示的是缓冲式数字IO程序设计的顺序,这些VI与第四课表4-1中的缓冲式模入和模出的程序设计顺序相类似。 表5-3缓冲式数字IO程序设计的顺序 DIO Config 设置的一组端口为输入或输出模式;创立数据缓冲,产生了任务唯一标识符,它将会被下面的DIO函数使用。 DIO Start 启动缓冲式DIO操作。设定更新或读取的点数,当你输入0时将连续操作。指定握手信号源:内部时钟用于信号发生,IO连接端口,或RSTI连接端口。当执行信号发生时,你也可以输入握手线信号的频率。 DIO Read 返回从数字量缓冲中扫描的数据;返回缓冲中的数据剩余量;返回在一定时限中操作的初始化是否成功信息。 DIO Write 用于输出操作中更新缓冲中的数据。当等侯的握手信号发生时,端口将被新的缓冲数据更新。假如在一定时限内握手信号没有出现,将返回一错误信息。 DIO Wait 等待与任务标识符task ID.相关任务的数字量输入或输出操作的完成。 DIO Clear s停止操作,同时清除与task ID任务相关的缓冲。 注意:当你使用这些VI时,你的数采板必须支持握手信号。表5-2显示了NI公司生产的哪一些数采板支持握手信号。信号发生的功能只有AT-DIO-32F, PCI-DIO-32HS,和 AT-DIO-32HS型号的数采板具有 下面的框图显示了使用缓冲式握手数字IO VI的工作。每一个用于该框图的数字量VI将在下面进行详细的讨论。 DIO Config VI. 设置端口1端口1为一组输出组,同时为它们分配了数据缓冲。 DIO Write VI.将一个一维整形量数组存于缓冲中。FOR循环使用自动索引输出方式创建了该数组。 DIO Start VI. 设置I/O接线端口为握手信号源,并启动输出操作。 DIO Wait VI.等待缓冲式输出操作完成。DIO Clear VI.清除输出操作任务。 第1课 计数器 Counter I/O 对于一个成熟的数据采集和控制系统来说,它有一种非常重要的要求就是能操纵和协调多种不同时间参数和事件。这就需要某些硬件机构完成高精度的定时工作,那么这些机构中最基本的功能块就是计数器。如果给予计数器非常精确的时钟你就可以把它应用到非常广泛的定时和计数应用之中去。例如:检测和分析数字波形,产生复杂的方波。 你可以在NI的某些系列的多功能数采板上找到应用计数器的例子,那就是AM9513A系统定时控制器。这个集成电路是由5个16位的计数器构成的,它们主要负责DAQ操作的定时工作,如多用途定时及计数器应用。尽管AM9513A是一多用途定时计数控制器,但它并不是专门为数据采集使用而专门设计的。因为AM9513A仅有5个计数器,假如你在运行某些同步操作时那么这些计数器将不够用,举个例子来说AM9513A就没有足够的计数器来同时执行模拟输入、模拟输出和频率测量。 正是AM9513A的局限性,所以NI公司专门研制了数据采集控制器(System Timing Controller (STC))用来控制E系列的多功能数采板的定时操作。DAQ-STC与现在其它公司生产的定时计数器相比,它具备有可扩展功能,低造价、低功耗的这些特点。这一块专用集成电路芯片总共有10个16位和24位20MHz的定时计数器。其中四个计数器用于控制模拟输入的定时操作,四个计数器用于模拟输出的定时操作;其它两个是留给用户使用的多用途,UP/DOWN,24位20MHz的定时计数器。 对于更高要求的定时计数操作,NI公司专门研发了NI-TIO 集成电路芯片用于6602和445X系列数采板。这些定时计数器芯片是与DAQ-STC相兼容的,同时又提供了其它的附加功能。每一个NI-TIO芯片有四个能用于80 MHz、20 MHz、100 kHz时基的32位计数器,每一个计数器都有能被外部或内部信号控制的GATE,UP/DOWN,SOURCE 输入口。如果使用预标定技术,NI-TIO能测量甚至频率高达125MHz的连续,高速,重复信号的周期或频率。 因为直接低层编程使用定时计数器芯片是非常困难的,所以LabVIEW提供了一系列高级的定时/计数器库函数。在简化了定时/计数器使用的同时并没有牺牲它们广泛的灵活性。在NI-DAQ6.5 有一个例程库,在该库中有每一种NI定时/计数器芯片的使用例子:8253.llb,Am9513.llb,DAQ-STC.llb以及NI-TIO.llb。下面将对计数器做一简单描述,接着将介绍 LabVIEW 中计数器 VI 以及使用计数器的例子。 计数器信号 计数器可以接收或输出TTL兼容信号,一个TTL高电位信号是被定义为其电位在2.0和5V之间的信号,TTL低电位是指其电位在0到0.8伏之间。一个能被计数器测得的信号,至少其特征不低于能被该计数器识别的最小的脉冲宽度,上伸时间、下降时间,请看图6-1。 图6-1计数器信号的特性参数 计数器操作 计数器是一能测量信号的变化过程或产生不同类型时间信号的设备。我们可以看一看如图6-2所示的计数器的简化模型:一个SOURCE输入口,一个GATE输入口, 一个 OUT 输出口, 以及一个计数寄存器。数采板上分别对应的端口为:SOURCE n, GATE n,以及 OUT n(n是指计数器的序号)。 图 6-2. 计数器的简化模型 你可以设置计数器对SOURCE输入端口由高到低或由低到高的信号状态进行计数;并可以设置内部计数寄存器的计数方式为递增或递减方式;当你想知道信号状态改变的次数时,你就可通过读取内部计数寄存器的值即可知道。 GATE 口的输入端控制了计数器的计数操作。你可以将计数器设置为以下的几种门限工作方式:高电位时计数,低电位时计数,上升沿触发计数,下降沿触发计数,及无门限方式。高电位或低电位计数方式:只有当GATE口的输入信号为高电位或低电位时,计数器才计数。上升沿触发计数或下降沿触发计数方:当GATE 口接收到一由高到低或由低到高的状态变化信号后即开始计数。无门限方式:通过软件来初始化开始计数操作。 你可以使用计数器的OUT口发生多种类型的波形,或者用于计数器的串级使用中,从而增大计数器的量程。在一般模式下你可以设置计数器的端口输出一个脉冲或当计数寄存器已达到它的最大值时,输出一个切换状态作为一个终结计数。当接上一个时钟后你可以让计数器发出特定的频率和占空比的脉冲信号(一个占空比定义为:Phase 2 /[Phase 1 + Phase 2],如图6-3所示)。输出的极性设置决定了初始化的OUT口信号是低(正极性)或高(负极性)。 图 6-3. 计算脉冲的占空比 图6-4显示了计数器GATE 口工作为高电位计数时的情形, OUT口终结计数 显示了两种输出:脉冲,切换状态。 图 6-4. 计数器GATE 口工作为高电位计数 LabVIEW 计数器 VI LabVIEW 计数器 VI 被分为了以下三个类型的模板: Easy I/O VIs (Data Acquisition » Counter 模板):较简单的且经常使用的计数器VI。如用于以下常用的定时计数操作:事件定时/计数,产生单个脉冲,产生脉冲序列,测量脉冲宽度或周期以及频率测量。这些VI使用时在前面板都有错误处理和详尽的操作指示。 Intermediate VIs (Data Acquisition » Counter » Intermediate Counter 模板):主要用于设置和控制计数器的操作,这些VI比Easy I/O VI更灵活。所有的中级计数器VI都使用了LabVIEW的错误处理,过你可以建立自己的错误处理路径。这些VI使用时在前面板都详尽的操作指示。 Advanced VIs (Data Acquisition » Counter » Advanced Counter 模板):高级计数器VI主要用于作为创建其他数字VI的基本模块。这些VI是最灵活也是最复杂的。典型的来说,用于需要多设置和控制的应用中。象中级计数器VI一样,使用高级计数器VI时你也可以建立自己的错误处理路径。 注意 当你打开 Windows » Show VI Info... 菜单后,便会弹出一窗口告诉你如何连接source口,gate口以及 output口。 在大多数情况下,我们使用Easy I/O 计数器VI,下面部分将介绍在不同情况下使用这些VI。在后面的章节中将介绍中级和高级VI的使用。 事件定时和计数 在本部分将介绍计数器的常用操作:事件定时/计数,产生单个脉冲,产生脉冲序列,测量脉冲宽度或周期以及频率测量。每个应用程序都将用到一个或两个Data Acquisition »Counter VI 。在LabVIEW中都有例程显示如何使用其中的每个VI。 你可以把Easy I/O VI Count Events or Time 用于事件定时/计数(图6-5),例如SOURE输入口信号上升或下降沿出现的次数。device 和counter 输入端指定了是那一块数采板的那一个计数器端口将接收事件。Source edge 确定该事件是上升沿还是下降沿。当event source/timebase 的输入端值小于或等于零时,计数器将对SOURE口输入的信号进行计数。当event source/timebase被设置为有效的内部时钟频率时,计数器将对SOURE口输入的内部时钟信号进行计数。根据你使用的数采板来决定你可用的有效内部时钟频率,如使用DAQ-STC芯片的数采板其内部有效时钟频率可为20MHz和100KHz。Counter size输入设置了最大计数容量,当超过该值后计数器将会溢出并重新清零。DAQ-STC芯片上24位的计数器在溢出前其最大计数容量为16M。start/restart输入端控制计数器启动/停止操作。 图6-5.事件定时/计数VI count 输出端返回的是当前计数器寄存器的值。seconds since start 返回自计数器启动后的时间值。seconds since last call 返回自计数器寄存器被读取后的时间值。只有当event source/timebase 输入端为有效内部时钟时seconds since start 与seconds since last call的返回值才有实际意义。 练习 6-1 目标: 对一已知的时钟信号的上升沿进行计数 1.打开Exercise\lesson6.llb\Event countingCounting/Timing.vi,查看该VI的前面板和后面框图。该VI允许你重复启动或停止Counter 1。这个计数器是对频率为100 KHz的内部时钟的上升沿进行计数的。Status输出指示了计数器当前是否在运行。Count Events or Time输出全部都显示在前面板上。 前面板 程序框图 Count Events or Time VI (Data Acquisition » Counter 模板)。 当你按下前面板Start Counter 按扭后即启动计数器对内部时钟信号上升沿进行计数。在每次的While循环中,该VI都读取计数器寄存器的值并计算计数器被启动后的时间和上次被读取后的时间值,假如你按下前面板Stop Counter按扭即停止计数器的运行。 Wait Until Next ms Multiple 函数(Time & Dialog 模板)。在本练习中控制While循环的运行速度和每隔1秒监视计数器的状态。 Status 局部变量 (Structures 模板).。在本练习中设置前面板的状态字符串来显示计数器是在计数还是在等候。 2.运行VI。当你按下Start Counter按扭后,即看到Status输出为Counter is counting。同时,Counter Register Value 的显示应为每隔一秒递增100,000。Time Since Start显示你启动计数器后的时间;Time Since Last Call显示上次计数器寄存器被读取后的时间,因为While循环是每隔一秒运行一次故该值应始终为1。当你按下Stop Counter后即停止计数器的运行,此时Status显示为Counter is waiting。 3.当按下Quit按扭后即从该VI中退出。关闭该VI,不要保存任何改动。 练习 6-1结束. 发生脉冲 发生脉冲是计数器另一教常用的功能。你可以在OUT口输出一个或一串脉冲。你可以使用Generate Delayed Pulse VI发生一单个脉冲;Generate Pulse Train VI发生一脉冲序列。着两个VI都在Data Acquisition » Counter模板中。使用这两个VI时你需要设定以下参数:脉冲极性,延迟,幅宽(延迟和幅宽之和为脉冲宽度)以及占空比。脉冲极性(如图6-6所示)决定了脉冲为高还是低。 Figure 6-6. 脉冲极性高低的例子 注意 占空比定义如下:Duty cycle = Width / (Delay + Width). 发生单个脉冲 Generate Delayed Pulse VI (图 6-7) 输出一由pulse polarity, pulse delay 和pulse width 参数决定的单个脉冲。device 和counter 输入端指定了是那一块数采板的那一个计数器输出单个脉冲。gate mode设置了计数器工作的门限模式(具体使用时,请给计数器的GATE输入口接上一外部的门限信号)。Timebase source决定了那一时钟用于延迟和幅宽。假如你使用内部时钟,那么数采板上的时钟作为延迟和幅宽的计时可达到秒的量级。假如你使用外部时钟,那么请你确保把外部的时基信号连接到计数器的SOURCE端口上,此时延迟和幅宽的计时是以外部时基的周期数为单位的。taskID输出包含了产生该脉冲所有设置的信息,是标识该任务的标识符。你可以把taskID输出作为中级Counter Start VI的输入参数从而可再发生同样的脉冲。 Figure 6-7. 产生延迟脉冲的VI 发生脉冲序列 用Generate Pulse Train VI (图 6-8)可输出一系列由pulse polarity, frequency, 和duty cycle输入参数决定的脉冲序列。Device,counter,和gate mode输入参数的意义与Generate Delayed Pulse VI同名参数的意义相同。输入参数number of pulses设定了脉冲序列的长度。假如你把number of pulses设为零,那么该VI将发生连续的脉冲序列。TaskID输出包含了产生该脉冲序列所有设置的信息,是标识该任务的标识符。当你产生一有限长度的脉冲序列时将使用的是taskID of counter-1返回值作为任务标识符。你可以把taskID或taskID of counter-1输出作为中级Counter Start VI的输入参数从而可再发生同样的脉冲序列。 Figure 6-8. 发生脉冲序列 VI 当你使用计数器发生一脉冲或脉冲序列时,用于启动计数器操作的信号与控制脉冲周期的时基信号并不是同步的。在大多数情况下启动的脉冲信号并不是恰好在时基信号的上升沿时出现的。这也就是说,在启动发生脉冲时会有大致一个时基时钟周期的误差。图6-9显示了使用高电位门限触发启动计数器操作时的这种误差。这种误差在使用软件提供启动计数器操作信号时也存在。 Figure 6-9. 启动计数器发生脉冲序列时的不确定性 练习 6-2 目标: 使用计数器发生一个脉冲 在运行该练习之前,请将试验盒上的GPCTR1 OUT接线端连线到模拟输入ch0上。 1. 打开 Exercise\Lesson6..llb\Counter Single Pulse VI 查看该程序的前面板和后面板框图 前面板 程序框图 2. 打开并运行Read and Chart VI,该 VI 会连续采集模入通道1并将采得的数据显示到图表中去。当 Read and Chart运行后,运行Counter Single Pulse VI。 3. 在Counter Single Pulse 前面板上设置脉冲的参数,按下Generate Pulse 按扭后,你将在图表中看到计数器发生的脉冲。 4. 停止这两个VI的运行, 在为保存任何改动的选择下关闭Counter Single Pulse 。请不要关闭Read and Chart.,你将在下面的练习中使用到该VI。 练习 6-2结束 练习 6-3 目标: 使用计数器发生一个脉冲序列 在运行该练习之前, • 请将试验盒上GPCTR1 OUT接线端接线到模拟输入的ACH0上。 • 把试验盒上的GPCTR0 OUT接线端接线到PFI4接线端(计数器1GATE口) 。 1. 打开Exercise\lesson6.llb\Counter Pulse Train VI 查看该程序的前面板和后面板框图 Generate Pulse Train VI (Data Acquisition » Counter 模板)。在本练习中该VI用产生一由前面板参数决定的脉冲序列。假如发生的脉冲序列是连续的,你可以通过按下前面板的Stop按扭来停止脉冲序列的发生。 前面板 程序框图 2. 打开并运行Read and Chart VI,该 VI 会连续采集模入通道1并将采得的数据显示到图表中去。当 Read and Chart运行后,在Counter Pulse Train 前面板上设置脉冲的参数,运行Counter Pulse Train VI,在图表中观察计数器发生的脉冲序列。 3. 改变脉冲序列参数并输入,观察这些参数对脉冲序列的影响。 4. 停止并关闭这两个VI,请不要保存任何改动。 练习 6-3结束 脉冲宽度测量 你可以使用计数器来测量脉冲或脉冲序列的特性参数。Measure Pulse Width or Period VI (Data Acquisition » Counter 模板)可用来测量连接到计数器GATE口信号整个脉冲的宽度或幅宽的宽度。Measure Frequency VI (Data Acquisition » Counter 模板) 可用来测量连接到计数器SOURCE口脉冲序列信号的频率。这两个VI都用到了计数器的门限计数功能。 脉冲宽度或周期的测量 当你测量一脉冲宽度时,你需将被测的脉冲信号Tpw 连接到计数器的GATE口;将一已知频率的信号Ts连接到计数器的SOURCE口,如图6-10所示。当计数器被设为高门限计数模式时,计数器会在GATE口信号开始时对SOURCE口的脉冲个数进行计数在GATE口信号结束时停止计数。此时你就可以用计数器寄存器的计数值乘以SOURCE口信号的周期即可算出被测信号的脉冲宽度。用Measure Pulse Width or Period VI时SOURCE口用的是内部时钟,故你只需将被测信号接到计数器的GATE口上即可。 Figure 6-11. Measure Pulse Width or Period VI Measure Pulse Width or Period VI 输入参数device 和 counter决定了是那一块数采板的那一个计数器用于测量脉冲信号的参数。Type of measurement输入参数决定了你是想测量整个脉冲的宽度还是仅测量脉冲的高电位部分或脉冲的低电位部分的宽度。timebase决定了用于被计数的内部时钟。若计数操作未在time limit 时间限制内完成,timeout 输出为TRUE。Pulse width/period返回测量的宽度或周期(以秒为单位),count返回计数器寄存器的值。若counter overflow? 返回值为TRUE,这是有计数器溢出造成,此时你应当降低timebase内部时钟的频率。valid? 输出显示了是否有足够的内部时钟计数确保测量的脉冲宽度或周期值正确。 Figure 6-11. Measure Pulse Width or Period VI 练习 6-4 目标: 使用计数器测量脉冲宽度或周期 运行程序前,请确保以做了下面的信号连接: •将试验盒上的方波输出PULSE接线端引出方波信号到PFI4(记数器GATE口接上一方波信号。 1. 打开 Exercise\lesson6.llb\Pulse Measurement VI,查看该程序的前面板和后面板框图。该VI使用Counter 1来测量连接到GATE输入口信号的脉冲宽度或周期。计数器SOURCE口接入的内部时钟是由Type of Measurement输入参数来决定的。 前面板 程序框图 Measure Pulse Width or Period VI (Data Acquisition »Counter 模板)。在本练习中,该VI使用来测量接到Counter 1 GATE口上信号的脉冲宽度或周期的。其返回的错误信息可显示到VI的前面板。 Attribute Node.。该属性接点是用来根据所选的测量类型来控制前面板与之对应的Pulse Width和Pulse Period 控件是否变灰。你把鼠标放到前面板Pulse Width和Pulse Period 控件上后,单击右键从弹出的快捷菜单中选择Create Attribute Node 即可创建对应的属性接点。请将这两个属性接点设为Disabled(属性接点的操作是在LabVIEW Basics II Course 中详细介绍的)。 2. 请沿逆时针方向调节DAQ 信号附件上的频率旋扭大致为95~125Hz。把测量方式设为High Phase后运行VI,此时你应测得的脉冲幅宽大致为0.008 到 0.0105秒。把测量方式设为Low Phase后运行VI,此时你应测得的脉冲宽度应与High Phase方式相同。因为DAQ 信号附件上发出方波的占空比是0.5。 3. 把测量方式设为Rising to Rising后运行VI,此时你应测得的脉冲宽度大致为0.016 到 0.021秒或者是幅宽的两倍。因为此时测量的是整个信号的宽度。 4. 将测量方式设为High Phase 并旋动DAQ信号附件上的频率按扭至非常高的频率,将DAQ信号附件上频率选择档设为最高的范围(13 kHz–1 MHz)。此时信号方波的幅宽约为500 ns 周期约为1.0 ms 。因为计数器使用内部时钟为20 MHz 故我们仍得到有效的测量结果。在后面板框图中将timebase设为100,000 Hz,运行后程序将返回timeout 错误。因为计数器不能对GATE口信号进行足够的计数,从而得不到有效的测量结果。 5. 停止并关闭VI,请不要保存任何改动。 练习 6-4 结束 频率测量 计数器也可用于测量脉冲序列的频率。通过对在给定的已知时间内的脉冲串个数进行计数即可计算出被测信号的频率。给定时间间隔TG是由连接到计数器GATE口的脉冲信号控制的,如图6-12。接到GATE口必须是已知幅宽的脉冲信号,该信号是由外部信号源或数采板上第二个计数器提供的。你用已知信号幅宽除以计数器在门限设置模式下读取的计数器寄存器的数值即可算出被测信号的频率。使用Measure Frequency VI时,数采板上第二计数器提供门限脉冲,所以你需要将第二个计数器的OUT输出口连接到第一个计数器的GATE口,将被测信号接到第一个计数器的SOURCE口上。 注意 第二个计数器一般是使用数采板上紧邻使用计数器的上一个计数器。例如:你用于计数的计数器是Counter 1,那么提供门限脉冲信号的计数器就是Counter 0即把OUT0接到GATE1。 图 6-12. 用于测量频率的信号连接 你可以使用 Measure Frequency VI (图 6-13)来测量频率较高的脉冲序列信号的频率 。输入参数device 和 counter决定了是那一块数采板的那一个计数器用于测量脉冲信号的参数。Gate width设置了由第二个计数器(counter-1)所发脉冲的幅宽(以秒为单位)。Counter size设置了计数器对一未知信号能进行的最大计数值(对于24位计数器来说为2的24次方)。假如你需要对Measure Frequency VI 中的counter-1进行门限触发,请给counter-1计数器的GATE输入口上接入触发信号;同时你必须正确的设置gate mode 与 maximum delay to gate参数。例如:当这些设置好了,只要counter-1计数器在其GATE输入口上接收到一上升沿触发信号后,counter-1即在其OUT口输出一已知的接于counter GATE输入口的门限脉冲。Frequency返回测得的被测信号的频率(以Hz为单位)。Valid? 返回参数指示是否有错误发生。 图 6-13. Measure Frequency VI 练习 6-5 目标: 使用计数器测量未知信号的频率 在运行该练习之前,请确保了你的DAQ信号附件已有了下面的连接: • 把一方波信号接到Counter 1的SOURCE口上。 • 把Counter 0的OUT口输出连接到Counter 1的GATE口输入上。 1. 打开并查看 Exercise\Lesson6.llb\FrequencyMeasurement VI.。该VI将测量连接到Counter 1 上脉冲序列信号的频率。Counter 1 在其GATE口输入为高电位时会对其SOURCE口的脉冲个数进行计数。你也可以把Counter 1的门限计数方式设为低电位模式,即当其GATE口输入为低电位时会对其SOURCE口的脉冲个数进行计数。你可以在VI的前面板上通过GateWidth来设置门限脉冲的幅值宽度,LabVIEW会自动设置Counter 0输出门限脉冲。 Measure Frequency VI (Data Acquisition » Counter 模板)。本练习中这个VI将用来测量连接到Counter 1的SOURCE口的信号的频率。这个VI会返回错误信息并显示的前面板上。这个VI会自动根据前面板Gate Width参数来设置另一计数器输出已知幅宽的脉冲序列信号。 Unbundle 函数 (Cluster 模板)。将用于对 Measure Frequency VI 返回的错误信息进行解包并显示到前面板上。 2. 请逆时针旋转 DAQ信号附件的频率旋扭。把Gate Width设为1后运行程序。此时频率的测量值应在95 Hz与125 Hz之间。重新运行几次程序,数次同样频率信号频率的测量值有可能有稍微的差别。这是由于门限信号电位为高时的时刻与SOURCE口出现第一个用于计数脉冲时刻的时间差异不同而造成的,如图6-14所示。 Figure 6-14. 导致频率测量不精确的原因 3. 请将DAQ信号附件的频率旋扭旋到最大频率处,把Gate Width设为20秒后运行该VI。你将会看到一计数器寄存器溢出的错误信息。这是由于而被测信号频率过高,从而导致在门限幅宽为20秒期间计数器对被测信号计数已超过其计数寄存器的最大计数容量,从而出现溢出的错误信息。当DAQ信号附件的频率旋扭旋到最大处,其产生信号的频率约为1 MHz。 4. 关闭VI,请不要保存任何改动。 练习 6-5 结束 其他附加有用的Counter VI 计数器的分频设置 Down Counter or Divider Config VI (Data Acquisition » Counter » Intermediate Counter 模板) 是一当预设事件次数出现后可发生脉冲的VI。例如:你把timebase/timebase divisor设为100 Hz / 50,那么计数器将每隔50个时基脉冲在OUT发出一个脉冲或切换电位状态,其频率应为50*100 Hz = 2 s 。当你启动该操作时,请将该VI的taskID输出接到Counter Start VI (Data Acquisition » Counter » Intermediate Counter 模板)上。 Figure 6-15. Down Counter or Divider Config VI CTR Control The CTR Control VI (Data Acquisition » Counter » Advanced Counter 模板) 可用于由control code 输入参数决定的关于计数器控制方面的所有操作:启动,停止,读取以及重置计数器。CTR Control VI 也能控制数采板上的FREQ_OUT通道输出根据fout data参数指定频率的占空比为0.5的脉冲序列且并不占用数采板上的计数器。你可以通过设定control code为7 (enable FREQ_OUT)来启动FREQ_OUT输出;设定control code为8(disable FREQ_OUT)来停止FREQ_OUT输出。 Figure 6-16. CTR Control VI CTR Group Config CTR Group Config VI (Data Acquisition » Counter » Advanced Counter 模板)可将一个或多个计数器合成为一组。Device设定数采板的设备号,group是根据counter list数组设给该组计数器的唯一组号。task ID返回值是标识该任务的标识符;error in 和 error out包含有错误信息。请记住该VI需在所有计数器操作前运行。 Figure 6-17. CTR Group Config VI CTR Mode Config CTR Mode Config VI (Data Acquisition » Counter » Advanced Counter 模板) 根据task ID ,config mode,source, timebase signal, gate parameters, output type, 和 output polarity参数来对计数器进行设置。error in 和 error out包含有错误信息。该VI并不启动计数器操作。在计数器运行时的情况下,你并不需要使用该VI,除非你想改变计数器的门限和输出工作状态。 Figure 6-18. CTR Mode Config VI 下面你将使用Advanced Counter VI来跟踪一正交编码器的位置。但是首先要提醒你,关于正交编码器的操作只能用于DAQ-STC和NI-TIO芯片。 正交数码盘 数码盘是一能将线性或旋转位移转变为数字或脉冲信号的变送器,通常安装在旋转的轴上。它能发出对应于轴旋转运动状态的脉冲序列信号。正交数码盘是较常用的有两通道用来监测轴位置的递增式数码盘。对于转子每旋转一定角度,递增式数码盘将会产生一个脉冲。因此,递增数码盘的精度是由转子旋转一周中有数码盘能发生多少个脉冲数目来决定的。一般常使用的数码盘并不输出绝对位置信息。但是正交数码盘使用了两个相位差为90度的跟踪通道(如图6-19),所以正交数码盘上的通道A和通道B可以显示旋转的位置和方向这两个信息。 Figure 6-19. 正交编码器输出通道A 和B 假如通道A超前通道B,那么旋转的方向为顺时针方向;假如通道B超前通道A,那么旋转的方向为逆时针方向。这样通过监测通道A,B信号的脉冲个数和相位差,你就可以跟踪旋转的位置和方向。 DAQ-STC 计数器的增 / 减计数输入 NI E系列数采板上的DAQ-STC 定时/计数器可用于计数器的增/减计数,DAQ-STC上的计数器除了有SOURCE口和GATE口外还有UP_DOWN口。当UP_DOWN口接入的TTL信号为高电位时,计数器将会递增计数;当UP_DOWN口接入的TTL信号为低电位时,计数器将会递减计数。这样,我们就可以来监测正交数码盘的旋转方向。 假如正交数码盘输出的直接是TTL信号,那么你可以将输出的信号直接接到DAQ-STC或NI-TIO上。否则你需要在数码盘和计数器之间加上信号调理电路。通道A将接到计数器的SOURCE口上,通道B将接到UP_DOWN口上。当数码盘顺时针旋转时,A将超前B 90度。这就意味着当通道A信号的状态为由高到低时,通道B上信号为高电位状态,此时计数寄存器将对A的下降沿切换状态进行递增计数;当数码盘逆时针旋转时,B将超前A90度。这就意味着当通道A信号的状态为由高到低时,通道B上信号为低电位状态,此时计数寄存器将对A的下降沿切换状态进行递减计数。 你现在可以使用Counter 0来跟踪DAQ信号附件上旋转正交数码盘。关于正交数码盘的详细资料,请查阅Application Note 084: Using Quadrature Encoders with E Series DAQ Boards。 Measure frequency-Easy(9513).vi � EMBED PBrush ���
本文档为【计算机虚拟仪器图形编程LabVIEW实验教材第八章 数字IO】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_224046
暂无简介~
格式:doc
大小:830KB
软件:Word
页数:28
分类:互联网
上传时间:2018-09-06
浏览量:20