基于AT89C51SND1单片机的数据采集系统.docx
《基于AT89C51SND1单片机的数据采集系统.docx》由会员分享,可在线阅读,更多相关《基于AT89C51SND1单片机的数据采集系统.docx(23页珍藏版)》请在冰豆网上搜索。
![基于AT89C51SND1单片机的数据采集系统.docx](https://file1.bdocx.com/fileroot1/2023-1/22/50cae6fd-ef3e-42ba-b52d-75d49de3d501/50cae6fd-ef3e-42ba-b52d-75d49de3d5011.gif)
基于AT89C51SND1单片机的数据采集系统
基于AT89C51SND1单片机的数据采集系统
摘要
在实际的工作中需要对现场的温度、湿度、压力、流量等各种工艺参数随时进行采集、检测和监控,同时还要将采集到的数据及时传递给上位机,以实现对参数的随机查询,对信息的存储与处理,及时调整控制方案,提高生产效率和产品的质量。
为此我们利用AT89C51SND1单片机作为主控制器,设计了一个简单易行的数据采集系统。
我们的系统利用AT89C51SND1的强大功能来实现对模拟信号的采集和输出、显示。
通过其自带的AD转换采集来自实际生活中的各种模拟信号(比如:
温度、压力、还有连续的声音信号等),并且利用一个多路模拟开关CD4051可以实现多路数据的采集。
采集到的数据误差小于0.1%,一旦出现故障且具有报警功能。
在软件设计过程中,使用的编程工具是C语言,它可读性强,简单可靠。
关键词:
数据采集C语言单片机
Abstract
Intheactualwork,Thescenetemperature,thehumidity,thepressure,thecurrentcapacityandeachkindofcraftparameterneedtobecarriedongathering,examinatingandmonitoringwheneverneeded.Simultaneously,thegathereddataispromptlytransmittedtothepositionmachine,soastorealizestochasticallyinquirytotheparameter,processandmemorizewiththeinformation,adjustthecontrolplanpromptly,andenhancetheproductionefficiencyandtheproductquality.Thus,weusetheAT89C51SND1microprocessorcontrolunitasthehostcontrollertohavedesignedadesignasimpleandfeasibledataacquisitionsystem.Oursystemrealizesgatheringandtheoutput,thedisplayofthesimulatedsignalwithformidablefunctionoftheAT89C51SND1.Itgatherseachkindofsimulatedsignal(forinstance:
thetemperature,thepressure,thecontinualsoundsignalandsoon)ofthepracticallifewiththeADtransformation.ItalsocanrealizemultichanneldatagatheringwithamultichannelanalogswitchCD4051.Thegathereddataerrorissmallerthan0.1%,onceitappearsthebreaksoonmakesthepolicefunctionwork.Inthesoftwaredesignprocess,theprogrammingtoolistheClanguage.Ithasstronglyreadability,andit’ssimpleandreliable.
Keywords:
DataAcquisitionCLanguageMCU
引言
在工业生产过程中,为了保证系统的安全正常运行以及实时的监控与检测但在实际工作现场中要做到实时监测却很难,这要用到数据采集系统。
数据采集系统的主要功能是把检测到的来自生产过程中的各种模拟信号变成数字信号,并进行分析、处理、存储和显示。
在过去30到40年以来数据采集技术已经取得了很大的飞跃。
举例来说,在40年以前,在一个著名的学院实验室中,为追踪用青铜做的坩埚中的温度上升情况的装置是由热电偶、继电器、查询台、一捆纸和一支铅笔。
今天的大学学生很可能在PC机上自动处理和分析数据,有很多种可供你选择的方法去采集数据。
至于选择哪一种方法取决于多种因素,包括任务的复杂度、你所需要的速度和精度、你想要的证据资料等等。
无论是简单的还是复杂的,数据采集系统都能够运行并发挥它的作用。
随着技术的发展,通过电子设备,数据采集的已经得到简化和变得比较精确、多用途和可靠。
设备从简单的存储器发展到复杂的电脑系统。
数据采集产品像聚焦点一样为系统服务,和一系列产品一起,诸如传感器显示温度、水流、程度或者过程。
但数据采集系统最重要的部分还是控制器部分和数据采集部分。
为此,我们以AT89C51SND1C单片机作为主控制器设计了一种简单易行的数据采集系统。
1概述
1.1本课题研究的背景和意义
在实际工业生产,生产工作现场,往往为了生产安全等需要,要对工作参数如温度、电压、液位、声音等进行实时检测与监控,但由于工作现场条件差,数据动态性等原因,要做到实时监测往往很难。
为解决这一问题可以先将现场的工作参数进行实时采集,然后再通过数据通信方式将采集到的数据传送到远端的主控室。
这就要用到数据采集系统。
数据采集系统就是将模拟信号经AD转换后,进行信号处理,最后经DA转换器将数字信号转换为模拟信号输出。
数字采集系统的简单框图如下图图1-1所示。
图1-1数据采集简单框图
由单片机作为控制单元的数据采集系统的工作过程可以分为以下几个步骤:
数据采集是将被测量参数的信号转换为能够识别的信号并输入给单片机;数据处理是由单片机执行算法,得到与被测量相对应的数字信号;数据输出是将处理结果送到输出设备进行显示、存储等操作。
在生产实践和科学研究中,采集的数据往往都是大量的。
而从数据采集的角度来看,进行整个系统的全部数据采集需要教多的时间,会降低系统的实时性。
从这个系统而言,如何提高系统的可靠性是关键所在,所以必须在硬件设计、芯片选择和软件编程等方面综合考虑,以满足实际系统对系统可靠性、实时性的要求。
1.2本课题的任务和要求
通过学习单片机C51语言的基本知识,熟悉开发环境KeilC和和Flip使用,掌握AT89C51SND1C单片机的基本特性,设计基于AT89C51SND1C单片机的数据采集系统。
虽然我使用的单片机和8051系列可以兼容,但是他的相当强大的功能以及软件设计过程中要求使用的是C语言编程,使得在设计中要先立足对基础认识的学习和掌握,并且要对毕业设计的实验板JMBIE学习板有相当程度的掌握,这样也使设计工作更繁重。
不过这样对我以后的工作是一个锻炼。
在进行设计前要先对数据采集系统软件设计的开发环境进行了解。
1、数据采集。
在数据采集模块,主要采集直流信号,经过一个简单的滤波,如平均值滤波。
然后把采集的数值存储起来。
可以通过按键和通过串口把数据主动或由上位机通过命令索要把采集数据传递上去,AD采集部分采用AT89C51SND1C内部自带AD,但要采集多路数据,因此需要另增加一个多路模拟开关(CD4051)。
由于这部分采用CPU内部自带的AD,所以比较简单,定时采集,多次采集求一次平均,如采集8次平均得到一次的采集值,然后把采集的值放在数据存储器中保存起来。
2、液晶显示。
主要用来采集当前采集的数据,并且可以通过按键设定需要完成的功能,液晶显示模块选用的CM12232液晶显示屏。
这部分程序主要完成对数字和汉字的显示包括字库的编写。
3、键盘。
采用定时器实现,定时扫描键盘,发现有按键按下执行相应的键盘功能设定数据采集,并通过RS-232和USB完成通信。
4个功能键依次是确定键、返回键、加一键和移位键。
4、RS-232通信,完成与电脑的通信。
(可在完成数据采集的基础上选作)
1.3课题设计总体方案的确定
数据采集的主要功能是把检测到的来自生产过程中的各种模拟信号变成数字信号,并精心分析、处理、存储和显示。
该数据采集系统的总体设计包括以下几个部件,详见表1-1。
多路模拟开关
CD4051
单片机主要芯片:
AT89C51SND1C(含键盘和AD转换)
闪存:
扩展的FLASH闪存(K9D5608);
显示:
LCD显示(CM12232)
电源:
采用的是双电源驱动(电池驱动和MAC586);
通讯方式:
采用RS232通讯接口
表1-1数据采集系统部件表
在本设计方案中最重要的核心元件就是AT89C51SND1,该芯片兼有键盘和AD转换功能。
下面对这一芯片进行简单介绍。
方案中系统芯片AT89C51SND1自带AD转换模块,外加一个8路的模拟开关CD4051。
显然采用系统自带的AD转换模块给设计带来方便。
而且AT89C51SND1功能非常强大。
ATMEL公司生产的AT89C51SND1这款芯片是专门为MP3而设计的单片机芯片。
其主要特点是内部集成了MPEG2解码器和USB通讯接口,内含64k的内部程序存储器,支持在系统编辑ISP功能,通过USB或者串行口对芯片进行编程操作,内部数据存储器为2056字节。
它最高支持20MHz的工作频率,工作电压为3V,内部集成的MPEG2解码功能支持48,44.1,32,24,22.05及16赫兹的采样序列,可直接与DAC音频转换芯片连接,支持USB1.1协议全速引擎,并提供相应的键盘中断、IDE/ATA、TPI/MMC及ISP接口。
由此可见其功能十分强大。
通过这次毕业设计可以对这一芯片进行一定的了解,这一单片机芯片的典型应用主要是有4个方面。
(1)MP3播放器;
(2)PDA,照相机,MP3移动电话;(3)汽车多媒体MP3;(4)家庭多媒体MP3。
2数据采集系统的组成与基本原理
2.1数据采集系统的基本组成
该系统主要包括5个部分。
分别是数据采集模块、显示模块、键盘功能模块、串口通信模块和报警部分。
数据采集模块:
它主要包括多路模拟开关、AD转换、FLASH存储器和控制单元。
在该数据采集系统中选用的是多路开关是CD4051,转换部分采用的是AT89C51SND1内部自带的2路AD采集通道。
AT89C51SND1具有2路10位AD转换接口,基本上由通道选择、采样保持电路、逐次逼近逻辑、梯形电阻DAC转换器、比较器和控制逻辑等构成。
AD接口框图如图2-1所示:
图2-1、AD电路框图
AD转换接口具有AIN0、AIN1两个模拟电压输入引脚,这两个通道由ADCON寄存器的ADCS位来选择。
还有AREFP、AREFN两个参考电压输入引脚,其中AREFN负参考引脚内部和GND连接,所以AIN0和AIN1输入的电压是对地的。
AREFP正参考端电压Vref限定最大可转换的模拟电压值,也就是AD输入的模拟电压Vin的最大值,当Vin=Vref时AD转换的结果是10位二进制的最大值1023。
这样可以确保采集精度小于0.1%。
图中ADCCLOCK是AD转换电路的时钟,来自于单片机的外围电路时钟PERCLOCK。
在X1模式下,PERCLOCK是晶体振荡频率的2分频。
PERCLOCK经过2分频后,再按ADCLK寄存器指定的分频系数进行分频便得到ADCCLOCK。
因此可通过ADCLK寄存器来配置AD转换器的时钟,决定其转换时间,影响最大转换速率。
ADCLK寄存器的分频系数ADCD有效5位,取值范围0~31。
但如果ADCD为0,则和ADCD为32时效果相同。
多路模拟开关使用的是CD4051。
CD4051是微机控制系统中广泛使用的八选一模拟开关,具有双向传输性能。
直流供电电压电源为+5v到+15v,输入电压所能传送的数字信号电位变化范围为3到15v,模拟信号的峰峰值为15v。
其引脚、功能如图2-2所示。
图2.2CD4051引脚图
CD4051是由逻辑电平转化,二进制译码器及八个开关电路组成。
C、B、A为二进制控制输入端,改变C、B、A的数值(从000-111),二进制译码器可译出8种状态,并选出其中的一个通道,使输入与输出接通。
以上转换过程是在允许输入端控制下进行的,当INH=1时,通道全断开,到INH=0时,其中一个通道接通。
其真值表如表2-1所示。
改变IN/OUT和OUT/IN的接法可以完成“多到1”或“1到多”的转换。
输入状态
接通通道号
输入状态
接通通道号
INH
CBA
CD4051
INH
CBA
CD4051
0
000
0#
0
100
4#
0
001
1#
0
101
5#
0
010
2#
0
110
6#
0
011
3#
0
111
7#
表2-1CD4051真值表
键盘功能模块:
AT89C51SND1单片机具有键盘接口,包括4个键盘输入引脚,可接4个独立按键或者扩展矩阵键盘。
在扩展为矩阵键盘时还需要另外4个IO端口作扫描用,但只需在键盘中断产生后扫描一个循环。
键盘功能包括“加一键”、“移位键”、“设定键”和“确定键”共4个按键,分别对应单片机的4个键盘输入引脚。
键盘的引脚对应关系和电路原理图如图2-3和图2-4所示。
图2-3键盘电路
图2-4键盘接口电路框图
4个键盘输入引脚可以看作是4个独立的中断源,但他们共享一个中断向量。
IEN1.4位即EKB是键盘中断的总使能位,由于AT89C51SND1的中断向量比较多,所以中断使能寄存器是IEN0和IEN1两个,其中IEN0和普通51单片机的IE寄存器基本一致。
键盘接口有两个SFR:
键盘控制寄存器KBCON和键盘状态寄存器KBSTA。
KBCON的高4位KINL3:
0设置键盘输入引脚的有效检测电平,本系统设置低电平有效;低4位KINM3:
0是4个键盘输入引脚的独立屏蔽位,可以单独设定某个引脚是否为键盘输入,不作为键盘输入的引脚(通过KINMx屏蔽掉)还可以作为IO端口使用。
KBSTA的低4位KINF3:
0实际上是4个键盘中断源的中断标志位,当有输入引脚出现有效电平时,对应标志位置位。
键盘中断可以认为是边沿触发的外部中断,并且读取KBSTA寄存器时自动清除标志位。
单片机响应键盘中断后,在中断服务程序中读取KBSTA并判断是具体哪个按键引起的中断并作出相应动作。
LCD显示模块:
LCD液晶屏扩展模块。
本学习板配套的CM12232图形点阵液晶屏是接在扩展插座上的,占用P1.4~P1.7和P4口。
LCD扩展接线如图2-5所示。
图2-5LCD扩展模块接线图
LCD型号是CM12232兼容点阵图形STN液晶屏,是一个独立的模块。
其分辨率是水平122个点,垂直分两组共32个点,可以显示两行汉字或四行英文字母,也可以显示简单的图形。
12231型LCD模块包含两个驱动扫描芯片,分别工作于主、从状态。
每个芯片有独立的使能端,但其他控制信号并联。
每个芯片有61根列线和16根行线,通过主从芯片之间的时序控制,使得它们可以协作完成对122根列线和32根行线的扫描动作。
由于两个芯片的这种接口,在访问LCD的时候必须分别或同时将命令或数据写到指定芯片中。
比如,需要两个芯片都执行的控制命令,可以同时使能E1和E2;而写入显示数据时则必须分清所写字节是要写到哪个芯片,这由该字节数据所对应的显示点阵信息所在的区域决定。
而且,作为整个屏幕来说,我们认为从左到右应该为从0到121的象素坐标排列,但对于每个芯片而言都是从0到60的范围,也就是说驱动程序需要完成这样的转换。
另外还有串行通讯模块和报警功能模块。
这里不是本设计的重点不再做详细介绍。
2.2数据采集系统的工作原理
多路数据实时监控系统常用于自动化工业生产或大型设备(如激光器)中,经常需要对生产过程或运行状态的各种工作参数(如压力、温度、流量、电压、电流等)实时的巡回检测、监视并报警,以确保系统的稳定可靠性。
该系统主要是利用AT89C51SND1作为数据采集系统的主控制器,通过AD采集模块对外界的模拟信号进行采集和处理,通过键盘功能将采集到的数据显示在液晶模块CM12232上,对被采集的数据进行上限设置,一旦高于设定值将会报警。
AT89C51SND1是该数据采集系统中的核心部件,AT89C51SND1是ATMEL公司的基于8位C51核的单片机,与AT89C51等8051单片机兼容。
该芯片共80引脚,封装为TQFP80,就是四边各20引脚的贴片封装。
AT89C51SND1内部主要资源见图2-6:
图2-6AT89C51SND1内部架构框图
AT89C51SND1的引脚使用情况分类说明如下:
1)键盘中断输入引脚KIN0~KIN3,和P1.0~P1.3复用。
外接4个键盘作为数据采集控制端口。
键盘电路见图2-3
2)时钟电路FILT、OSCX1和OSCX2。
接在FILT引脚的阻容网络是单片机内部PLL锁相环的滤波电路,以给USB和MP3部件提供更高的频率。
OSCX1和OSC2外接晶体振荡器,为系统提供基本的20M时钟。
3)ADC电路引脚AREFP、AREFN、AIN0和AIN1。
这些引脚主要用在外接输入模拟信号,用一个5芯插排引出,以供用户使用。
如图2-6所示,其中AREFN已经接地。
2-6ADC部分引脚图
2.3数据采集系统的硬件框图
该数据采集系统的硬件框图如下图2-7所示,硬件原理图详见附录B。
图2-7系统原理框图
3数据采集系统的软件设计
3.1主程序流程图及说明
下面介绍该数据采集系统的软件设计。
并对设计进行说明。
主流程图如图3-1所示:
图3-1数据采集主程序流程图
说明:
主程序流程图主要用来实现整个程序的初始化部分,及部分功能程序的扫描完成,如完成对键盘按键有无按下的扫描、串口通信接收数据的扫描、串口发送数据标志的扫描。
以下简单介绍各部分功能程序的实现思想及部分子程序流程图。
1、键盘扫描在定时器0中使用定时10ms扫描,如果发现有按键按下,将此按键编码存储起来,在接下来的一次扫描如果得到的编码与上次一样,说明的却有按键按下,如果不一样或扫描不到按键按下,就认为是键盘抖动,无需处理,将键码扔掉。
如果发现有按键按下,在主循环中扫描有按键按下执行键盘功能程序。
图3-2键盘中断子程序流程图
2、AD转换。
在数据采集系统中,AD转换是其中重要的一个部分。
因为只有通过它才能对实际数据进行转换,转换成数字信号后,才能被计算机识别。
下面就是AD转换部分的说明和介绍。
AD转换电路用到的寄存器有ADCON、ADCLK、ADDH和ADDL共4个。
ADCON控制寄存器的ADEN位使能AD转换电路,而ADSST位则启动一次转换过程。
编程AD转换接口的大致流程是:
1)配置ADCLK寄存器的ADCD分频系数值,MP3学习板晶振为20M,ADCD值不能太小否则转换结果容易出错。
2)置位ADCON寄存器的ADEN位使能AD转换电路并等待几个微秒的延迟时间;由ADCS位选择通道,ADCS=0为通道1,AIN1有效,反之ADCS=1则为通道0,AIN0有效;置位ADSST位,启动转换过程。
3)AD转换结束后ADCON寄存器的ADEOC标志位由硬件置位,表示转换结果可读。
ADEOC标志位必须由软件清零。
如果中断使能寄存器IEN1的EADC位置位(允许ADC中断),ADEOC标志位可以产生中断。
当然,程序中也可以查询ADEOC标志位来判断转换是否结束,如果ADEOC置位则可以读取保存在寄存器ADDH和ADDL的转换结果。
ADDH是转换结果的高8位,ADDL的低2位是转换结果的最低2位。
查询到ADEOC置位后必须由软件将其清零。
编写一个配置,使能AD转换接口的程序,循环连续启动AD转换并显示结果的程序。
这部分代码参考及流程图如下:
ADCLK=0x0f;//设置ADC的时钟分频系数
ADCON|=ADEN;//使能ADC
for(i=0;i<5;i++);
ADCON|=ADCS;//选择通道0
//ADCON&=~ADCS;//选择通道1
while
(1)
{
//ADCON|=ADIDL;//转换期间挂起CPU核
ADCON|=ADSST;//启动转换
while(!
(ADCON&ADEOC));//等待转换结束
ADCON&=~ADEOC;//软件清除结束标志
adc_value=ADDH;
printu("\r");//清除显示行内容并回车
printuf("A/D=%d\r",adc_value);//显示转换结果并回车
(adc_value>128)?
(LED=0):
(LED=1);//如果大于128点亮LED
delay();//延时控制采集频率
}
在程序中从串口显示字符串以‘\r’回车符结束,而不是换行符‘\n’,这样可以看到在同一位置显示数据的效果。
为了取得好的显示效果,采集频率不要太快,以免超级终端显示闪烁。
另外,如果AD转换结果大于128将点亮LED,反之熄灭。
注意,AD转换接口的有效结果只有8位,也就是说只需读取ADDH即可,这样程序也方便处理和显示。
ADCON寄存器是不可位寻址的,所以不能直接置位或清零ADSST等位。
程序中都是通过位运算完成对某一位的改变的。
首先按照ADCON寄存器的位说明来定义各位名称的宏:
#defineADIDL0x40
#defineADEN0x20
#defineADEOC0x10
#defineADSST0x08
#defineADCS0x01
这样的宏定义实际上指明了各位名称对应的位掩码,例如ADEN定义成0x20是因为ADEN是ADCON寄存器的第5位,该位掩码是00100000b即0x20。
有了这样的宏定义,我们要置位ADEN位就可以用ADCON|=ADEN;来完成;而清除ADEOC位可以用ADCON&=~ADEOC;来完成。
许多类似的程序都可以这样实现对不可位寻址寄存器某位的置位或清零。
图3-3AD转换流程图
3、定时器中断
定时器中断主要用来工作状态指示,报警指示和定时启动AD转换,其程序流程图如下:
图3-4T0定时中断子程序流程图
3.2初始化显示子程序的编程
在该数据采集系统中,显示芯片用的是CM12232,前面已对该芯片作过介绍,这里不在进行描述,只对要显示的功能进行说明。
开机进行初始化操作,显示液晶屏开机显示“姓名-学号”如“魏方合-32”。
在显示数据之前首先要做的是显示初始化,参考代码如下:
voidLCD_init()
{unsignedchari,j;
SendCommand(LCDCOMD_DISOFF);
SendCommand(LCDCOMD_STATICOFF);
SendCommand(LCDCOMD_DUTY32);//必须指定32位显示