DIY编程器网

标题: 基于LabVIEW与凌阳SPCE061A实现串口数据采集(MAX232EPE) [打印本页]

作者: liyf    时间: 2012-1-16 17:26
标题: 基于LabVIEW与凌阳SPCE061A实现串口数据采集(MAX232EPE)

                    摘要:介绍利用凌阳SPCE061A单片机采集数据,Labview作为开发调试平台,二者之间通过串口实现数据通讯的数据采集系统,详细介绍了软硬件实现方案。
关键词:LabVIEW;虚拟仪器;SPCE061A;串口;数据采集

引言
LabVIEW是一个划时代的图形化编程系统,应用于数据采集与控制、信号分析等方面,它为不熟悉文本语言编程的专业科技工作者在测控领域建立计算机仪器系统——虚拟仪器,提供了一个便捷、轻松的图形化设计环境。由于其灵活、简单易用、开发效率高等特点,正逐渐成为科技工作者进行仪器应用与开发的得力工具。数据采集是开发过程中一个重要的环节,NI公司提供了各种不同类型的基于LabVIEW的数据采集卡,但是其价格昂贵,对于小型企业、实验教学等方面仍存在着不可避免的资金问题。而市面上销售的第三方开发的数据采集卡,由于不具备对LabVIEW的直接支持,需要用户开发其驱动程序,使用也不方便。如果采用以凌阳16位单片机SPCE061A作为前端数据采集,通过串口进行与LabVIEW的数据通讯,就可实现低成本、灵活方便、接口简单的数据采集系统。这对于许多信号频率不是太高的场合,此方案无疑非常便利。本文所介绍的就是这样一种利用LabVIEW 对SPCE061A的数据进行分析处理,并通过串口实现二者之间的数据交换、经济实用的数据采集及分析系统。
本系统主要包含两部分的设计:LabVIEW部分设计和SPCE061A数据采集与串口通讯部分设计。
1 LabVIEW部分设计
1.1 VISA简介
LabVIEW提供了功能强大的VISA库。VISA(Virtual Instrument Software Architecture——虚拟仪器软件规范,是用于仪器编程的标准I/O函数库及其相关规范的总称。VISA库驻留于计算机系统中,完成计算机与仪器之间的连接,用以实现对仪器的程序控制,其实质是用于虚拟仪器系统的标准的API。VISA本身不具备编程能力,它是一个高层API,通过调用底层驱动程序来实现对仪器的编程,其层次如图1(a)所示。VISA是采用VPP标准的I/O接口软件,其软件结构应包含三部分,如图1(b)所示。




(a)VISA内部机制

(b)虚拟仪器的软件体系结构



screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>


图1



与其它现存的I/O接口软件相比,VISA的I/O控制功能具有如下几个特点:适用于各种仪器类型如VXI仪器、GPIB仪器、RS-232 串行仪器、消息基器件、寄存器器件、存储器器件等仪器);适用于各种硬件接口类型;适用于单、多处理器结构或分布式网络结构;适用于多种网络机制。
VISA的I/O的软件库的源程序是唯一的,其与操作系统及编程语言无关,只是提供了标准形式的API文件作为系统的输出。
1.2 VISA库中的串口函数
? ?本文用到的主要的串口通讯函数调用路径为:Functions→Instrument I/O→VISA→VISA Advanced→Interface→Specific→Serial中。
1)??VISA Configure Serial Port节点(如图2所示)


screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>



图2??VISA Configure Serial Port.vi图标及其端口
该节点主要用于串口的初始化。主要参数意义如下:
l? ?? ?? ?VISA resource name:设置串口号。
l? ?? ?? ?baud rate:设置波特率,默认值为9600。
l? ?? ?? ?data bits:设置数据位。该位应在5~8之间,默认值为8。
l? ?? ?? ?parity:奇偶校验位,默认值为无校验、偶校验等。
l? ?? ?? ?stop bits:设置停止位,可以为1、1.5、2。
l? ?? ?? ?flow control:用于设置握手信号类型。
2) VISA Read节点(如图3所示)





screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

图3 VISA Read.vi 图标及其端口
该节点为串口读子VI,为本文中的主要节点,将串口中的数据读出,然后利用LabVIEW的强大数据处理功能对其进行分析处理。主要参数意义如下:
l? ?? ?? ?VISA resource name:设置串口号。
l? ?? ?? ?byte count:设置读取字节数。
l? ?? ?? ?read buffer:从串口读取的字符。
? ?由于LabVIEW的串行通讯子VI只允许对字符串的读写,因此本文中在进行数据处理时,必须要实现字符串与数字之间的正确转换。此外,若要读入当前串口中的所有字符,则要先执行“VISA Bytes at Serial Port”子VI,用以确定将要读入的确切的字节数,然后将其输出作为VISA Read节点的输入即可。
2??SPCE061A数据采集与串口通讯部分设计
2.1硬件部分
SPCE061A内置8通道10位模-数转换器,其中7个通道用于将模拟量信号 (例如电压信号) 转换为数字量信号, 可以直接通过引线(IOA[0"6])输入。另外一个通道只用于语音输入,即通过内置自动增益控制放大器的麦克风通道(MIC_IN)输入。实际上可以把模数转换器(ADC,Analog to Digital Converter)看作是一个实现模/数信号转换的编码器。在ADC内,由数模转换器DAC0和逐次逼近寄存器SAR组成逐次逼近式模-数转换器。另外,SPCE061A内置UART模块,UART模块提供了一个全双工标准接口,用于完成SPCE061A与外设之间的串行通讯。借助于IOB口的特殊功能和UART IRQ中断,可以同时完成UART接口的接收和发送数据的过程。UART模块的接收管脚Rx和Tx分别与IOB7和IOB10共用。
本电路采用RS-232串行接口标准,在电气特性上,RS-232采用负逻辑,要求高低两信号间有较大的幅度,标准为:逻辑“1”在-5V~-15V之间,逻辑“0”在+5V"+15V之间,通常采用-1V左右为逻辑1,+10V左右为逻辑0。本电路采用符合RS-232标准的驱动芯片MAX232EPE实现此转换。由于SPCE061A的信号输入输出为TTL电平,逻辑1为3.3V左右,逻辑0为0.4V左右,而MAX232EPE要求+5V供电,因此,在 MAX232EPE和SPCE061A之间加了电平匹配电路。
整个电路接口简单,可靠性高。硬件部分原理图如图5所示





screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

图5??硬件原理图
2.2软件部分
LabVIEW软件与串口实现数据通讯的程序图,如图6所示,由于SPCE061A发送给Labview的是字符串数据,所以先把该字符串转换为字符数组,然后通过一个数组索引指定数组的第一个字符显示并形成波形。





screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

图6. LabVIEW串口通讯程序图
单片机SPCE061A利用通用串行接口UART实现串口通讯部分程序:
//************************主程序*****************************************//
L_ResendData:
L_Check_TxRDY:
R2 = [P_UART_Command2];
R2 &= 0x0040;? ?? ?? ?? ?? ? //检测输出是否READY
JZ L_Check_RxRDY;? ?? ?? ???//发送8位十六进制数cc

R1 = [recFlag];

CMP R1,0x0000;? ?? ?? ?? ?? ?//是否接收过数据

JZ L_Check_RxRDY;

[P_UART_Data] = R4;? ?? ?? ? //发送数据

R1 = 0x0000; [recFlag] = R1;

L_Check_RxRDY:

R2 = [P_UART_Command2];? ? //检测是否有数据接收

R2 &= 0x0080;

JZ L_Check_RxRDY;

R4 = [P_UART_Data];? ?? ?? ?//接收数据

R1 = 0x0001;

[recFlag] = R1;? ?? ?? ?? ?? ?//设置接收标识符

goto L_ResendData;




3.应用实例

如图7所示,利用该数据采集系统进行一温度数据的采集,在图5的硬件原理图中,将铂热电阻PT100测得的温度电压值(该测温电路由电压跟随和电压放大电路组成)送入到SPCE061A的IOA4端口,通过该路AD转换通道,将电压值经过数据处理后转换为16进制数据值,并将处理后的温度数据通过串口发送给LabVIEW,经过分析对比PT100铂电阻准确的温度曲线与所测得的温度曲线可以得出在该温度采集系统的软件编程过程中应该对AD转换后的数据乘以一个多大的温度系数以及在分段温度系数的情况下得出温度系数转折点,使处理后的所得的温度数值尽可能的接近真实温度值。



图7 利用LabVIEW与SPCE061A的温度数据数据采集系统
4 结论

LabVIEW作为一个具有良好开放性的虚拟仪器开发平台,为面向仪器的编程提供了强有力的支持,在LabVIEW环境下能够开发出各种功能强大、开放性好的虚拟仪器软件,构造出实用的计算机辅助测试、分析与控制系统。本文利用SPCE061A进行前端数据采集,通过串口实现与LabVIEW的数据通讯,利用LabVIEW的强大信号分析处理功能,开发了一套投资少、操作简便的数据采集与信号分析系统(其虚拟面板如图7 所示)。实验证明,该系统运行良好。
            




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2