1 引言
现代工业生产和科学研究对数据采集的要求日益提高,在许多场合要求数据采集系统向便携化方向发展,要求系统具有体积小、功耗低、传输速度快、使用方便灵活等特点。
基于PCI或ISA总线的内置采集卡由于插拔麻烦、占用系统软硬件资源且价格相对昂贵,应用范围有限。目前大量传统数据采集系统、仪表及其软件多采用RS232/485通信标准,虽然成本低、占用系统资源少,但速度慢、不支持带电插拔的缺点使其无法满足工业现场采集系统的发展要求。
面向便携应用的主控系统如笔记本电脑、嵌入式控制系统均不配备PCI或ISA接口,然而通用串行总线(Universal Serial Bus,简称USB)以其数据传输速度快、设备接插方便、总线供电及扩展方便等优点成为便携式主控系统的必备接口,基于此本文介绍一种以USB总线为接口的多功能小型便携数据采集系统。
2 芯片选型
2.1主控芯片选型
主控芯片选择Analog Devices公司的ADuC845作为系统的主控制器,该芯片将8052的MCU核和模拟信号处理单元集成在一片IC上,是ADI公司推出的高性能24位数据采集与处理系统,内部集成有两个24位的Δ-ΣADC、10/8通道输入多路复用器,片内集成62 kB 非易失性闪速/电擦除程序存储器、4 kB非易失性闪速/电擦除数据存储器、256 BRAM 和2 kB扩展RAM。 ADuC845还包含一个温度传感器、一个位于主ADC之前以便直接测量低幅度信号的可编程增益放大器(PGA)、一个12位电压输出数模转换器(DAC)、两个灵活的脉宽调制(PWM)输出、两个电流源、一个基准电压源、一个从32kHz晶振产生12.58MHz时钟的振荡器与锁相环(PLL)以及UART、SP I和I2C通信端口。其数据处理能力可达12MIPS。由于ADuC845的高度集成、高速度、高精度的优秀特性,非常适合在要求小体积高性能的便携系统中的应用要求。
2.2USB接口芯片选型
通用串行总线USB是由Intel等厂商制定的连接计算机与具有USB接口的多种外设之间通信的串行总线。市场上现有的可供设计使用的USB接口芯片有两类:一类是USB端点控制器,如Philips的PDIUSBD12,OKI的MSM60581,NATIONAL的USBN9603,Lucent的USS-820/USS-620,Scanlog的SL11等。这些芯片作为系统的接口将直接使用USB总线的通信标准,由于USB协议标准比较复杂,在资源不充裕的8位MCU为核心的系统上实现会一定程度的影响系统性能;并且以这类芯片为接口的系统,还需专门开发针对特定上位机系统的驱动程序,给设计和使用带来了一定的难度和不便。
另一类USB接口芯片是UART-USB桥接芯片,如Cygnal公司的CP2101,FTDI公司的FT232BM等。这类芯片使用时以USB总线为传输媒介,使用桥接的方式将UART串口信号通过USB总线传输至主机。主机安装芯片厂商针对各类操作系统提供的驱动程序,扩展出一个虚拟串口与下位机系统通信。这样既使系统设计简便直接,又有效利用了USB总线的诸多优点。设计中选用CP2101,与同类产品相比具有以下优点:
1) 具有较小的封装。CP2101为28脚5mm×5mmMLP封装。这在PCB上的尺寸就比竞争对手小 30%左右。
2) 高集成度。片内集成512字节EEPROM(用于存储厂家 ID等数据),片内集成收发器、无需外部电阻;片内集成时钟,无需外部晶体。
3) 低成本,可实现USB转串口的解决方案。CP2101的USB功能无需外部元件,而大多数竞争者的USB器件 则需要额外的终端晶体管、上拉电阻、晶振和EEPROM。具有竞争力的器件价格,简化的外围电路,无成本驱动支持使得CP2101在成本上的优势远超过竞争者的解决方案。
4) 具有低功耗、高速度的特性,符合USB2.0规范,适合于所有的UART接口。工业级温度范围为-40℃~85℃。
3 电路设计
3.1系统结构图
系统结构图如图1所示,主要由ADuC845与CP2101芯片构成,由于ADuC845内部集成了62KB程序FLASH,4KB数据FLASH,2304B数据RAM,因此作为便携采集系统无须再外部扩展存储单元。ADuC845的P1口作为模拟量信号采集的8路通道,P0口作为数字量信号输入的8路通道,P2口作为数字量信号输出的8路通道,为了保护内部电路,使用光藕隔离芯片将系统内部的数字量输入输出与外部隔离。

图1系统结构图
3.2通信接口电路图
CP2101作为系统的通信接口芯片,ADuC845的TXD与RXD引脚与CP2101对应相连,电路如图所示。CP2101的USB功能控制器管理USB和UART间所有的数据传输,以及由USB主控制器发出的命令请求以及用于控制UART功能的命令等。CP2101的UART接口处理所有的RS232 信号,包括控制和握手信号。CP2101的VBUS与VREGIN引脚必须始终连到USB的VBUS信号上。在VREGIN的输入端加去耦电容(1μF与0.1μF并联)。CP2101与单片机接口是标准UART电平,与计算机的USB端口连接是USB标准电平,因此,无论与3V还是5V供电的单片机连接都不需要电平转换。
4 软件设计
系统的软件设计包括单片机系统软件设计、单片机系统驱动程序与主机系统软件设计。Cygnal公司提供了CP2101在目前常用操作系统下的驱动,安装驱动程序以后,对于操作系统来说相当于多了一个虚拟的串口,所以主机的编程操作就是简单的串行通信编程。因此,软件设计的重点就是单片机系统的软件设计。
数据采集系统的软件设计采用基于消息机制的编程思想,采用C51语言编程,将需要执行的AD、DI、DO作为程序运行的任务,通过串行中断程序解析各种控制命令,并发送消息给主程序,主程序根据不同的消息执行不同系统任务。

图2 通信接口电路图
4.1串行中断程序设计
由于发送并不需要中断操作,因此,串行中断程序只对接收数据进行判断。串行中断程序主要任务是接收有效格式的命令,并加以区分,根据命令形成相应的消息,留给主程序判断执行。系统的功能决定系统的通信协议相对复杂,命令繁多。系统设计的主要通信命令有:系统复位、DO输出、DI读入、AD单次读入、AD连续读入、AD连续读入停止6个命令。
鉴于串行中断程序担任较大的命令解析任务,因此串行中断程序的设计采用状态机的机制。其基本原理是,每当收到一个字节后,判断该字节在当前判断状态是否有效,如果有效,则状态递增;如果无效,则状态归零。每组命令的每一个字节都对应一个状态号,状态号到达某命令结尾时,设置对应命令系统消息有效。相应的程序代码如下:
extern unsigned char guchState; //系统状态变量
extern unsigned char guchSignal; //系统信号变量
void Serial_Int(void) interrupt 4 using 3{ if(RI) //只接收中断有效 { register unsigned char R_chbyte; R_chbyte=SBUF; //取得接收字符 switch(guchState) //进入状态机 { case STATE1: //第一个状态 if(R_chbyte==VALID1)guchState++; //判断是否为有效字符 break; case STATE2: if(R_chbyte==VALID2)guchState++; //若为有效字符,状态变量递增 else guchState=0; //若不为有效字符,状态变量清零 break; ... case STATEi: if(R_chbyte==VALIDi) { guchSignal=SIGNAL_1; //命令有效,设置信号变量; guchState=0; } else guchState=0; //若不为有效字符,状态变量清零 break; ... } }
}
4.2 主程序设计
在消息机制中,主程序的主要任务是循环检测信号消息变量,当检测到某一信号有效时,则启动对应的任务。由于系统只有串行中断一个中断,因此主程序中不需要考虑中断任务的优先级与信号之间的冲突。
数据采集系统中,经常需要对模拟信号量的连续数据采集,因此系统设计加入了连续模拟采集的功能。接收到连续采集命令后,系统将每隔确定时间间隔对模拟量进行采集,同时通过串口将采集数据返回主机系统。同时,为了停止系统的连续采集状态,需要有对应的停止命令。
这样,系统命令就分为3个优先级,最高优先级的是系统远程复位命令,在任何状态下都将相应复位命令对系统进行复位;次高优先级的命令是AD连续采集与连续采集停止命令;其他命令都是最低优先级。系统程序的结构代码如下:
unsigned char guchState; //系统状态变量
unsigned char guchSignal; //系统信号变量
unsigned char guchDovalue; //系统接收数字量输出参数
void main(void)
{ Sys_init();//系统初始化程序 while(1) { switch(guchSignal) //系统状态机 { case CMDDO: //接收到DO信号 Sys_Do(guchDovalue); //执行DO程序 guchSignal=VALID; //清除系统信号 break; case CMDDI: //接收到DI信号 Sys_Di(); //执行DI程序 guchSignal=VALID; //清除系统信号 break; case CMDAD: //接收到单步AD信号 Sys_Ad(); //执行单步AD程序 guchSignal=VALID; //清除系统信号 break; case CMDSYNAD: //接收到连续AD信号 while(guchSignal!=CMDSYNEND) Sys_SynAd(); //执行连续AD采集, //直到收到停止连续AD信号 guchSignal=VALID; //清除系统信号 break; case SYSRESET: //接收到系统复位信号 #pragma ASM //系统强制复位 LJMP 0000H #pragma ENDASM } }
}
5 结束语
实际应用表明,本设计具有体积小、成本低、便携式、使用灵活等特点,特别适合工业现场测试和野外现场数据采集的场合。尤其是设计采用高度集成的ADuc845作为系统的控制核心,鉴于该芯片在工业和仪器仪表应用中要求精确测量宽动态范围低频信号的应用场合以及在适合低温漂且对噪声抑制和抗电磁干扰能力要求较高的应用场合的优势,与快速便携的USB接口相结合,将会有广阔的应用前景。
参考文献
[1] Silicon Laboratories lnc. CP2102 Product Data Sheet [EB/OL]. http://www.silabs.com, 2006.
[2] Analog Device. Aduc845 Product Data Sheet [EB/OL]. http://www.analog.com/, 2005
[3] 丛伟波,杨勇,韩清凯. 低功耗数据采集系统的USB接口设计[J]. 单片机与嵌入式系统应用,2005(1):25-27
[4] 周锐鹏, 张乐年,许小红. 基于消息机制的C51单片机程序设计[J]. 机械制造与自动化, 2003(3):66-67,71
|