微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种嵌入式便携数据采集分析仪

一种嵌入式便携数据采集分析仪

时间:04-20 来源:互联网 点击:

引言

对旋转机械的多点振动测试实践中,需要使用多种仪器,如示波器、动平衡仪、振动分析仪等。随着测试技术的进步,虚拟仪器的出现将其合而为一,大大简化了复杂的测试工作。虚拟仪器的概念是使用计算机对被测信号进行数据采集,并对采集到的数据序列进行分析和显示的全过程。按照虚拟仪器概念搭建的仪器需要三部分:计算机、数据采集硬件和分析软件。数据采集硬件一般由A/D板卡实现。然而计算机的进步和总线的变化使曾经可行的测量结构和分析程序在新的总线、操作系统上不能正常工作。各个厂家的A/D板卡一般只具有简单的采样触发方式;硬件和windows底层源代码的保密性又扼杀了用户自行开发新的采样触发方式的可能性。PC机体积过大不便移动工作;笔记本电脑虽便携,内部几乎没有插入板卡的空间,接口性能也娇气。这些不足又为测试工作带来了新的不便。

近年来嵌入式技术发展很快,使用单片机控制的数据采集系统方兴未艾。但由于单片机性能的限制,采样速率有限,存储空间很小,不能满足高速大容量采样的需求,更不可能使仪器运行分析软件,摆脱电脑独立工作。

ARM系列微处理器功耗低且性能大大高于单片机,使在嵌入式系统上实现虚拟仪器成为可能。本文基于ARM7TDMI设计的嵌入式数据采集分析仪实现了上述目的。

硬件结构和工作原理

仪器的硬件结构及工作原理图如图1所示。处理器选用三星(samsung)公司的s3c44b0x替代51单片机,在保持微小功耗的前提下获得了更高的运行频率和更强大的数据处理能力。其ARM7TDMI内核应用改进的RISC设计思想来获得更好的功耗性能比,具有0.06mW/MHz的低功耗,保证仪器可以在电池供电条件下工作较长时间。ARM7的三级指令流水线提供0.97MIPS/MHz的指令效率,接近每周期执行一条指令。


图1 硬件结构及工作原理图

S3c44b0x外接10MHz的晶体振荡器,通过内部的PLL倍频,运行在64MHz的主频下。这样的主频比一般单片机高了5~10倍,保证处理器在控制高速A/D进行数据采集的同时,还能提供额外运算时间来分析数据。除ARM7TDMI内核外,s3c44b0x还提供PWM计数器、UART、DMA、 8通道10位精度A/D变换器等外围设备。

存储器方面,系统配置了8Mbyte的SDRAM和16Mbyte的FLASH。大容量的SDRAM提供了充足的程序运行空间和采集数据缓存。FLASH 一部分用作系统的启动存储器;一部分存储采集到的数据,即使掉电也不会丢失。存储器通过16位数据线、地址线和片选线与处理器连接。S3c44b0x提供八个存储器片选空间(bank)。

A/D变换器是数据采集的关键部件。仪器拥有两个A/D变换器。一个是s3c4bb0x内部的A/D变换器,具有10位精度,8通道和单通道最高 100kSps的速度。另一个是AD公司的AD7859芯片,具有12位精度,8通道和单通道最高200kSps的速度,自带采样保持器。AD7859通过16位数据线、地址线和片选线连接到处理器,占用一个存储器bank。处理器以访问存储器的方式访问AD7859,也可以使用处理器的DMA控制数据传输。AD7859的触发端通过一个多路开关分别连接了仪器外时钟输入端和处理器的计数器输出端,以实现多种触发方式。此外,处理器还可以通过数据线传送命令的方式触发AD7859进行采样。

USB控制器是数据传输的主要部件。本仪器选用Philips公司的PDIUSBD12芯片,符合USB1.1标准,数据传输速度达到12Mbps。 PDIUSBD12作为下位机通过8位数据线、地址线和片选线连接到s3c44b0x,占用一个存储器bank。PDIUSBD12的INT_N管脚连接到s3c44b0x的EINT2管脚,通过中断方式通知处理器处理USB上位机的呼叫。PDIUSBD12的硬件连接电路原理图如图2所示。


图2 PDIUSBD12硬件连接原理图

仪器的人机交互界面由一块320×240的高分辨率单色液晶显示器和一块4×4键盘组成。液晶显示器模块以8位数据线、地址和片选连接到s3c44b0x,占用一个存储器bank。

软件系统

软件系统主要包括初始化程序、操作系统、采样触发程序、USB固件和应用软件5个部分。

初始化程序

初始化程序是针对s3c44b0x使用汇编语言编写的。在将控制权交给操作系统前,初始化最基本的硬件设备。主要工作是配置SDRAM并将操作系统代码从FLASH拷贝到SDRAM中。这一部分的主要代码如下:

ResetHandler:

ldrr0,=WTCON;//watchdogdisable

ldrr1,=0x0

strr1,[r0]

mrsr0,cpsr;//disableinterrupt

orrr0,r0,#0xc0

msrcpsr,r0

/*Setclockcontrolregisters*/

ldrr0,=LOCKTIME

ldrr1,=2000; //count=t_lock*Fin

strr1,[r0]

ldrr0,=PLLCON

ldrr1,=0xf8033; //MCLK=64MHz

strr1,[r0]

ldrr0,=CLKCON

ldrr1,=0x7ff8; //AllunitblockC

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top