基于ARM的温湿度采集系统.docx
《基于ARM的温湿度采集系统.docx》由会员分享,可在线阅读,更多相关《基于ARM的温湿度采集系统.docx(16页珍藏版)》请在冰豆网上搜索。
基于ARM的温湿度采集系统
编号22
期末大作业
题目:
基于ARM的温湿度采集系统
物联网工程学院计算机科学与技术专业
学号0304100222
学生姓名仲其龙
指导教师陈志国
二〇一三年五月
摘要
课题是基于S3C44B0xARM微处理器为核心,采用LCD液晶显示,设计空气中的温温度和湿度数据采集显示系统。
设计的过程主要包括硬件设计和软件设计,其中软件设计为C语言设计。
系统的主要功能是从空气中采集数据,通过A/D转换器,转换为数字信号,并通过LCD液晶显示屏显示。
实现了智能化的温度数据采集、传输、处理与显示功能。
关键词:
ARM;S3C44B0x;嵌入式系统;数据采集
第1章概述
1.1实验目的及要求
目前嵌入式系统的研究和应用中,ARM芯片的使用越来越广泛。
本课程的目的是了解嵌入式系统基础理论的前提下,掌握一些常用的ARM处理器相关的汇编语言和C语言程序设计方法,熟悉基于S3C44B0X芯片的硬件接口设计方法,学会使用ARM集成开发环境,从而了解嵌入式系统的软硬件设计过程,为今后从事相关领域的应用和研究打好基础。
通过大作业期望可以实现如下目的:
一、掌握一种ARM的开发工具使用方法;
二、掌握S3C44B0XARM处理器的原理和接口设计方法;
三、掌握ARM的C语言和汇编语言编程方法;
四、培养选用参考书、查阅技术手册及相关参考文献的能力;
五、培养独立思考、分析问题和解决问题的能力;
六、培养严肃认真的学习风气和良好的沟通协作能力。
1.2实验内容
题目:
基于ARM的温湿度显示系统
具体要求:
1.以S3C44B0X的ARM处理器为核心,选择合适的元器件,设计一个空气中的温度和湿度的显示系统;
2.温度传感器和湿度传感器的类型不限,要求温度测量范围为-20℃~+60℃,湿度测量范围为10%~90%;
3.温度和湿度的显示,可以采用八段数码管或LCD液晶屏的形式;
4.要求给出S3C44B0X和主要装置的硬件连接电路图(原理图);
5.要求编写相关的温湿度采集和显示程序,并给出合理的程序注释。
第2章设计原理
2.1硬件系统总体设计
在本系统的设计过程中,根据嵌入式系统的基本设计思想,系统采用了模块化的设计方法;并且根据系统的功能要求和技术指标,系统遵循自上而下、由大到小、由粗到细的设计思想;按照系统的功能层次,在设计中把硬件和软件分成若干功能模块分别设计和调试,然后全部连接起来统调。
本设计的基于ARM的嵌入式数据采集和显示装置的原理框图如图1所示。
由图可见,本系统采用“电源部分+ARM核心控制模块+温度采集模块”实现所需功能。
下面分别对各部分的工作原理做简要的说明:
为了实现系统所要求的功能和指标,并考虑到系统的可扩展性和延伸性,本系统采用主从CPU协同工作,实现了数据的实时采集、传输与显示,具有处理速度快、精度高、人机交互界面友好、稳定性高、扩展性好等优点。
2.2LCD液晶显示设计
2.2.1S3C44B0XLCD控制器介绍
S3C44B0X处理器集成LCD控制器,支持4位单扫描、4位双扫描和8位单扫描工作方式。
处理器使用内部RAM区作为显示缓存,并支持屏幕水平和垂直滚动显示。
数据的传送采用DMA(直接内存访问)方式,以达到最小的延迟。
根据实际硬件水平和垂直像素点数、传送数据位数、时间线和帧速率方式等进行编程以支持多种类型的液晶屏。
可以支持的液晶类型有:
-单色液晶
-4级或16级灰度屏(基于时间抖动算法或帧速率控制--FRC)
-256色彩色液晶(STN液晶)
2.2.2显示控制
LCD控制器主要提供液晶屏显示数据的传送、时钟和各种信号的产生与控制功能。
S3C44B0X处理器的LCD控制器主要部分框图如图2所示:
2.2.3电路设计
进行液晶屏控制电路设计时必须提供电源驱动、偏压驱动以及LCD显示控制器。
由于S3C44B0X处理器本身自带LCD控制器,而且可以驱动实验板所选用的液晶屏,所以控制电路的设计可以省去显示控制电路,只需进行电源驱动和偏压驱动的电路设计即可。
图3液晶显示电路
2.3A/D转换设计
2.3.1采样保持接口
在S3C44B0X中A/D模块有8个模拟输入通道,通道的切换可以由内部的定时器完成。
如果要进行8个通道连续变化的信号的转换,还必须在8个通道全部加采样保持器,采样保持的接口电路如下图。
模拟输入信号为需要转换的信号,驱动控制信号可以通过编程利用ARM里面的timer产生,也可以通过I/O口来控制,输出信号直接接到A/D模块中的输入通道。
图4采样保持接口
2.3.2分压电路
分压电路比较简单,为了保证电压转换时是稳定的,可以直接调节可变电阻得到稳定的电压值。
图5分压电路
2.4电源电路设计
本系统的电源电路由两部分组成:
系统总电源电路和RAM核心模块电源电路。
如图:
+12V恒定直流电源经电容滤波,分别进入7809和7805稳压,得到+9V和+5V的稳定电压输出后分别供给ARM核心控制模块和其余电路部分使用。
图中IN4148是为了防止输出端并接高于本稳压模块的输出电压而烧坏7809和7805而特别设计,达到了可靠性电源设计目的。
另外,由于系统正常工作电流较大,因此使用时均应在7809和7805上加散热片散热。
由图可见,系统采用双电源供电,提供了系统正常工作所需的电源电压。
另外,由于考虑到便携目的,本系统采用+12V铅蓄电池提供系统所需的恒定直流电源。
图6电源电路
2.5温度采集电路设计
温度采集模块电路如图。
考虑到系统成本因素,此处采用AT89S52单片机作为模块的协控制器。
对于温度传感器的选用DS18B20,因为DS18B20是Dallas公司最新单总线数字温度传感器,该传感器集温度变换、A/D转换于同一芯片,输出直接为数字信号,大大提高了电路的效率。
由于现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,且提高了CPU的效率。
图4中AT89S52单片机的P0口与8路温度传感器相连,用于采集温度数据;另外,模块提供RS-232串行口与RAM核心控制模块通信,达到数据传输的目的。
图7温度采集电路
第3章设计步骤
3.1软件设计
本温度数据采集与显示装置的主体由S3C44B0x核心控制模块和温度数据采集模块构
成,所以系统软件也是围绕这两个模块来编写的。
而又由于系统采用了S3C44Box和AT89S52两个CPU协同工作,所以软件的编写需要对这两个CPU分别编写,以实现所要求的功能。
由该流程图可看出,刚上电时,S3C44B0x要先进行ARM内部的初始化,以使ARM进入相应的状态和模式;然后初始化硬件装置,以使硬件系统可以正常支持温度数据采集;接着通信初始化,以确定温度采集模块与ARM核心控制模块连接正常,并通过UART复位温度数据采集模块,确保其进入正常温度数据采集状态;然后初始化LCD显示和键盘,在LCD上显示相应的菜单列表,供用户通过键盘选择操作;至此,系统初始化完成,并进入正常主程序循环状态。
在正常主程序循环状态中,首先扫描键盘,以快速的响应用户的按键操作;若没有键值按下,则ARM立即进行数据的采集、处理与显示,以实现实时数据采集与显示等功能。
3.2关键代码
LCD液晶屏初始化:
voidlcd_init(void)
{
rDITHMODE=0x12210;
rDP1_2=0xa5a5;
rDP4_7=0xba5da65;
rDP3_5=0xa5a5f;
rDP2_3=0xd6b;
rDP5_7=0xeb7b5ed;
rDP3_4=0x7dbe;
rDP4_5=0x7ebdf;
rDP6_7=0x7fdfbfe;
//disable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,
rLCDCON1=(0x0)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);
//LINEBLANK=10(withoutanycalculation)
rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21);
rLCDCON3=0;
//256-color,LCDBANK,LCDBASEU
rLCDSADDR1=(0x3<<27)|(((unsignedint)g_unLcdActiveBuffer>>22)<<21)|M5D((unsignedint)g_unLcdActiveBuffer>>1);
rLCDSADDR2=M5D((((unsignedint)g_unLcdActiveBuffer+(SCR_XSIZE*LCD_YSIZE))>>1))|(MVAL<<21);、
rLCDSADDR3=(LCD_XSIZE/2)|(((SCR_XSIZE-LCD_XSIZE)/2)<<9);
//Thefollowingvaluehastobechangedforbetterdisplay.
rREDLUT=0xfdb96420;//11111101101110010110010000100000
rGREENLUT=0xfdb96420;//11111101101110010110010000100000
rBLUELUT=0xfb40;//1111101101000000
rLCDCON1=(0x1)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);
rPDATE=rPDATE&0x0e;
lcd_clr();
}
LCD显示温度湿度代码:
//------------------------------------------------------
//显示温度湿度
//------------------------------------------------------
voidword_view320x240x256(UINT8T*pBuffer)
{
UINT32Ti,j;
UINT32T*pView=(UINT32T*)g_unLcdActiveBuffer;
for(i=0;i{
*pView=((*pBuffer)<<24)+((*(pBuffer+1))<<16)+
((*(pBuffer+2))<<8)+(*(pBuffer+3));
pView++;
pBuffer+=4;
}
}
相应温度处理与转换子程序:
//存放读取到的当前温度值,未转换
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位无效位
{
temp=temp&0xfffc;
break;
}
case0x5f:
//精度为11位,则清除最低1位无效位
{
temp=temp&0xfffe;
break;
}
case0x7f:
//精度为12位
{
break;
}
}
//换算成实际温度,并扩大10倍,去掉小数部分
temp=(U16)((float)(temp)*0.625);
//折算放入b-temp-now数组中
//高8位放整数部分,低8位放小数部分,最高位放符号位
if(negtive==0xff)//若为负值
{
*p3=((temp/10)<<8)|(temp%10)|0x8000;
}
else
{
*p3=((temp/10)<<8)|(temp%10)&0x7fff;
}
if(negtive==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;
}
}
第4章实验结果及结果分析
4.1实验结果
工作模式
显示
范围
采集湿度
显示湿度
10%~90%
采集温度
显示温度
-20℃~+60℃
实验结果表
4.2实验结果分析
系统运行稳定,由于传感器灵敏度问题,采集的数据与实际的数据有一定的差距。
去除误差,系统采集基本正确。
第5章小结
如今嵌入式已经渗透到各个行业当中,与我们的生活息息相关,学习嵌入式已经成为计算机专业人员必不可少的一个过程。
经过一个学期的嵌入式学习,对嵌入式领域有了一个大体的概念,了解到嵌入式行业的ARM芯片的优秀的设计工艺,以及整个嵌入式的开发过程。
此次大作业,正是对一个学期学习的检测,是将理论知识应用于实践的一次考察,对自身的学习水平有一个大致的了解。
同时,加深加固对知识的掌握与理解。
此次大作业,感觉到如果真正的能够理解知识,就必须将知识应用实践。
在整个设计的过程中,从硬件的设计到软件的设计,涉及的知识包括S3C44B0X、C语言程序设计、电路设计、调试等,可见计算机专业人员,必须有一个很广的知识面,对各个领域都有一定的涉及,这便是平时一个学习的积累。
可见,学习积累对于计算机专业人员的重要性。
另一个方面,在设计的过程中,基础知识很重要,基础不牢,设计的过程很艰难。
所以。
今后要注意自身的学习,打牢基础。
参考文献
[1]马维华.嵌入式系统原理及应用[B].北京:
北京邮电出版社,2010.
[2]基于ARM的嵌入式温度数据采集系统与LCD显示.
[3]EduKit3ARM7_UserGuide_V3.0_cn.