历史上的今天
今天是:2024年10月30日(星期三)
2020年10月30日 | 基于ARM的简易数据采集方案
2020-10-30 来源:elecfans
0 引 言
在计算机测量、控制及信号处理中,数据采集发挥着至关重要的作用。数据采集是获取数据的重要手段,它是从传感器或其他待测设备等模拟或数字被测单元中自动采集信息的过程。而采用ARM内部的A/D转换资源,具有转换速度较高、工作可靠、设计的复杂度较低等优点。同时, ARM还具有体积小、运算速度高,A/D转换分辨率较高的特性,使ARM得到了广泛的应用。本文利用ATMEL公司ARM7系列中的 AT91M55800A设计了一个简易的数据采集方案。该方案具有结构简单、开发容易,可靠性强、价格低廉等特点,有一定的实用价值。
1 数据采集方案的结构和功能
方案结构如图1所示。
该方案是由接收、A/D转换和处理、输出3部分组成。本方案以AT91M55800A为核心,该芯片是一个高性能的32位处理芯片,内部有一个8选1的模拟通道,一个10位的A/D转换通道。预处理电路将传感器拾取的信号进行隔离放大和滤波至A/D转换所需0~3 V,处理过的模拟信号通过AT91M55800A中的A/D转换通道变成数字信号,并根据要求进行相应的处理,最后由液晶显示器输出。同时,本方案使用 Flash存储器作为程序存储器用于保存数据。

2 硬件组成
AT91M55800A是ATMEL公司基于ARM7TDMI核的AT91的 16/32位微控制器家族成员。它通过完全可编程的外部总线接口直接连到片外存储器,使读或写操作最快可以达到一个时钟周期,通过将带有片内SRAM的 ARM7TDMI处理器核、多种外围功能模块、模拟接口和低功耗振荡器集成于单一硅片。AT91M55800A为低功耗应用提供了一个高度灵活和高性价比的解决方案。其主要特点如下:
a)集成了ARM7TDMI ARM Thumb处理器核,高性能的32位RISC体系结构,高代码密度的16位指令集,嵌入式ICE;
b)8 kB片内SRAM,32位数据总线宽度,单时钟周期访问,方案可最大扩展64 MB存储器,软件可编程的8位或16位外部数据总线;
c)主/从式SPI接口,8位~16位可编程数据长度,4个外部从芯片选择;
d)可编程的看门狗电路,提高方案的安全可靠性;
e)58个可编程I/O口线,扩展了输入输出口线;
f)先进电源管理控制器,具有正常、等待、慢速、待机和掉电方式;
g)8优先级、可单独屏蔽的向量中断控制器,6通道16位定时器/计数器,3个USART,每个USART有2个专用的PDC通道;
h)8通道10位A/D转换器,2通道10位D/A转换器;
i) 采用片内主振荡器和PLL倍频的时钟产生器,采用片内32 kHz振荡器的实时时钟。
图2为方案的实际应用电路。

该芯片中含有两个完全相同的4通道10位A/D转换器,可组成一个8通道10位A/D转换器。每个A/D转换器具有 4个模拟输入引脚和数字触发输入引脚,并提供一个AIC的中断信号。两个A/D转换器共享模拟电源引脚和参考电压输入引脚。每一个通道可被单独地使能或禁止,并具有自己的数据寄存器。A/D转换器可以配置为在转换序列后自动进入睡眠模式,并可由软件、T/D或外部信号来触发。
由于AT91M55800A内部不带片内程序存储器,需要对方案外扩[1] Flash存储器作为程序存储器用于存放程序代码、常量表及掉电后需要保存的数据。AT91M55800A的总线读写周期最长可以有8个周期的延时,要求 Flash存储器的最低读速度不低于该速度。考虑到方案的执行速度和程序大小,选用访问速度为70 ns的HY29LV160(芯片容量是1 M×16 bit共2 MB),基本上能够满足方案要求。
该系统中接入AD590[2]作为温度传感器,该器件以电流作为输出量来指示温度,并且将得到的信号经过放大器的缓冲隔离得到一个与温度成正比的电压,从而实现对温度的测量。
3 A/D转换编程
在AT91M55800A中,两个A/D转换器独立工作,每个A/D转换器只能读取一个通道的A/D转换器值。此程序让用户指定哪一个通道工作,然后读取指定通道的值,并显示出来。由于A/D转换器的精度有10位和8位,这里设置为10位,因此获得的数据范围在0~3FF之间。
A/D转换器的工作过程不同于一般的外围设备。初始化后,必须有一个触发命令高速A/D转换器进行采集,此时A/D转换器对其激活的某一个通道上的模拟信号进行采样、保持,然后转换成数据,存储在数据寄存器中。用户可以从状态寄存器中了解到A/D转换器是否已经转换完成,然后通过读取数据寄存器得到A/D 转换后的数值。
A/D转换程序流程图见图3。

对A/D转换器进行编程,使用AT91库(在/pe-riph/adc目录下),与A/D转换器相关的代码部分[3]如下:
a)adc.h:A/D转换器用户接口结构定义StructADC、控制寄存器ADC-CR、模式寄存器ADC-MR和其他一些重要寄存器的各个重要位的定义、A/D转换器中断服务程序函数定义。
b)Lid_adc.h:A/D转换器描述符定义、库函数的定义。
e)Lid_adc.c:库函数的详细代码。包括:初始化ADC at91_adc_open、关闭ADC at91_adc_close、获得状态寄存器的值at91_adc_get_status、设置控制寄存器的值at91_adc_trig_cmd、读取A/D转换的值at91_adc_read、打开指定的A/D转换通道at91_adc_channel_open、关闭指定的A/D转换通道 at91_adc_channel_close、获取通道开和关的状态at91_adc_channel_geI_status等。
4 结束语
本文介绍了一个基于ARM7的数据采集方案。该方案通过硬件的具体设计和软件编程实现了预期的目标。利用ARM进行数据采集可以使方案更稳定,而且可以达到功耗小、性能高的效果,适合在多种工业场合中应用。
下一篇:基于ARM的汽车黑匣子设计
史海拾趣
|
我在网上下了这个串口的程序,就是如果直接运行进不了中断处理函数,如果我打开串口调试工具的话程序一过 thisUcb->isrHandle = RtAttachInterruptVector ...… 查看全部问答> |
|
各位大侠: 我想在单片机下实现串口打印功能的一个函数PrintfEx 但是要可以想printf一样格式化变量 如: int a = 100; PrintfEx(\"a is %d\\r\\n\",a); 请问如何实现这一功能呢?谢谢!… 查看全部问答> |
|
二手开发板,IC呆料免费交易平台www.dz-dailiao.cn,www.电子呆料.cn 二手开发板,IC呆料免费交易平台www.dz-dailiao.cn,www.电子呆料.cn… 查看全部问答> |
|
我是上海一大学软件工程专业的09届应届生,本科,不是很会说话。 在学校里学的是单片机开发之类的(偏软件 C语言),接触过ARM+Wince之类的嵌入式软件的开发。(其实学校里嵌入式软件方面的课基本就没有,都是我凭着兴趣自学的)单片机的水平达到自 ...… 查看全部问答> |
|
我们平常用串并口通信编程时,不同平台都提供相关的函数直接给你调用,请问PC的串并口通信的实质是什么,它的那个串并口地址起什么作用,为什么有些平台提供一个outport inport向这些IO地址直接读写数据就可以和另一方通信呢?是不是往这个里面写了 ...… 查看全部问答> |
|
wince下HD Audio 音频驱动开发时,在调试时发现有调试信息时,播放声音文件可以听到断续的声音,但去掉调试信息后无法听到任何声音,不知是什么原因,请指教! 不慎感激!! … 查看全部问答> |
|
如何从winow mobile5.0 切换到wince5.0中 我的程序是在VS2005上开发,用的是windows mobile 5.0 PocketPC(compact Framework1.0)版本 现在想切换到wince5.0平台上。 使用project->change target platform ,发现无法 切换到wince5.0,主要原因是wince5.0的project需要的是compact Framew ...… 查看全部问答> |




