在可编程通道选择方式下,模拟输入通道的选择是由程序控制指令完成的。控制器发出数据转换指令和要转换的通道号,通过片选信号与A0和A1端译码选择需要的模拟通道,此时A0和A1为数据通道选择输入端。在完成数据通道的选择之后,后续各引脚的工作过程与连续转换方式下的情况类似。
图2. ADS7825并行输出电路原理图
图3. CY7C68013和ADS7825连接原理图
2 USB接口单元
USB接口单元的主要实现芯片是Cypress公司的CY7C68013,负责完成硬件系统和PC上位机之间的数据传输。Cypress公司的EZ-USB FX2系列芯片是世界上第一个集成USB2.0协议的微处理器,它支持12Mb/s的全速传输和480Mb/s的高速传输,可使用4种USB传输方式:控制传输、中断传输、块传输和同步传输,完全适用于USB2.0,并向下兼容USB1.1。其CPU采用增强型8051,它比标准8051的速度更快、功能更强,且指令集和标准8051完全兼容,并可使用C51编译器。FX2内部包含8.5KB的RAM,它们兼做程序存储器和数据存储器,增强型8051的固件代码就存储在该区域内,FX2也具有I2C总线,以使其能从外部EEPROM中下载芯片程序。另外,FX2系列芯片采用3.3V供电,且可使用USB总线电源,但是功耗较大。 [2]
本系统中使用CY7C68013的PA0-PA6管脚作为AD工作状态的控制信号,以决定ADS7825数据采集和存储,PB0-PB7为8位数据总线根据工作状态进行高低8位的数据传输。如图3所示为CY7C68013和ADS7825连接原理图。
2.2 软件程序的编写
软件程序包括包括三部分,芯片固件程序、驱动程序、上位机Win32应用程序。
1 芯片固件程序
CY7C68013芯片固件程序负责PC发来的各种USB请求,以完成主机与外围电路间的数据传输。该固件框架使用Keil C51 C编写,其中使用了许多Keil C对标准C的扩展。固件框架主要包含初始化、处理标准USB设备请求以及USB挂起时的电源管理。
框架完成了一个简单的任务循环(见图4)。首先框架初始化内部的状态变量,然后条用用户初始化函数TD_Init。从该函数返回后,框架初始化USB接口到未配置状态并使能中断。然后每隔1s进行一次设备重枚举,直到端点0接收到一个SETUP包。一旦检测到SETUP包,框架将开始交互的任务调度,其任务调度的步骤如下:
①调用用户函数TD_Poll,实现数据采集。
②判断是否有标准设备请求等待处理,如果有,则分析该请求并响应;其中,DR_VendorCmnd函数负责处理上位机发出的供应商定义请求,通过上位机发送请求来控制AD采集的开始和结束。
③判断USB内核是否收到USB挂起信号。如果收到,则调用用户函数TD_Suspend。从该函数成功返回后,再检测是否发生USB唤醒事件。如果未检测到,则处理器进入挂起方式;如果检测到,则调用用户函数TD_Resume,程序继续运行。如果从TD_Suspend函数返回FALSE,则程序继续运行。
图4. 固件程序流程图