AT91SAM7X的多路USB2.0数据采集系统
扫描二维码
随时随地手机看文章
1 AT91SAM7X数据采集主控芯片介绍
AT9lSAM7X是基于32位ARM7TDMI内核的微控制器。AT91SAM7X系列微控制器具备嵌入式10/100M以太网(Ethernet)MAC、CAN、全速(12 Mbps)USB 2.O。针对广泛的网络化实时嵌入式系统而设计的AT9lSAM7X256还具备1个10位模/数转换器(ADC)、2个串行外围接口(SPI)、同步串行接口(SSC)、双线接口(TWI)、3个通用异步收发器(UART)、1个8级优先中断控制器(priority interrupt controller)和众多的监管功能。这个新型的50MIPS MCU拥有64 KB的静态存储器和256 KB的25 ns闪存,这种闪存支持实时控制系统所需的可确定性处理能力。
2 数据采集系统硬件设计
2.1 数据采集系统硬件设计结构图
本文设计的基于AT91SAM7X的多路USB2.O数据采集系统主要由6部分组成,如图1所示,分别是输入信号接口模块、多路信号放大模块、信号调理模块、数据采集处理模块、USB2.O接口模块和上位机模块。其中,输入信号接口模块、多路信号放大模块、信号调理模块主要完成外部标准的一5~+5 V信号的隔离接人与变换。因为AT91SAM7X的ADC允许接入的转换电压范围是O~3 V,所以上述3个过程的信号变换是必要的。本系统主要采用的变换手段为信号的差分放大,主要部分数据采集处理模块和USB2.O接口模块分别由AT91SAM7X内置的ADC模块和USB2.O模块来完成。由于大部分的工作是在同一个芯片内部完成,只需通过简单的寄存器设置和数据交换,即可完成数据的采集和传输过程,在很大程度上优化了系统的设计。
2.2 AT91SAM7X的ADC模块介绍
AT91SAM7X的片内ADC是基于连续寄存器(SAR)模型,片内通过一个8到1的模拟复用器来实现8通道的模/数转换。ADC输入范围是O V~ADVREF。ADC支持8位和10位两种分辨率,可以通过软件触发、外部ADTRG触发引脚、内部触发定时器来启动ADC。可以通过配置ADC时钟、启动时间、采样保持时间来提高ADC的精度。ADC不受电源管理器管理,有一个中断源,如果用到ADC中断信号,则需要配置中断控制器(AIC)。
2.3 AT91SAM7X的USB2.O模块介绍
AT91SAM7X具有内置的USB设备控制器,USB设备端口符合USB2.O全速器件规范,具有12 Mbps的通信速率。每个端点可以配置为几种USB传输类型中的一种。USB设备自动检测挂起与恢复,通过中断来停止处理器。同时,为了配合USB设备的使用并发挥其最大性能,片内集成了328字节的双口RAM。此双口RAM的一个DPR段由处理器读/写,另一个DPR段由USB2.O外设读/写,从而有效地保证了数据传输的最大带宽。
3 AT91SAM7X的配置与模块编程
3.1 ADC模块的配置与模块编程
ADC模块功能框图如图2所示。ADC模块是基于逐次逼近寄存器(SAR)的10位模/数转换器,集成了一个8到1的模拟多路复用器,可实现8路模拟信号的模/数转换。转换由O V到ADVREF。同时,ADC支持8位或10位分辨率模式,并且转换结果进入一个所有通道可用的通用寄存器(即通道专用寄存器)中。可配置为软件触发、外部触发ADTRG引脚上升沿或内部触发定时计数器输出。ADC还集成休眠模式与转换序列发生器,并与PDC通道连接。这些特性可降低功耗,减少处理器干涉。最后,用户可配置ADC时间,如启动时间以及采样与保持时间。
系统设计中采用多点方式进行A/D转换,ADVREF接3.O V的基准电压。方便起见,以单点转换为例,说明ADC模块的配置与模块编程。当然在A/D转换之前,系统时钟和整体的配置是必需的,此处只介绍ADC模块相关的配置与模块编程。先将与模/数转换相关的所有寄存器清零,以保证所有寄存器都有确定值。具体配置过程和IAR程序代码如下:
3.2 USB2.0模块的配置与固件编程
USB2.0接口模块如图3所示。该模块需要2个时钟,即USB2.O器件端口时钟和主时钟。模块通过APB总线接口访问USB2.0器件端口.通过对APB寄存器的8位值进行读/写以实现对存储数据的双口RAM的读/写。外部恢复信号可选,允许在系统模式下唤醒USB2.O器件端口外设,然后主机将通知请求恢复的器件。USB2.O接口进行枚举时,该特性必须由主机处理。为保留检查VBUS的I/O线,必须先对PIO的控制器编程,将该I/O配置为输入PIO模式。USB2.O器件中有一条中断线与高级中断控制器AIC相连,因此,处理USB2.0器件中断时,必须在配置USB2.0器件端口前对高级中断控制器AIC编程。
本系统中使用USB2.0接口与上位机进行通信。为便于说明,此处以向上位机端通过USB2.0接口传送O~9的数字,并循环10次为例,说明USB2.0模块的配置与同件编程。系统初始化完成后,此固件程序就通过USB2.0接口发送O~9的数字,循环10次后结束。具体的配置过程和IAR程序代码如下:
注意:在USB2.0通信接121调试过程中,一定要将USB2.0固件程序下载到AT91SAM7X的F1ash中。这个过程可以通过ARM的地址重映射来完成,然后重新给USB2.0接口上电,因为只有在设备插入时上位机才检测设备,并提示添加相应的驱动程序。如果开发人员调试的过程中只是将程序加载到RAM中,那么由于数据掉电不会保存,固件程序在下一次插入设备时就不会存在,无论在上位机添加何种驱动程序,上位机都不会接收到数据,这样就会导致整个调试过程的失败。
3.3 USB2.0的Windows应用程序设计
上位机部分通过Visual C++6.0程序实现与嵌入式硬件部分的USB通信。测试过程中,先将USB2.0固件程序下载到AT91SAM7X中,插上USB数据线,根据提示添加相应的驱动程序后直接运行设计好的Visual C++6.0程序。测试结果如图4所示。
上位机程序运行过程中首先检查设备的连接情况,确认成功连接后开始接收USB2.0设备发送过来的数据。此处为循环10次的0~9的数字,如图4所示,数据已经成功传输到了上位机端。
结 语
本文设计了基于AT91SAMTX的多路USB2.0数据采集系统,以AT91SAM7X芯片为核心实现了数据信号的调理变换、采集和向上位机的传输。由于AT91SAM7X内置了ADC模块和USB2.0设备接口,使得系统设计十分方便;同时由于无需使用大量的外扩芯片,使得硬件成本大幅降低,产品体积更小巧,稳定性方面也比外扩芯片的方式有较大幅度的提升。