嵌入式压力采集系统设计.docx
《嵌入式压力采集系统设计.docx》由会员分享,可在线阅读,更多相关《嵌入式压力采集系统设计.docx(14页珍藏版)》请在冰豆网上搜索。
嵌入式压力采集系统设计
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2015年春季学期
嵌入式系统开发技术课程设计
题目:
嵌入式压力采集系统设计
专业班级:
姓名:
学号:
指导教师:
成绩:
摘要
以单片机为控制核心,采用压力传感器和高精度A/D转换器等器件对外界压力信息进行
采集和转换。
将压力进行物理采集并转换为数字量后,再由计算机进行存储、处理、显示和打印的过程,相应的系统称为数据采集系统。
软件设计方面则采用功能模块化的设计思想;键盘模数转换等采用中断方式来实现,从而大大提高了单片机的效率以及实时处理能力。
本文设计了一个压力传感器采集控制系统,介绍了该系统的基本原理,系统分析,详细设计及实现流程图,并重点介绍了串口数据收集的原理,通过嵌入式设备完成室内环境信息的采集至网关设备,通过上下位机实现终端嵌入式设备的信息收集及相关设备的控制。
关键词:
嵌入式,压力,数据采集,精度
目录
一前言1
二基于ARM的嵌入式系统设计思想2
三基本原理3
3.1硬件系统概述3
3.2CC2530结构及实现原理3
3.3压力模块6
四系统分析7
4.1系统的硬件组成及工作原理7
4.2程序流程图7
4.3软件子系统设计8
五总结9
六参考文献10
七附录11
一前言
传统的压力数据采集系统由于存在响应慢、精度低、可靠性差、效率低、操作繁琐等弊端,已经不能完全适应现代化工业的高速发展。
随着嵌入式技术的迅猛发展,设计高速度、高效率、低成本、高可靠性、操作方便的数据采集系统成为当务之急。
而现在的ARM处理器不但便宜而且性能较传统的51单片机高得多,集成度也大大提高,为单芯片解决方案提供了非常方便的平台,在很多场合都可以用一个芯片就包容了你所需要的全部资源,根本不用扩展其他资源了。
不但电路简单易行风险减小而且产品价格也能控制在最理想状态。
这些优势也正是ARM处理器风靡全球的理由所在。
压力与人们的生活息息相关,因此,开发一种高精度的压力采集检测系统是适应现代发展必不可少的。
压力,垂直作用于物体表面上的力。
界面可以是指流体内部任意划分的分离面,也可以流体与固体之间的接触面。
任意流体元表面都受到来自外界的作用力,称表面力。
不少学科常常把压强叫做压力,同时把压力叫做总压力。
这时的压力不表示力,而是表示垂直作用于物体单位面积上的力。
在工程上压力和压强叫法有时不严格区分。
压力传感器是是工业实践中最为常用的一种传感器,是一种将压力转换成电流、电压的器件,可用于测量压力,位移等物理量。
其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
一般普通压力传感器的输出为模拟信号,模拟信号是指信息参数在给定范围内表现为连续的信号。
或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号。
而我们通常使用的压力传感器主要是利用压电效应制造而成的,这样的传感器也称为压电传感器。
二基于ARM的嵌入式系统设计思想
有许多客观需求促进了ARM处理器的设计改进。
首先,便携式的嵌入式系统往往需要电池供电。
为降低功耗,ARM处理器已被特殊设计成较小的核,从而延长了电池的使用时间。
高的代码密度是嵌入式系统的又一个重要需求。
由于成本问题和物理尺寸的限制,嵌入式系统的存储器是很有限的。
所以,高的代码密度对于那些只限于在板存储器的应用是非常有帮助的。
另外,嵌入式系统通常都是价格敏感的,因此一般都使用速度不高、成本较低的存储器。
ARM内核不是一个纯粹的RISC体系结构,这是为了使它能够更好的适应其主要应用领域--嵌入式系统。
在某种意义上,甚至可以认为ARM内核的成功,正是因为它没有在RISC的概念上沉入太深。
现在系统的关键并不在于单纯的处理器速度,而在于有效的系统性能和功能、
三基本原理
3.1硬件系统概述
在本系统的设计过程中,根据嵌入式系统的基本设计思想,系统采用了模块化的设计方法;并且根据系统的功能要求和技术指标,系统遵循自上而下、由大到小、由粗到细的设计思想;按照系统的功能层次,在设计中把硬件和软件分成若干功能模块分别设计和调试,然后全部连接起来统调。
3.2CC2530结构及实现原理
CC2530是一个兼容IEEE802.15.4的真正的片上系统,支持专有的802.15.4市场以及ZigBee、ZigBeePRO和ZigBeeRF4CE标准。
CC2530提供了101dB的链路质量,优秀的接收器灵敏度和健壮的抗干扰性,四种供电模式,多种闪存尺寸,以及一套广泛的外设集——包括2个USART、12位ADC和21个通用GPIO,以及更多。
除了通过优秀的RF性能、选择性和业界标准增强8051MCU内核,支持一般的低功耗无线通信,CC2530还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,使你更快的获得市场。
CC2530可以用于的应用包括远程控制、消费型电子、家庭控制、计量和智能能源、楼宇自动化、医疗以及更多领域。
根据芯片内置内存的不同容量,CC2530拥有三种不同的版本:
CC2530-F32/F64/F128/F256,编号后缀分别代表了芯片具32KB,64KB,128KB或256KB的闪存。
比起第一代CC2430,CC2530提供了改进的RF性能,多达256KB的闪存以支持更大的应用,强大的地址识别和数据包处理引擎,能够很好的匹配RF前端,封装更小,IR一代电路,以及支持ZigBeePRO和ZigBeeRF4CE。
图3.1框图显示了CC2530器件系列不同的构造模块。
可大致分为3类模块:
CPU和相关存储器模块,外设、时钟和电源管理模块,无线模块。
CC2530是基于2.4-GHzIEEE802.15.4、ZigBee和RF4CE上的一个片上系统解决方案。
其特点是以极低的总材料成本建立较为强大的网络节点。
CC2530芯片结合了RF收发器,增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其他模块的强大的功能。
如今CC2530主要有四种不同的闪存版本:
CC2530F32/64/128/256,分别具有32/64/128/256KB的闪存。
其具有多种运行模式,使得它能满足超低功耗系统的要求。
同时CC2530运行模式之间的转换时间很短,使其进一步降低能源消
下图是CC2530的方框图,图中模块大致可以分为三类:
CPU和内存相关的模块;外设、时钟和电源管理相关的模块,以及无线电相关的模块。
图1CC2530方框图
图2CC2530引脚图
利益:
支持Zigbee/ZigbeePRO,ZigbeeRF4CE,6LoWPAN,WirelessHART及其他所有基于802.15.4标准的解决方案;
卓越的接收机灵敏度和可编程输出功率;
在接收、发射和多种低功耗的模式下具有极低的电流消耗,能保证较长的电池使用时间;
一流的选择和阻断性能(50-dBACR)
应用:
智能能源/自动化仪表读取
远程控制
居家及楼宇自动化
消费类电子产品
工业控制及监测
主要特点:
高达256kB的闪存和20kB的擦除周期,以支持无线更新和大型应用程序
8kBRAM用于更为复杂的应用和Zigbee应用
可编程输出功率达+4dBm
掉电模式下,在睡眠定时器运行时,仅有不到1uA的电流损耗
CC2530前瞻及应用
CC2530实施了IEEE802.15.4标准,因此它是一款通用性极强的芯片高级计量与Zigbee智能能源、家庭与适用于包括消费类电子与RF4CE远程控制、楼宇自动化、照明、工业控制与监控、保健与医疗等在内的许多市场。
CC2530搭配最新的ZigbeePRO协议栈以及我们的支持,到目前为止成为业界最佳的市场解决方案概念。
另一种基于IEEE的标准被称为RF4CE,最近在国外人气急升,由于拥有非视距操作,全球多家大型消费类电子公司合力推动RF远程控制技术进入普通家庭。
更大的遥控范围、双向确认通信等功能,因此RF4CE将会彻底改变您的家庭影院体验。
3.3压力模块
、
图3压力模块硬件图
压力传感器模块采用桥上轻触传感器,能检测出0‐1500g的正压力。
FSS小型力传感器:
FS系列传感器具有精密可靠的力传感性能,它封装在小型商品等级的包装中,其价格便宜。
该传感器的特色是采用了已被证明可靠的传感技术,即使用专门设计的精制压敏电阻硅传感元件。
小功率,无放大、无补偿的惠斯顿电桥电路设计可在力范围内。
力传感器根据埋入硅片的压电电阻,在其受到任何外力而挠曲时,其电阻会增加的原理工作。
该传感器通过不锈钢球,将施加的力直接集中到硅‐传感元件上,电阻值的变化是随施加力的大小而成比例的变化。
电路电阻的变化致使mV输出电平也作相应的变化。
传感器的封装设计结合了获专利的模块结构。
采用创新的弹性技术工艺和模制的工程塑料,使过力大小可达4.5/5.5kg。
不锈钢球提供了极佳的机械稳定性,它适应于各种应用。
FSS传感器在50°C(122°F)时,故障平均周期(MCTF)的可靠性测试中可提供2千万次操作。
可靠性测试确定了传感器在出故障前,在满量程情况下可能的工作次数。
各种电气互连接头,可接受预接线的连接器,印刷电路板安装和表面安装。
独特的传感器设计还可提供包括安装架在内的各种安装形式选项,以及可满足应用时的各种具体安装要求。
四系统分析
4.1系统的硬件组成及工作原理
图4高精度压力数据采集系统框图
高精度压力数据采集系统框图如上所示,压力传感器输出的模拟信号被放大调理后经模数转换模块转换为数字量,传送给单片机,经过标定,运算及零点补偿等处理,在液晶显示模块上显示出来,同时可经串行接口传送到上位机,实现良好的人机交换,键盘提供人机交换的的手段。
4.2程序流程图
图5程序流程图
4.3软件子系统设计
为了能够进行系统初始化.采用一个汇编文件做肩动代码,用它实现向量表的定义、堆栈初始化、系统变量初始化、中断系统初始化、I/O初始化、外同初始化、地址重映射等操作。
系统的初始化流程如图所示。
图6系统的初始化流程
给智能主板供电(USB外接电源或2节干电池)。
将一个无线节点模块插入到带LCD的智能主板的相应位置。
将压力传感器模块插入到智能主板的传感及控制扩展口位置。
将CC2530仿真器的一端通过USB线(A型转B型)连接到PC机,另一端通过10Pin下载线连接到智能主板的CC2530JTAG口(J203)。
将智能主板上电源开关拨至开位置。
按下仿真器上的按钮,仿真器上的指示灯为绿色时,表示连接成功。
使用IAR7.51打开“…\OURS_CC2530LIB\lib10(HumiTempLight)\IAR_files”下的HumiTempLight.eww文件,下载运行程序。
观察LCD上压力强度的变化。
五总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着网络在人们生活中的运用越来越广泛和嵌入式技术在日常生活中的地位日益凸显,这对我们这些学习有关网络以及计算机专业的学生来说既是一种挑战,又是一个难得的机会。
通过这次嵌入式的课程设计让我们初步了解了嵌入式系统的设计过程和工作原理,掌握了一些编程能力。
对我们的网络编程有了很大的提高,与此同时,我们还学到了一些专业知识之外的东西。
在课程设计过程中,我们了解到课程设计不光光是埋头做设计,也是同学之间互相学习和互相交流经验和知识的机会。
也是我们大家向老师提出疑问和学以致用的机会,这让我们不会成为只知道理论而不会将理论化为实践中去的书呆子。
我觉得课程设计就是一个复习课堂上学到知识的机会,也是一个加强学生动手能力设计的机会。
更是一个让学习得到升华的过程。
在该次课程设计的初期,我们将任务分配好,每个人各就其职,各尽所能。
当然,在一开始我们就遇到了一些问题,解决问题的方法是跑到图书馆查看有关书籍,或上网查阅有关信息,或请教老师。
终于在大家的相互帮组和大家的齐心协力下,我们最终完成了该次的课程设计。
这次课程设计不仅考察了我们对课堂上所学专业知识的理解程度,也锻炼了我们的动手能力。
提高了我们独立思考文理,解决问题的能力。
总体上看,我觉得这次课程设计是我自身的知识丰富了不少,但同时也发现了自己的不足之处。
例如在动手方面,和知识融合方面,不能与实践相结合。
软件操作不够熟练,不能灵活运用。
是我了解要先学好理论知识才能很好地与实践相结合,才能熟练地运用到生活中。
六参考文献
[1]谭会生.ARM嵌入式系统原理与应用开发[M].西安:
西安电子科技大学出版社,2012
[2]何文华,梁竞敏.Linux操作系统实验与实训.北京:
人民邮电出版社,2006.
[3]李蔚泽.FedoraCore3Linux安装与系统管理.北京:
中国铁道出版社,2006.
[4]朱居正,高冰.RedHatLinux(FedoraCore3)实用培训教程.北京:
清华大学出版社,2005
[5]周立功.《ARM嵌入式系统基础教程》北京:
北京航天航空大学出版社,2008
[6]陈丽蓉等.《嵌入式微处理器系统及应用》北京:
清华大学出版社;2010年.
[7]汪明虎.《ARM嵌入式Linux系统开发丛书》北京:
中国电力出版社;2008年
[8]孟祥莲.《嵌入式系统原理及应用教程》北京:
清华大学出版社;2010年.
[9]马维华.《嵌入式系统原理及应用》北京:
北京邮电大学出版社,2006年
[10]孙媛.《嵌入式系统基础及应用》北京:
机械工业出版社,2009年
七附录
程序代码
压力处理与转换子程序如下:
//存放读取到的当前压力值,未转换
StaticU16a-pres-now[8]={8*0}
//存放经精度计算后的实际压力值,高8位整数部分,低8位小数部分
staticU16b-pres-now[8]={8*0};
//存放8路转换后压力值,分别为百位,十位,个位,小数位
staticU8pres-convent-all[32]={32*0};
//-------------------------------
//压力处理与转换子程序
//----------------------------------
voidpres-change(void)
{
U8negtive=0x00; //存放数的符号,若为正=0;若为负,=0xff
U8j=0;
U8*pt=pres-convent-all;
U16*p1=a-pres-now;
U16*p3=b-pres-now;
U16pres=0;
for(j=0;j<8;j++)
{
negative=0x00;
pres=*p1;
//若压力为负值,进行相应处理
if((pres&0xf80)!
=0)
{
pres=(~pres)+1;//转为正的原码
negative=0xff;//同时置符号为0xff
}
//根据精度消除无关数据
switch(a-pres-prec)
{
case0x1f:
//精度为9位,则清除最低3位无效位
{
pres=pres&0xfff8;break;
}
case0x3f:
//精度为10位,则清除最低2位无效位
{
pres=pres&0xfffc;break;
}
case0x5f:
//精度为11位,则清除最低1位无效位
{
pres=pres&0xfffe;break;
}
case0x7f:
//精度为12位
{
break;
}
}
//换算成实际压力,并扩大10倍,去掉小数部分
pres=(U16)((float)(pres)*0.625);
//折算放入b-pres-now 数组中
//高8位放整数部分,低8位放小数部分,最高位放符号位
if(negtive==0xff)//若为负值
{
*p3=((pres/10)<<8)|(pres%10)|0x8000;
}
else
{
*p3=((pres/10)<<8)|(pres%10)&0x7fff;
}
if(negative==0xff)//若为负值
{(*pt++)=0x80;}
else
{
(*pt++)=pres/1000%10+0x30;
}
(*pt++)=pres/100%10+0x30;
(*pt++)=pres/10%10+0x30;
(*pt++)=pres%10+0x30;
p1++;
p3++;
}
//转换完成后清除读回的原始压力
p1=a-pres-now;
for(j=8;j>0;j--)
{
*p1++=0x0;
}