数据采集与仪器驱动-课件

上传人:痛*** 文档编号:241432831 上传时间:2024-06-25 格式:PPT 页数:106 大小:1.92MB
返回 下载 相关 举报
数据采集与仪器驱动-课件_第1页
第1页 / 共106页
数据采集与仪器驱动-课件_第2页
第2页 / 共106页
数据采集与仪器驱动-课件_第3页
第3页 / 共106页
点击查看更多>>
资源描述
数据采集与仪器驱动第五章第五章 数据采集与仪器驱动数据采集与仪器驱动5 5.1 .1 数据采集与控制系统构成数据采集与控制系统构成 5 5.2 .2 数据采集数据采集VIVI的组织结构的组织结构 5 5.3.3 基于基于NINI的的DAQDAQ系统的实现系统的实现5 5.4 .4 非非NINI的的DAQDAQ系统的实现系统的实现本章小结本章小结 25.1 5.1 数据采集、控制系统的构成数据采集、控制系统的构成采用基于PC的数据采集(dataacquisition,DAQ)、控制系统来完成实验室研究实验室研究和工业控制工业控制中的测控任务的方案配置是:工控机+数据采集/控制卡+VB/VC/LabView编程,即:数据采集数据采集/控制卡控制卡:完成一般测试仪器的数据采集和控制功能,工控机工控机系统系统:完成一般测试仪器的数据分析、计算、显示、输出等功能。3数据采集控制系统的组成4模拟信号的数字化处理数据采集的核心过程就是将连续的模拟信号转换成离散的数字信号采样点太多,会占用大量内存单元;采样点太少,会使模拟信号的某些信息被丢失,出现失真现象5数据采集卡数据采集卡数据采集卡的组成数据采集卡的组成:多路开关多路开关:将各路信号轮流切换到放大器的输入端,实现多参数多路信号的分时采集。放大器放大器:将前一级多路开关切换进入待采集信号放大(或衰减)至采样环节的量程范围内。通常实际系统中放大器为增益可调的放大器,设计者可根据输入信号不同的幅值选择不同的增益倍数。采采样样/保保持持器器:取出待测信号在某一瞬时的值(即实现信号的时间离散化),并在A/D转换过程中保持信号不变。如被测信号变化很缓慢可不用采样/保持器。6 A/D转换器:输入的模拟量转化为数字量输出,并完成信号幅值的量化。随着电子技术的发展,目前通常将采样/保持器同A/D转换器集成在一块芯片上。以上四个部分都处在PC计算机的前向通道前向通道,完成对信号数据的采集、放大及模/数转换任务。7大家学习辛苦了,还是要坚持继续保持安静继续保持安静8需要注意的两个问题1 1、是否使用、是否使用BufferBuffer?2 2、是否使用外触发启动、停止或同步操作?、是否使用外触发启动、停止或同步操作?缓冲(缓冲(BuffersBuffers):):缓冲指的是PC 内存的一个区域(不是数 据采集卡上的FIFO 缓冲),它用来临时存放数据。使用使用Buffer I/OBuffer I/O的情况的情况:需要采集或产生许多样本,其速率超过了实际显示、存储到硬件,或实时分析的速度。需要连续采集或产生AC 数据(10 样本秒),并且要同时分析或显示某些数据。采样周期必须准确、均匀地通过数据样本。9不使用Buffer I/O的情况:数据组小,如每秒只从两个通道之一采集一个数据点。需要缩减存储器的开支。触发(触发(TriggeringTriggering):触发涉及初始化、终止或同步采集事件的任何方法。软件触发:可以直接用软件,例如使用布尔面板控制去启动/停止数据采集。硬件触发:让板卡上的电路管理触发器,控制采集事件的时间分配,有很高的精确度。10下列情况使用软件触发:用户需要对所有采集操作有明确的控制。事件定时不需要非常准确。下列情况使用硬件触发下列情况使用硬件触发:采集事件定时需要非常准确。用户需要削减软件开支。采集事件需要与外部装置同步。11输入信号类型 不同信号的测量对采集系统的要求是不同的。输入信号的种类:信号所运载信息很广泛的,比如:状态状态(state)、速率速率(rate)、电平电平(level)、形状形状(shape)、频率频率成分(frequency content)。根据信号运载信息方式的不同,可以将信号分为模拟或数字信号。数字数字(二进制二进制)信号:信号:开关信号、脉冲信号。模拟信号:模拟信号:直流、时域、频域信号。12131 1、数字信号、数字信号开关信开关信:信号运载的信息与信号的瞬间状态有关。脉冲信号脉冲信号:信号包括一系列的状态转换,信息就包含在状态转化发生的数目、转换速率、脉冲宽度。2 2、模拟信号、模拟信号模拟直流信号模拟直流信号:静止的或变化非常缓慢的模拟信号。直流信号最重要的信息是幅度幅度.常见的直流信号有温度、流速、压力、应变等采集系统在采集模拟直流信号时,需要有足够的精度足够的精度以正确测量信号电平,由于直流信号变化缓慢,用软件计时就够了,不需要使用硬件计时。14模拟时域信号模拟时域信号 模拟时域信号的运载信息:电平随时间的变化(波形形状的特性,如斜度、峰值等),比如心脏跳动信号、视频信号。测量时域信号的采集系统包括:一个A AD D转换器转换器:AD 的分辨率要足够高,保证采集数据的精度,带宽要足够高,用于高速率采样;一个采样时钟电路采样时钟电路:精确的采样时钟,用于以精确的时间间隔采样;一个触发器触发器:触发器使测量在恰当的时间开始。15模拟频域信号模拟频域信号 模拟频域信号与时域信号类似,然而,从频域信号中提取的信息是基于信号的频域内容,而不是波形随时间变化的特性。比如声音信号、地球物理信号、传输信号等。用于测量一个频域信号的系统必须有一个A AD D、一个简单时钟简单时钟和一个用于精确精确捕捉波形的触发器波形的触发器。系统必须有必要的分析功能,用于从信号中提取频域信息。为了实现这样的数字信号处理,可以使用应用软件或特殊的DSP硬件来迅速而有效地分析信号。16信号连接方式1 1、输入信号的参考点、输入信号的参考点:接地信号、浮动信号接地信号接地信号:输入信号的一端直接接地,它的参考点是系统地(如建筑物的地或大地);最常见的接地信号是通过电源插座接入的设备。浮动信号浮动信号:输入信号是不连接到建筑物地等绝对参考点的电压信号,浮动信号源常见的有:电池及其供电设备、热电偶、变压器等设备。172、差分测量系统输入信号的正负极分别接入两个通道,所有输入信号各自有自己的参考点。183、参考地单端测量系统(RSE)用于测试浮动输入信号。被测信号一端接模拟输入通道,另一端(信号参考点)与系统地AIGND连接。194 4、无参考地单端测量系统、无参考地单端测量系统(NRSE)(NRSE)它的一端接模拟输入通道,另一端接一个公用参考端AISENSE,这个参考端电压不一定于测量系统地AIGND相等。20数据采集卡的基本性能指标数据采集卡的主要性能指标:1、模、模拟信号信号输入部分入部分 模模拟拟输输入入通通道道数数。该参数表明数据采集卡所能够采集的最多的信号路数。信号的输入方式。信号的输入方式。一般待采集信号的输入方式有:l单端输入:即信号的其中一个端子接地。l差动输入:即信号两端均浮地。l单极性:信号幅值范围为0,A,A为信号最大幅值。l双极性:信号幅值范围为A,A。21 模拟信号的输入范围模拟信号的输入范围(量程量程):):一般根据信号输入特性的不同(单极性输入还是双极性输入)有不同的输入范围。如对单极性输入,典型值为010 V,对双极性输入,典型值为5 V5 V。放大器增益放大器增益:模拟输入阻抗模拟输入阻抗:采集卡固有参数,一般不由用户设置。22混叠干扰图中采样频率500Hz,5个正弦波的频率分别为100Hz,200Hz,300Hz,375Hz和400 Hz。因为100Hz,200Hz的信号频率小于fs/2,可以由离散信号还原出原始的正弦波连续信号。而300Hz,375Hz和400Hz的信号频率都大于fs/2,故离散信号重构原信号时形成了频率不同于原信号频率的信号,即混叠干扰采样速率采样速率:式中N为多通道数据采集系统的通道数。23位数位数b b:A/D转换器输出二进制数的位数。当输入电压由U=0增至满量程值U=UH时,一个八位(b8)A/D的数字输出由八个“0”变为八个“1”,共计变化2b个状态,故A/D转换器产生一个最低有效位数字量的输出改变量,相应的输入量Umin=1 LSB=q(量化值)可由下式计算:分辨率分辨率:指数据采集卡可分辨的输入信号最小变化量。24采集卡基本参数以NI公司的PCI-6071E多功能采集卡为例,介绍采集卡的一般参数:模拟输入:64路单端/32路双端,输入范围:10V分辨率:12位采样频率:最高1.25M模拟输出:2路,12位,1M,输出范围:10V数字I/O:8路计数器:2路,24位,基准时钟20MHz或100KHz25数据采集卡的参数设置要使数据采集卡正确地实现数据采集的功能,必须根据实际测量的需要对一些参数进行正确设置。待设置的参数主要有数据采集卡的设备号、地址码,此外,还有如下设置。1 1、模拟信号输入部分、模拟信号输入部分 设置信号的输入方式。单端输入还是双端输入,单极性信号还是双极性信号等。选择增益。根据输入信号幅值范围和分辨率的要求进行增益选择。选择量程。根据输入信号是单极性还是双极性,相应选择合适的量程。262、A/D转换部分 设定信号输入通道号。设定采样点数。设定采样速率。采样结果的输出方式。采样结果可放在一个数组中,也可放在某一缓冲区中。采样触发方式。一般分外触发、定时触发、软件触发等3 3、D/AD/A转换部分转换部分 模拟信号的输出通道号。模拟信号的输出幅值。此参数应设置在标称满量程范围内。刷新速率。该参数决定所产生的模拟信号波形的“光滑度”。最快刷新速率的倒数即为响应时间。275.2 Data AcquisitionVI5.2 Data AcquisitionVI的组织的组织结构 在LabVIEW平台,用软件驱动I/O接口数据采集卡,实现数据采集分以下两种情况:LabVIEWLabVIEW支支持持的的数数据据采采集集卡卡:如NI公司自行生产的各类数据采集卡,可利用LabVIEW自带的驱动函数驱动。设计者只需正确设置输入参数就可实现数据采集的任务,而不需编写代码程序。LabVIEWLabVIEW不不支支持持的的数数据据采采集集卡卡:可利用LabVIEW的代码嵌入功能(CIN模块)等来实现采集卡的软件驱动。28 LabVIEWLabVIEW 数据采集模块的分类数据采集模块的分类LabVIEW的功能模板(FunctionsPalette)提供了DataAcquisition驱动数据采集卡DAQ子模板,该子模板提供了六个子模块,如图所示。29Data Acquisition子模板上的图标及名称30A/D部分易用函数中级函数高级函数实用函数31(1 1)易用函数)易用函数1波形输入AIAcquireWaveform.vi图标及端口参数(单通道单点采样)322 多波形图标及其输入、输出端口参数33(2 2)中级函数)中级函数1.AI Config.vi图标及其输入、输出端口参数342.AI Start.vi图标及其输入、输出端口参数353.AI Read.vi 图标及其输入、输出端口参数364.AI Clear.vi图标及其输入、输出端口参数37LabVIEW中的模拟输入38连续模拟输入连续模拟输入39连续模拟输入需要注意注意,程序读取数据的速度要不慢于设备往缓冲区中存放数据的速度,这样才能保证连续运行时,缓冲区中的数据不会溢出。可以通过调节以下3个参数来达到上述要求:buffersize(缓存的大小)scanrate(采样速率)numberofscanstoreadatatime(每次读取的样本数)连续采集的程序模型为:40连续模拟输入程序实例41LabVIEW中的模拟输出42连续模拟输出有两种形式的连续模拟输出:第一种就是在模拟输出之前,将数字信号写入缓冲区中,然后设备连续不断地将缓冲区中的数据通过DAC重复输出。这种连续模出执行效率很高,但是需要写入的数字信号必须是整周期的,不然输出模拟信号将会不连续,在使用上不够灵活。43第二种方式:在设备将缓冲区中数据输出的同时,不断地将数字信号写入缓冲区中,这种方式在编程上比较复杂,但是灵活性比较高,只要保证这一次写入缓冲区的数字信号和上次是连续的就行,不需要每次写入的信号是整周期的。44LabVIEW中的数字I/O一般情况下,数字I/O按照TTL逻辑电平设计,其逻辑低电平在0到0.7V之间,高电平在3.4到5.0V之间;在硬件设备上,多路路(Line)数字I/O组成一组后被称为端口端口(Port)。一个端口由多少个数字通路组成是依据其设备而定的,在多数情况下8个数字通路组成一个端口;在LabVIEW中对数字I/O的操作非常简单,可以对整个端口进行操作,也可以对端口中的一路或多路同时进行操作。455.3 基于的NI DAQ系统的实现 I/O接口设备LabPC1200型数据采集卡的软件驱动连续信号的采集与显示演示仪。1功能描述该信号的采集演示仪可以采集和显示一路信号,参数为:频率范围:010kHz。幅值范围:0.16V。采用LabPC1200型卡,信号由第0通道输入。462设计步骤 在编写VI之前,需在Measurement&Automation驱动软件下,进行相关参数的设置。设置完毕后,进入LabVIEW进行前面板和流程图的设计。1)参数设置AI设置项:因为输入信号幅值在0.16 V,故选模拟信号输入方式为有参考地单端输入;量程为010 V。47(a)前面板连续信号的采集与显示演示仪48连续信号的采集与显示演示仪(b)流程图49几种简单的测试程序流程模型程序逻辑简单,容易设计和理解1、顺序测试程序的模型 502、数据采集和后续工作并行执行的模型数据采集的速度一般来说高于处理和存储的速度。当新数据被采集来,上次的数据可能还没处理完呢。所以可以先把每次采集到的来不及处理的数据放在缓存里。513、并行执行每一任务的模型所有的任务同时运行:采集新的数据、处理上一次采到的数据,显示保存上一次处理好的数据。在这个模型下,要注意第一次循环运行时处理的数据,和循环头两次运行显示存储的数据是无效的,实际循环终止条件式也要考虑到,采集的数据再两次循环后才被保存下来。525.4使用NIDAQ设备和LabVIEW构造PID控制系统PID是根据系统误差利用比例/微分/积分计算出控制量进行控制。1.PID1.PID控制系统结构图控制系统结构图532.PID控制算法P P比例控制器比例控制器:输出仅与误差成正比,即u(t)=Kp(t),对误差的反应很快,但总是存在一个稳态误差。提高Kp值使稳态误差减小,还能够增加系统的快速性;但使系统的稳定程度变差。I I积分控制器积分控制器:输出与误差信号的积分成正比,只要误差还存在,就会不断输出,直到等于零,以达到消除稳态误差的目的。但积分必将影响系统的快速动态性能,对于一些系统会出现超调过大的现象。D D微分控制器微分控制器:输出与误差信号的变化率成正比,能预见误差的变化趋势,产生超前的控制作用。它仅对动态过程作用,通常不单独使用。而且微分控制对噪声干扰有放大作用,过强地调节微分项对系统抗干扰能力不利。543.LabVIEW中使用的PID控制工具包安装LabVIEWPIDControlTookit,即可在FunctionsPalette上选择ControlDesign&Simulation,该工具包由10个VI组成。55PID.vi利用PID.vi即可搭建一个简单的PID控制器,在该vi的输入端给入PID的3个参数值(PIDgains),系统反馈值(processvariable),实际期望值(setpoint)以及微分时间(dt),便能得到需要的输出值(output)。该vi还能控制输出值的范围。56PID Advanced.viPID Advanced.vi:为专家PID设计的vi,增加了一些高级的功能,如可以设定期望值的范围(setpoint range),手动控制(manual control),线性化(linearity)等功能。PID Autotuning.viPID Autotuning.vi:为需要自整定的PID系统设计的,在给出一些基本要求后,具有自整定的功能 PID PID Lead/Lag.viLead/Lag.vi:可以对PID控制器前端由系统反馈来的输入信号做动态补偿。PID Setpoint ProPID Setpoint Pro:可以在期望值间断性变化时使其变得平滑。57PID Control Input Filter.vi:一个五阶的低通滤波器,放在PID控制器的processvariable前端,可以滤去小于采样率十分之一的输入值。PID Gain Schedule.vi:写入几组增益参数,并给出条件,执行时当输入信号达到条件,便使用对应的一组参数给入到PID控制器的PIDGains上。PID Output Limiter.vi:对PID控制器输出信号的变化速率进行控制,以保证外部接受控制信号部件的安全。PID EGU to%.vi和和PID%to EGU.vi:对实际数值和其在设定工程单元范围内占的百分比进行转换。58595.5 5.5 非非NINI公司的公司的DAQDAQ系统的实现系统的实现1、直接调用LabVIEW 驱动操作图标 2、直接调用LabVIEW 的端口操作图标;3、调用动态连接库;4、利用CIN 图标调用C 语言驱动程序;60直接调用LabVIEW 驱动操作图标(研华)6162直接调用LabVIEW 的端口In Port/Out Port.Vi LabVIEW中有两个可直接访问底层设备的图标,即In Port.vi 和Out Port.vi。分别完成从设备的物理地址直接读取和输出数据的功能。63InPort.vi、OutPort.vi图标端口参数设置1.InPort.vi图标及其端口参数设置64该函数完成从指定地址读取一个字节或一个字的操作,其输入、输出口参数及其含义为:输入端口:registeraddress:U32型。数据读入端口的物理地址。readabyteoraword:Boolean型。当该值为True时,读取一个字;当该值为False时,读取一个字节。默认值为False。输出端口:value:U16型。该值是从指定端口读取的字(或字节)。65Out Port.vi图标及其端口参数设置该函数完成向指定地址写入一个字或字节的操作。其输入端口参数及其含义为:66 CLF(CallLibraryFunctionNode)调用库函数节点Labview可以与多种类的编程语言进行混合开发,通过Labview中两类外部接口节点调用外部代码.调用库函数节点:调用外部动态链接库DLL文件中的函数;代码接口节点:调用外部c语言代码,CLF节点最为常用,配合其他C语言编译器基本上可以取代CIN节点67动态链接库DLL可以理解为一种存储函数、变量或类的仓库,供调用者使用。它具有这样的特点:动态链接库不用被包含在调用程序体内,而是在执行时根据需要动态地加载或卸载,这样不仅可以减少调用程序文件的体积,还可以增强调用的灵活性,并节省内存占用量。DLL文件的创建与具体编程语言和编译器无关,可以便用VC、VB也可以使用Labview编写DLL文件,只要遵守统一的DLL接口和调用规范,就可正常使用。动态链接库DLL的特点68使用CLF节点调用windowsAPI函数实例设计步骤:设计步骤:(1 1)新建一个空.vi并保存为“CLPAPI函数vi”,向框图内拖入一个CLF节点,在其右键菜单中选择“配置”项,弹出配置对话框;69(2)单击对话框“函数”页面中“库名或路径”框右侧的打开文件按钮,选挥“C:WINDOWSsystem32user32d11”文件,LabVIEW会自动搜出该DLL中所包含的所有函数,只需在“函数名”下拉列表今选择即可。本例中选择名为“MessageBoxA,的函数,用于弹出一个标标准的Windows消息框。右侧的“线程”单选框选为“在UI线程中运行,“调用规范”单选框选为”stdcall(WINAPI)”。70(3)对话框“参数”页面用于配置函数参数,需根据所调用函数的原型来进行配置,由MSDN可知:MessageBoxA 函数的原型:Int MessageBoxA (HWND hwnd,LpcTSTR lptext,LpcTsTR lpcaption,Uint wtype)其各个参数具体含义为 hwnd:创建消息框的父窗口的句柄,若为NuLL则没有父窗口1pText:消息框牛的字符串1pcaPtton:消息框标题Mtype:用于指定消息框所显示图标和按钮的控制参数。(71使用该页面中的右侧下拉列表和左侧的各个按钮,将返回值和各个参数类型设置为:Reture type:类型数值,数据类型无符号32位整型 hwnd:类型数值,数据类型无符号32拉整型,传递值 1PText:类型字符串,数据类型C字符串指针 1pcaption:类型字符串,数据类型字符串指针 uType:类型数值,数据类型无符号32位整型,传递值其他选项均使用默认值。(4)对话框“回调”页面用于指定调用方式,在此使用默认配置即可。全部配置好之后单击确定”按钮进行确认,可以看到CLF节点增添了一些连接端子表示新添的参数,添加适当的常量或变量连接至各个参数。725.5.4 CIN(CodeInterfaceNode)CINCIN的设计步骤:的设计步骤:(1)确定CIN图标的输入、输出参数个数和数据类型。(2)生成C源代码编辑格式文件。(3)在编辑格式文件中的规定位置(/*Enter Your Code Here*/)填写实现某种测量功能的C源代码,生成最终的C源代码文件。(4)在LabVIEW指定的环境下编译步骤(3)中生成的C源代码文件,并生成可执行文件。(5)调用CIN的功能菜单将生成的可执行文件载入CIN图标。这样就基本形成了一个具备某种功能的CIN图标。73CIN图标的调用及参数设置初始化时的CIN图标如图所示。CIN图标中表格状图案的每一行代表一个参数,左侧为参数的输入值,右侧为CIN运行后该参数的返回值。参数1输入口参数1返回值的输出口有些情况下,有的参数只能作为输出值,而没有对应的输入。如实现ca+b运算时,c是CIN的运行结果,它只能是输出值,没有对应的输入值,这时应当将其对应的输入口置为无效。方法是,把鼠标放在相应的输入口,用鼠标右击CIN图标,弹出快捷菜单,从中选择Only Output项,则该输入口变暗,表明其无效无效a返回值b返回值CIN输出b输入值a输入值74生成C源代码编辑格式文件(*.C文件)代码框架CIN图标的快捷菜单中选择Create.CFile项,会弹出一个文件存储对话框,键入文件名则生成LabVIEW的C语言代码框架;然后用任意一种文本编辑器将它打开。该C文件的代码框架为*CINsourcefile*/注释#includeextcode.hCIN MgErr CINRun(float64*a,float64*b,float64*c);函数声明CIN MgErr CINRun(float64*a,float64*b,float64*c)函数体 /*ENTER YOUR CODE HERE*/填入C语言源代码returnnoErr;75*.C文件源代码的编译下面介绍在VC+集成环境下编译*.C源代码的具体步骤。(1)新建一个DLL工程文件,命名为Add。打开VC+开发平台,执行FileNew 操作。进 行 选 项:win32 Dynamic Link Library。添加工程文件名:Add。location:填写工程文件的存放路径。也 可 以 采 用 其 默 认 路 径 D:Microsoft Visual StudioMyProjects。最后形成工程文件add.cpp。76(2)向工程文件中添加cin.obj、labview.lib、lvsb.lib、lvsbmain.def四个文件。执行ProjectAddtoProjectFiles操作,向工程文件添加上述四个文件。这四个文件在LabVIEW安装路径下的cintools文件夹下的win32子文件夹中。(3)向工程文件中添加上面的*.C源代码文件add.c。添加方法同(2)。(4)*.C源代码文件编译前的设置。由菜单项ProjectSetting打开设置对话框,逐项设置。Settingfor选 项 设 置。AllConfiguration。C/C+标签页设置。用鼠标左击C/C+标签页按钮,逐项设置。77lCategory:由下拉菜单选择为Preprocessor。Additionalincludedirectories:添加LabVIEW的cintools文件夹的路径。假设LabVIEW安装路径为d:LabVIEW,则在Additionalincludedirectories处添加路径d:LabVIEWcintools。l Category:由下拉菜单另选为CodeGeneration。Strictmemberalignment:设置为1Byte。Userun-timelibrary:设置为MultithreadedDLL。78CustomBuild标签页设置。用鼠标左击CustomBuild标签页,逐项设置。lCommands:输入命令行如下:d:labviewcintoolswin32lvsbutil$(TargetName)d“$(WkspDir)$(OurDir)”(假设LabVIEW的安装路径为:d:labview。)lOutputs:输入命令行如下:$(OutDir)$(TargetName).lsb79(5)添加C源代码程序。可在Workspace wizard窗口中双击add.c,打开源文件添加C源代码。如果已经添加过,则继续下一步。(6)编译*.C源代码文件。在主菜单Build下选择Compileadd.c选项,则进行add.c程序的编译,如有语法等错误,则给出错误提示,按提示修改程序,重新编译。重复这一过程,直至没有错误。(7)生成可执行文件。在主菜单Build下选择BuildAdd.dll选项,即生成可执行文件Add.lsb,同时生成如Add.dll等所需的全部文件801.装载可执行文件到CIN图标回到LabVIEW流程图窗口,窗口中CIN图标的快捷菜单如左图所示。从中选择LoadCodeResource项,即弹出一个Choose a coderesourcefile对话框,如右图所示。按照Add.工程文件存入的路径寻找Debug目录下的Add.lsb文件,然后点击“打开”按钮,于是Add.lsb文件就装入CIN图标中。至此,就完成了CIN的全部设计过程,可运行程序。815.5.3 应用举例用CIN图标实现对HY1232数据采集卡的驱动5.3.1 HY1232数据采集卡简介数据采集卡简介HY1232是一种IBMPCXT/AT总线兼容的数据采集卡,其主要性能指标如下:32路单端模拟输入通道;A/D分辨率为12bit;1路模拟输出通道;D/A分辨率为12bit;D/A输出上电清零;模拟输入电压范围:5V;模拟输出电压范围:5V或0+5V;软件触发方式;数据传输方式采用软件查询方式和中断方式。82HY1232数据采集卡工作原理 对于HY1232数据采集卡,在选通某模拟信号输入通道的同时即启动了该路的A/D转换。当A/D转换完成时,采集卡上的转换完成位寄存器的最高位(D7)被置为“1”。用软件查询方式查询该寄存器的D7位,当查询到该位为“1”时,即表明采样已结束,可将12 bit的数据读入计算机内存中。如果采用中断方式,则在A/D转换完成后,采集卡会自动向计算机发出中断请求信号。在中断服务程序内,将12 bit数据读入计算机内存。83HY1232数据采集卡中采用的是12位A/D转换器,转换完毕的12位二进制数中的低八位AD7、AD6AD1、AD0存放在低八位缓冲寄存器中,其高四位AD11、AD10、AD9、AD8存放在高四位缓冲寄存器中。HY1232数据采集卡有32路单端模拟输入通道,由八位输入通道选择寄存器低六位(C4、C3、C2、C1、C0)的二进制状态字选择被测信号的输入通道。例如,选择第4通道输入信号的二进制状态字为00100。表51列入了各寄存器的读/写操作功能与占用地址。84表5 51 HY1 HY12321232数据采集卡板基地址分配与寄存器读/写操作功能85采集卡参数设置(1)确定采集卡的板基地址。板基地址是CPU分配给采集卡内存空间的首地址。首地址后面的内存空间供采集卡内部寄存器分配使用。HY1232数据采集卡板基地址的可选范围为:200H3FFH(5121023)。通常选0 x280,即280H(640)。(2)确定信号的输入方式。选择设置信号是单端输入还是双端输入,单极性信号还是双极性信号。HY1232数据采集卡只有32路单端输入一种方式,故不需要用户来设置。86(3)设置信号的输入范围。根据输入信号幅值范围和分辨率的要求进行选择。HY1232数据采集卡信号输入范围不可选,只能为5 V+5 V,且内部的放大器增益固定为1。(4)确定采样触发方式。一般分外触发、定时触发、软件触发等几种方式。但对于HY1232采集卡,只有软件触发一种方式,即在往输入通道寄存器写入所选通道号的同时即触发了A/D转换。87(5)A/D转换结束的判断。对于HY1232采集卡分查询方式和中断方式两种。(6)采样速率的设置。对于有些数据采集卡(如LabPC1200卡),用户可在其最大采样速率范围内进行选择设置,以满足实际的需要。但HY1232数据采集卡的采样速率是固定的,用户不可选。(7)设置信号输入通道。在031可选范围内选择。(8)设置一次采集点数。88图2 HY1232数采卡单点数据采集程序流程图采集程序流程图与编程要点采集程序流程图与编程要点1流程图HY1232数采卡单点数据采集程序流程图如图2所示。892.2.数据采集程序数据采集程序 HY1232数据采集卡采集一个点的C源程序如下:#include#include#include void main(void)int basea,channel;float value,IO,hi;90 basea=0 x280;/*板基地址设为640*/printf(“Input channel number:”);/*设置采集通道号*/scanf(“%d”,&channel);outp(base,channel);/*往输入通道寄存器写入所选通道号,并触发A/D转换*/do /*查询A/D转换完成寄存器的最高位,若为1,则表明A/D换结束,否则继续查询*/while(!(inp(basea+5)&0 x80);lo=inp(base+1);/*读入A/D结果的低八位*/hi=inp(base+2)/*读入A/D结果的高四位value=(lo+hi&0 xf)*256)-2047)*10.0/4096;/*合并后,再将A/D转换的二进制结果转换成对应的模拟量值*/getch();91 3.3.编程要点说明编程要点说明 1)outp(x,y)和inp(x)函数 C语言接口函数 outp(x,y)函数的功能是把函数y送入端口地址为x的寄存器中。outp(base,channel)是把通道号channel(程序中是由前面板控件设置)送入地址为base的输入通道选择寄存器,并启动该通道的A/D转换。inp(x)函数的功能是从端口地址为x的寄存器中读取二进制数据。inp(base+1)从地址为base1的低八位寄存器读取A/D转换结果。inp(base+2)从地址为base+2的高四位寄存器读取A/D转换结果二进制数的高四位,并清除A/D完成位寄存器和中断请求信号。inp(base+5)从地址为base+5的完成位寄存器读取完成标志位I/O显示值,当IO=0时,表示A/D转换未完成;当IO=1时,表示A/D转换完毕。92 3)A/D转换结果的合并及工程运算 hi&oxf是将A/D结果高四位(二进制数)转化为十六进制数,(hi&oxf)*256则将十六进制数转化为十进制数,lo+(hi&0 xf)*256将数据合并为一个十进制数。这里,被测信号的输入范围设置为5 V5 V,HY1232卡的分辨率为12位,则量化值Q为10.0/4096(V),而十进制数也需减去满量程的一半:4096/22048,由于十进制数从0开始,故 满 量 程 的 一 半 是 2047。因 此,用 value=(lo+hi&oxf)*256)-2047)*10.0/4096就可以将A/D输出的二进制数转换为与模拟输入电压相对应的电压值。例如,若hi=1011、lo=11010011,那么hi&oxf=0 xb,(hi&oxf)*256=11*266,lo+(hi&oxf)*256=(27+26+24+21+20+11*256=3027,则采集卡的模拟输入电压为 value=(3027-2047)*10.0/4096=2.3926V93 3 3 具体设计方法具体设计方法 1.模拟信号采集系统功能描述 使用CIN实现非LabVIEW支持的HY1232数据采集卡的驱动。要求在LabVIEW下利用HY1232采集卡实现一个模拟信号(200 Hz的正弦波)的采集和波形显示。要求采样点数、板基地址和通道号可设。2.设计提示 1)前面板设计数字控件1:用来设置HY1232数据采集卡的板基地址。基地址basea的数据类型选为U16(因为HY1232的基地址最大为3FFH),默认值设为640(即0 x280)。数字控件2:用来设置信号的输入通道。通道号channel的数据类型选为U8(因为HY1232的模拟输入通道为031),默认值为0,数据范围为031。数字控件3:用来设置采样点数。总采样点数samples的数据类型为32,默认值设为100。94模拟信号采集程序前面板95 2)流程图设计 (1)放置CIN图标,并设置图标的输入、输出参数个数及数据类型。调用路径。由FunctionsAdvancedCode Interface Node路径调入Code Interface Node。参数设置。本例中,CIN图标有三个输入参数basea、channel、samples和一个输出参数Waveform。Waveform是一个double型数组,用于存放采集结果。参数数据类型的选择与前面板一致。96CIN图标属性对话框(2)C源代码文件的生成选择如图4所示的CIN图标快捷菜单选项中的Create.c File选项,生成C源代码格式文件(*.C文件)。97本例生成的格式文件内容如下:/*CIN source file*/#include extcode.h /*typedefs*/typedef struct int32 dimSize;float64 arg11;98TD1;typedefTD1*TD1Hdl;CIN MgErr CINRun(uInt16*basea,uInt8*channel,int32*samples,TD1HdlWaveform);CIN MgErr CINRun(uInt16*basea,uInt8*channel,int32*samples,TD1HdlWaveform)/*ENTERYOURCODEHERE*/returnnoErr;99从上面生成的代码可以看到,因为定义的CIN图标输出参数是数组型的,而LabVIEW向CIN传递数组类数据时,用的是句柄handle。传递数组的句柄结构是这样定义的:typedef struct int32 dimSize;/*数组尺寸*/float64 arg11;/*数组首地址指针*/TD1;typedef TD1*TD1Hdl;对于一个有n个元素的一维数组,用dimsize函数表示为dimsizen。对于一个mn的二维数组amn,用dimSize函数表示为dimSize0=m,dimSize1=n。100(3)填写C源代码 将HY1232的C语言采集程序填入到上面的C源代码框架中。最终完成的C源代码文件(sampdata.c文件)如下:(注:设计者自行添加的语句为黑斜体,其余为自动生成的语句)/*CIN source file */#include extcode.h /*自动生成*/#include hosttype.h#include hosttype.h /*调用了系统及功能函数,因此添加此头文件*/#include dos.h#include dos.h /*调用了C C语言中的inp()inp()、outp()outp()函数,因此添加此头文件*/*101*typedefs*/typedef struct int32 dimSize;/*数组尺寸*/float64 arg11;/*数组首地址指针*/TD1;typedef TD1*TD1Hdl;CIN MgErr CINRun(uInt16*basea,uInt8*channel,int32 samples,TD1Hdl Waveform);/*函数声明*/CIN MgErr CINRun(uInt16*basea,uInt8*channel,int32*samples,TD1Hdl Waveform)/*函数体*/*ENTER YOUR CODE HERE*/102 int16 dbyte;/*定义16位字(A/D转换结果)*/float64 value;/*定义变量,存放单点的A/D转换结果对应的模拟量*/float64 array;/*定义数组,存放所有点的A/D转换结果对应的模拟量*/int32 i;/*定义变量,存放循环采样次数*/MgErr err=noErr;/*动态设定数组Waveform的大小*/if(err=SetCINArraySize(UHandle)Waveform,3,*samples)goto out;(*Waveform)dimSize=*samples;/*取数组Waveform的参数:dimSize,将其置为samples*/array=(*Waveform)arg1;/*取数组Waveform的参数:arg1e,置给array*/103/*软件查询式采集程序*/for(i=0;i*samples;i+)for(i=0;i*samples;i+)/*重复采样,采样点数由samplessamples确定*/outp(*basea,channel);outp(*basea,channel);/*向板基地址写入所选模拟信号通道号并启动A/DA/D转换*/dbyte=0;dbyte=0;do do /*以查询方式循环采样。采样结果送入dbytedbyte(1212位)*/104while(!(inp(*basea+6)&0 x80);while(!(inp(*basea+6)&0 x80);dbyte=inp(*basea+1)|(inp(*basea+2)&0 xf)8);dbyte=inp(*basea+1)|(inp(*basea+2)&0 xf)8);value=(float64)(dbyte-2047)*10/4096;value=(float64)(dbyte-2047)*10/4096;/*将二进制结果转换为对应的模拟量值,送入valuevalue变量*/array=value;array=value;/*此次转换结果存入arrayarray数组中*/array+;array+;/*修改数组指针*/out:out:return err;return err;105说明:这里需要对Waveform数组的大小进行动态设置,因此要用到LabVIEW的内存动态设置函数,最方便的是使用SetCINArraySize()函数。该函数的说明如下:原型:MgErr SetCINArraySize(Uhandle dataH,int32 paramNum,int32 newNumElmts)106
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!