基于ARM嵌入式数据采集系统的设计Word文档下载推荐.docx
《基于ARM嵌入式数据采集系统的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于ARM嵌入式数据采集系统的设计Word文档下载推荐.docx(10页珍藏版)》请在冰点文库上搜索。
1、注重培养综合运用所学知识、自力分析和解决实际问题的能力,培养立异意识和立异能力,并获得科学研究的基础训练.
2、了解所选择的ARM芯片各个引脚功能,工作方式,计数/按时,I/O口,中断等的相关原理,并巩固学习嵌入式的相关内容知识.
3、通过软硬件设计实现利用ARM芯片对周围环境温度信号的收集及显示.
1.2设计意义
嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁剪,适应应用系统对功能、可靠性、本钱、体积、功耗有严格要求的专用计算机系统.它一般由以下几部份组成:
嵌入式微处置器、外围硬件设备、嵌入式把持系统.嵌入式系统是面向用户、面向产物、面向应用的,它必需与具体应用相结合才会具有生命力、才更具有优势.因此嵌入式系统是与应用紧密结合的,它具有很强的专用性,必需结合实际系统需求进行合理的扩充利用.嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它肯定是一个技术密集、资金密集、高度分散、不竭立异的知识集成系统.嵌入式系统必需根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、本钱、体积等要求.所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比力好的发展模式.目前的嵌入式系统的核心往往是一个只有几K到几十K微内核,需要根据实际的使用进行功能扩展或者扩充,可是由于微内核的存在,使得这种扩展能够非常顺利的进行.
数据收集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单位中自动收集非电量或者电量信号,送到上位机中进行分析,处置.数据收集系统是结合基于计算机或者其他专用测试平台的丈量软硬件产物来实现灵活的、用户自界说的丈量系统.被收集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量.收集一般是采样方式,即隔一按时间(称采样周期)对同一点数据重复收集.收集的数据年夜多是瞬时值,也可是某段时间内的一个特征值.准确的数据量测是数据收集的基础.数据量测方法有接触式和非接触式,检测元件多种多样.不论哪种方法和元件,均以不影响被测对象状态和丈量环境为前提,以保证数据的正确性.
传统的温度收集系统由于存在响应慢、精度低、可靠性差、效率低、把持繁琐等弊端,已经不能完全适应现代化工业的高速发展.随着嵌入式技术的迅猛发展,设计高速度、高效率、低本钱、高可靠性、把持方便的温度收集系统成为燃眉之急.基于ARM的温度收集系统就成了解决传统温度收集系统各种弊端的优先选择方案.
二、设计方案
2.1设计要求
1、查阅相关文献资料,熟悉所选ARM芯片及温度传感器
2、总体设计方案规划
3、系统硬件设计,熟悉AD转换原理及过程,温度传感器与ARM芯片的硬件接口实现及温度显示.
4、系统软件设计,包括温度的AD转换及显示的软件实现,用C语言编程
5、设计心得体会及总结
2.2方案论证
有许多客观需求增进了ARM处置器的设计改进.首先,便携式的嵌入式系统往往需要电池供电.为降低功耗,ARM处置器已被特殊设计成较小的核,从而延长了电池的使用时间.高的代码密度是嵌入式系统的又一个重要需求.由于本钱问题和物理尺寸的限制,嵌入式系统的存储器是很有限的.所以,高的代码密度对那些只限于在板存储器的应用是非常有帮手的.
另外,嵌入式系统通常都是价格敏感的,因此一般都使用速度不高、本钱较低的存储器.ARM内核不是一个纯洁的RISC体系结构,这是为了使它能够更好的适应其主要应用领域--嵌入式系统.在某种意义上,甚至可以认为ARM内核的胜利,正是因为它没有在RISC的概念上沉入太深.现在系统的关键其实不在于纯真的处置器速度,而在于有效的系统性能和功耗.
在本系统的设计过程中,根据嵌入式系统的基本设计思想,系统采纳了模块化的设计方法,而且根据系统的功能要求和技术指标,系统遵循自上而下、由年夜到小、由粗到细的设计思想,依照系统的功能条理,在设计中把硬件和软件分成若干功能模块分别设计和调试,然后全部连接起来统调.
三、硬件设计
3.1设计思路
本设计的基于ARM的嵌入式数据收集和显示装置的原理框图如图3-1所示.由图可见,本系统采纳“电源部份+ARM核心控制模块+温度收集模块”实现所需功能.并考虑到系统的可扩展性和延伸性,本系统采纳主从CPU协同工作,实现了数据的实时收集、传输与显示,具有处置速度快、精度高、人机交互界面友好、稳定性高、扩展性好等优点.
本设计的基于ARM的嵌入式数据收集和显示装置的原理框图如图3-1所示.由图可见,本系统采纳“电源部份+ARM核心控制模块+温度收集模块”实现所需功能.
电源部份
图3-1
系统原理框图
3.2系统电路设计
3.2.1电源电路设计
本系统的电源电路由两部份组成:
系统总电源电路和RAM核心模块电源电路.如图3-2:
+12V恒定直流电源经电容滤波,分别进入7809和7805稳压,获得+9V和+5V的稳定电压输出后分别供给ARM核心控制模块和其余电路部份使用.图中IN4148是为了防止输出端并接高于本稳压模块的输出电压而烧坏7809和7805而特别设计,到达了可靠性电源设计目的.另外,由于系统正常工作电流较年夜,因此使用时均应在7809和7805上加散热片散热.由图可见,系统采纳双电源供电,提供了系统正常工作所需的电源电压.另外,由于考虑到便携目的,本系统采纳+12V铅蓄电池提供系统所需的恒定直流电源.
图3-2
系统电源电路原理图
如图3-2:
I/O口提供了相应的稳定直流电源.其中的IN4004是为了防止电源输入反接烧坏集成稳压块而设计的.由于S3C44B0x采纳2.5V作为ARM内核电源,使用3.3V作为I/O口电压,故ARM核心控制模块电源需要另外独自设计,其电源电路如图3-2所示.由系统总电源电路提供的+9V稳压电源作为输入,分别经AS1117-5.0、AS1117-3.3、AS1117-2.5稳压后,输出5.0V、3.3V和2.5V恒定电源,为RAM内核和I/O口提供了相应的稳定直流电源.其中的IN4004是为了防止电源输入反接烧坏集成稳压块而设计的.
3.2.2温度收集电路设计
温度收集模块电路采纳AT89S52单片机作为模块的协控制器.对温度传感器的选用DS18B20,因为DS18B20是Dallas公司最新单总线数字温度传感器,该传感器集温度变换、A/D转换于同一芯片,输出直接为数字信号,年夜年夜提高了电路的效率.由于现场温度直接以“一线总线”的数字方式传输,年夜年夜提高了系统的抗干扰性,且提高了CPU的效率.AT89S52单片机的P0口与8路温度传感器相连,用于收集温度数据;
另外,模块提供RS-232串行口与RAM核心控制模块通信,到达数据传输的目的.温度收集模块电路原理图如图3-3.
图3-3
温度收集电路原理图
四、软件设计
4.1设计思路
本系统软件设计是在CodeWarriorforADS开发环境下完成的.本温度数据收集与显示装置的主体由S3C44B0x核心控制模块和温度数据收集模块构成,所以系统软件也是围绕这两个模块来编写的.而又由于系统采纳了S3C44Box和AT89S52两个CPU协同工作,所以软件的编写需要对这两个CPU分别编写,以实现所要求的功能.法式流程图如图4-1.
图4-1法式流程图
由该流程图可看出,刚上电时,S3C44B0x要先进行ARM内部的初始化,以使ARM进入相应的状态和模式;
然后初始化硬件装置,以使硬件系统可以正常支持温度数据收集;
接着通信初始化,以确定温度收集模块与ARM核心控制模块连接正常,并通过UART复位温度数据收集模块,确保其进入正常温度数据收集状态;
然后初始化LCD显示和键盘,在LCD上显示相应的菜单列表,供用户通过键盘选择把持;
至此,系统初始化完成,并进入正常主法式循环状态.
在正常主法式循环状态中,首先扫描键盘,以快速的响应用户的按键把持;
若没有键值按下,则ARM立即进行数据的收集、处置与显示,以实现实时数据收集与显示等功能.
其主法式包括温度收集法式、ARM获取温度子法式、温度处置和转换子法式.当ARM处置器接收到正确的温度数据后,立即进行相应的温度数据处置与转换,酿成可被LCD直接显示的正确温度值.
4.2法式清单
温度处置与转换子法式如下:
//寄存读取到的以后温度值,未转换
StaticU16a-temp-now[8]={8*0}
//寄存经精度计算后的实际温度值,高8位整数部份,低8位小数部份
staticU16b-temp-now[8]={8*0};
//寄存8路转换后温度值,分别为百位,十位,个位,小数位
staticU8temp-convent-all[32]={32*0};
//-------------------------------
//温度处置与转换子法式
//----------------------------------
voidtemp-change(void)
{
U8negtive=0x00;
//寄存数的符号,若为正=0;
若为负,=0xff
U8j=0;
U8*pt=temp-convent-all;
U16*p1=a-temp-now;
U16*p3=b-temp-now;
U16temp=0;
for(j=0;
j<
8;
j++)
negative=0x00;
temp=*p1;
//若温度为负值,进行相应处置
if((temp&
0xf80)!
=0)
{
temp=(~temp)+1;
//转为正的原码
negative=0xff;
//同时置符号为0xff
}
//根据精度消除无关数据
switch(a-temp-prec)
case0x1f:
//精度为9位,则清除最低3位无效位
{
temp=temp&
0xfff8;
break;
}
case0x3f:
//精度为10位,则清除最低2位无效位
0xfffc;
}
case0x5f:
//精度为11位,则清除最低1位无效位
0xfffe;
case0x7f:
//精度为12位
//换算成实际温度,并扩年夜10倍,去失落小数部份
temp=(U16)((float)(temp)*0.625);
//折算放入b-temp-now
数组中
//高8位放整数部份,低8位放小数部份,最高位放符号位
if(negtive==0xff)//若为负值
{
*p3=((temp/10)<
<
8)|(temp%10)|0x8000;
else
8)|(temp%10)&
0x7fff;
if(negative==0xff)//若为负值
{(*pt++)=0x80;
else
(*pt++)=temp/1000%10+0x30;
(*pt++)=temp/100%10+0x30;
(*pt++)=temp/10%10+0x30;
(*pt++)=temp%10+0x30;
p1++;
p3++;
//转换完成后清除读回的原始温度
p1=a-temp-now;
for(j=8;
j>
0;
j--)
*p1++=0x0;