文档库 最新最全的文档下载
当前位置:文档库 › MCS51单片机机应用于温度控制器本科生毕业设计

MCS51单片机机应用于温度控制器本科生毕业设计

目录

1 前言 (3)

2 温度控制器的技术参数 (4)

3 系统设计方案的论证 (5)

3.1 方案比选 (5)

3.2 方案说明 (6)

4 控制系统设计 (7)

4.1 系统的工作原理 (7)

4.2 硬件电路设计 (7)

4.3 系统软件设计 (13)

5 调试,安装,运行 (24)

5.1 系统硬件调试 (24)

5.2 系统软件调试 (24)

6 小结 (25)

毕业论文(设计)原创性声明

本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。

作者签名:日期:

毕业论文(设计)授权使用说明

本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。

作者签名:指导教师签名:

日期:日期:

注意事项

1.设计(论文)的内容包括:

1)封面(按教务处制定的标准封面格式制作)

2)原创性声明

3)中文摘要(300字左右)、关键词

4)外文摘要、关键词

5)目次页(附件不统一编入)

6)论文主体部分:引言(或绪论)、正文、结论

7)参考文献

8)致谢

9)附录(对论文支持必要时)

2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。

4.文字、图表要求:

1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写

2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画

3)毕业论文须用A4单面打印,论文50页以上的双面打印

4)图表应绘制于无格子的页面上

5)软件工程类课题应有程序清单,并提供电子文档

5.装订顺序

1)设计(论文)

2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订

3)其它

MCS51单片机机应用于温度控制器

摘要:本文论述了采用单片机控制的智能温度控制器,使用AT89C4051单片机、ADS7844E AD转换芯片、HT1621B液晶显示驱动芯片及液晶显示器,实现温度的测量、输出控制及显示功能。

关键字:单片机、AD转换,液晶显示及其驱动

1 前言

模拟电路温度控制器存在电路复杂、功能简单和调试不方便的问题,随着电子技术的快速发展,超大规模集成电路的技术越来越成熟,制造成本越来越低,单片机在军事、工业、通讯、家用电器、智能仪表等领域的应用越来越广泛,使产品的功能、精度和质量大幅度提高;同时,电路的设计更简单、故障率低、可靠性高、成本低;特别是近几年来Flash技术的发展,使单片机系统的开发周期大大缩短,开发成本大幅降低,使用单片机控制的智能仪表是仪表领域发展的必然趋势。本文论述了采用ATMEL公司的AT89C4051单片机和美国Burr-Brown公司的ADS7844E模-数转换芯片以及HOLTEK公司的HT1621B液晶显示驱动芯片设计的LCD显示智能温度控制器。

本系统实现了模拟温度数据采集、模拟量到数字量转换、软件对温度信号进行非线性校正,单片机数据运算及逻辑处理、LCD显示、键盘处理及继电器输出控制功能。

本文主要介绍了智能温度控制器的功能和设计的过程。重点说明电路设计、软件设计。

2 温度控制器的技术参数

本系统采用ATMEL公司的AT89C4051单片机和美国Burr-Brown公司的ADS7844E模-数转换芯片以及HOLTEK公司的HT1621B液晶显示驱动芯片设计,实现了模拟温度数据采集、模拟量到数字量转换、单片机数据运算及逻辑处理、LCD 显示、键盘处理及继电器输出控制功能,主要技术参数见表1

表1 主要技术参数表

3 系统设计方案的论证

本章主要叙述温度控制器的设计方案。

3.1 方案比选

随着电子技术的发展,温度控制器的设计方案经历了模拟电路温度控制器、模拟量测量加数字显示、单片机温度控制器的发展过程;在单片机温度控制器的设计方案中,又发展出各种智能型的温度控制器方案,如:高AD转换的精度,PID 调节控制输出、PID + 模糊控制等。本次设计着重锻炼自己的动手能力,熟悉单片机的使用,具体提出如下设计方案:

方案一:采用8031单片机作为控制核心,以最普通的器件ADC0809作数模转换,以继电器作为控制输出。此方案简单可行,造价低廉,但由于8031没有片内ROM,需要扩展程序存储器,增加了电路的复杂性,并且由于0809是8位的数模转换电路,在温度测量范围很小时,测量精度还能满足要求,当测量温度范围稍宽时,测量的精度就不能实际应用的要求。

方案二:采用片内带Flash存储器MCS51系列单片机作为控制核心,采用12位数模转换电路,以继电器作为控制输出。由于采用了12位的ADC转换芯片,转换范围从0到4096,当温度范围要求为0-1000℃时,每一位表示约为0.25℃,考虑到ADC转换芯片的转换精度±1LSB及运算放大器的误差,测量精度理论上可到0.5℃,可以满足一般的控制要求。

方案三:目前许多单片机生产商推出了自带ADC转换,FLASH存储器、EEPROM 的产品,如美国Analog Devices公司AduC812内部带12位的ADC转换,如果采用AduC812单片机作为控制核心,则系统外围电路比较简单且能够达到控制精度要求,但是成本较高。

本系统采用方案二,温度控制器所需要的IO数量不多,程序量不是很大(不考虑PID调节控制输出),为了节省单片机的IO口,选用12位串行口数模芯片ADS7844E,单片机使用AT89C4051,片内程序存储器空间为4K,15条IO。

3.2 方案说明

系统中设计了一个EEPROM存储器来保存设置参数,目前市面上常用的EEPROM 用AT25010存储器可以节省IO端口。

显示器件常用的有LED数码管显示器件、LCD显示器件。LED数码管显示器件具有亮度大,寿命长等特点,但需要较大的驱动电流;LCD显示器件成本低、功耗小,但需要专用的驱动电路以及亮度低;本方案的显示器件采用6位字符液晶显示器,驱动芯片采用HOK公司的HT1621B。

4 控制系统设计

控制系统设计主要包括系统工作原理、系统硬件设计和系统软件设计。系统软件设计主要包括软件结构、各子程序流程及具体代码设计;下面分别介绍各部分的设计过程

4.1 系统的工作原理

系统功能框图如图1所示

系统的工作原理是:电桥将温度传感器Pt100的温度信号转换为与温度相关的电压信号,经过两级运算放大后进入ADC转换;CPU读取ADC转换结果,经过运算转换为显示的温度字符,控制LCD驱动器来显示温度值,另外,CPU将测量出的温度值与系统设定的温度值相比较,根据不同的控制模式来控制继电器的输出,系统中的按键用来设定系统工作参数,电源电路主要为各电路提供工作电源。

系统中需要保存的参数有:设定温度值、回程差值(防止温度到达设定值时输出振荡)、加热或制冷工作模式(0表示加热模式,1表示制冷工作模式)、温度测量范围、温度校正值、温度校正符号等。由于温度测量范围、温度校正值、温度校正符号用于系统调试校正,此参数不能由用户随便修改,所以在修改这些参数前必须先输入一个密码(默认为1234)后系统才显示这些参数,建议用户不要修改此类参数。

本系统采用了四个按键,功能分别为:加键、移位键、功能键、保存键。按下功能键可循环显示系统各项参数,通过加键和移位键组合可对各项参数进行修改,按下保存键后,CPU将修改后的参数写到EEPROM中,系统重新上电后CPU将调用EEPROM中的参数(如果不对数据进行保存时,系统重新上电后将调用以前设置的参数)。

4.2 硬件电路设计

温度控制器电路主要包括:CPU电路、温度信号调理电路、ADC转换电路、液

晶显示及驱动电路、电源电路及控制输出电路;

4.2.1 CPU电路

CPU电路主要是CPU、数据存储器及晶振电路。CPU采用美国ATMEL公司的MCS51系列单片机AT89C4051,管脚图如图2所示,它具有以下标准功能:4K字节FLASH 闪速存储器,128字节内部RAM,15个IO口,两个16位定时计数器,5个中断向量(两种优先级),一个全双工串行通信接口,内置一个精密模拟比较器,片内振荡器及时钟电路。AT89C4051的功能框图如图3所示。CPU的端口资源分配见表2:

表2:CPU的端口资源分配表

注:由于P1.0及P1.1内部不带上拉电阻,使用时在此两脚上需要接上拉电阻,电阻阻值按10K选取数据存储器采用美国ATMEL公司AT25010 EEPROM。AT25010通过SPI接口与CPU进行数据交换,端口连接见表1。

时钟采用12M晶体振荡器,负载电容按22p选取。

4.2.2温度信号调理电路

本设计温度传感器采用Pt100,温度信号由电桥电路输出后,经过两级放大后进入ADC转换。

1、Pt100传感器介绍

Pt100传感器是利用铂电阻的阻值随温度变化而变化、并呈一定函数关系的特性来进行测温,其温度阻值对应关系为:0℃≤t≤850℃时,Rt=R0(1+At+Bt2)式中,A=3.90802×10-3;B=-5.80×10-7;R0=100。

Pt100温度传感器的主要技术参数如下:测量范围:-200℃~+850℃;热响应时间<30s;允通电流≤5mA。另外,Pt100温度传感器还具有抗振动、稳定性好、准确度高、耐高压等优点。

2、电桥采集数据的电路图及原理

Pt100电桥电路如图4、图5所示。其中,R10﹑R11﹑R14﹑Rt组成电桥,R10=R11= 10R0, R14=R0。电桥采用TL431组成恒流源供电,为了避免流过Pt100传感器的电流过大使其发热进而导致非线性失真增大,取Im=1mA。

设流过R14的电流为I1,流过R t的电流为I2,由于恒流源的电流为1mA,所以有:

I1+I2 = 1; (1)

I1I2=(10R0+R t)11R0 (2)

R t=R0(1+At+Bt2) (3) A=3.90802×10-3;B=-5.80×10-7;R0=100

当温度较低时,I1I2≈1,所以有:

V i=I2R t-I1R0≈0.5(R t-R0) (4)

又因为△R= R t-R0 = R0(At+Bt2),所以:

V i≈0.5*R0(At+Bt2)≈0.5*R0*A*t =0.195*t (mV) (5)由公式(5)可知,温度较低时,Pt100传感器的线性度良好;当温度较高时,Pt100传感器的线性度变差,此时有

V i= 10R0(At+Bt2)(22+At+Bt2)(mV)(6)

软件校正采用最小二分法分段校正:将整个测量范围按每50℃为一段,共分为8段,求出每一段的校正函数分别为:(求解方法采用Excel中的SLOPE函数及

INTERCEPT函数)

0~50℃: T0 = 0.89*T – 0.10

50~100℃: T0 = 0.92*T – 1.44

100~150℃: T0 = 0.95*T – 4.28

150~200℃: T0 = 0.98*T – 8.80

200~250℃: T0 = 1.01*T – 15.11

250~300℃: T0 = 1.04*T – 23.45

300~350℃: T0 = 1.08*T – 34.16

350~400℃: T0 = 1.12*T – 47.65

温度的计算方法:T=ADC转换结果*量程4096,将T的值代入校正函数中,求出校正后的温度值T0。

3、误差分析

(1)Pt100传感器的非线性产生的误差

Pt100的温度函数为R t=R0(1+At+Bt2),由此可见Pt100的阻值与温度的函数不是线性关系,不考虑其它因素带来的误差,由于Pt100传感器的非线性,在0-400℃的范围内,可产生约12℃的误差,在实际测量中,用非线性校正程序可以减少由此带来的误差。

(2)AD转换器非线性带来的误差

在实际应用中会发现,对同一模拟输入信号Vi,经AD转换得出的数字量会有±1位的跳变,这是由AD转换器的判断误差造成的。AD转换器的一位跳变对应的电压值,即为该12位AD转换器的分辨率0.00122V=1.22mV,将会产生温度误差。

(3)AD转换器参考电压Vref带来的误差

在比较转换过程中,Vref的变化会对输出的二进制代码有影响。在模拟输入信号不变的情况下,若Vref变大,会导致输出的二进制代码变小;反之,则变大,从而导致了温度误差。

4、注意事项与结论

由上面的分析可得,为了提高温度测量的准确性, AD转换器的5V参考电源要稳定在mV级;在价格允许的情况下,Pt100传感器﹑AD转换器和运放的线性度要高。同时,利用软件矫正其误差,可以使测得温度的精度在±0.5℃。

4.2.3 ADC转换电路

本方案的ADC转换采用Burr-Brown公司的ADS7844E,它是推出的一种高性能、宽电压、低功耗的12bit串行模数转换器。它有8个模拟输入端,可用软件编程为8通道单端输入AD转换器或4通道差分输入AD转换器,其转换率高达200KHz,而线性误差和差分误差最大仅为±1LSB。ADS7844在电源电压为2.7V~5V之间均能正常工作,最大工作电流为1mA,进入低功耗状态后的耗电仅3μA。ADS7844通过串行接口与CPU进行通信,而且接口简单方便。ADS7844E的引脚排列如图6所示,引脚与其它电路的连接见表3。

ADS7844E的引脚功能:CH0~CH7:模拟输入端,当器件被设置为单端输入时,这些引脚可分别与信号地COM构成8通道单端输入AD转换器;当器件被设置为差分输入时,利用CH0~CH1、CH2~CH3、CH4~CH5和CH6~CH7可构成4通道差分输入AD转换器

COM:信号地

VREF:参考电压输入端,最大值为电源电压

CS:片选端,低电平有效,该脚为高电平时,其它数字接口线呈三态

DCLK:外部时钟输入端,在时钟作用下,CPU将控制字写入ADS7844E,并将转换结果从中读出

DIN:串行数据输入端,在片选有效时,控制字在DCLK上升沿被逐位锁入

ADS7844E

DOUT:串行数据输出端,在片选有效时,转换结果在DCLK的下降沿开始被逐位从ADS7844E移出

BUSY:“忙”信号输出端,在接收到控制字的第一位数据后变低,只有在转换结束且片选有效时,该脚才输出一个高脉冲

SHDN:电源关闭端,低电平有效。当SHDN为低电平时,ADS7844E进入低功耗状态

VCC,GND:分别为电源端和数字地。

表3: ADS7844E引脚连接表

4.2.4 液晶显示及驱动电路

HT1621B是128 点内存映象和多功能的LCD驱动器,HT1621B 的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统,用于连接主控制器和HT1621的管脚只有4 或5 条,HT1621 还有一个节电命令用于降低系统功耗。

HT1621B的引脚功能及与其它电路的连接见表4:

表4: HT1621B的引脚功能及与其它电路的连接表

4.2.5 电源电路

4.3 系统软件设计

4.3.1 软件结构设计

温控器软件主要包括主程序模块、定时器中断处理模块、LCD显示处理模块、ADC转换模块和键盘处理模块。定时器中断处理模块主要产生时间事件,其中200ms 事件用于读取键盘的健值,500ms为ADC转换事件。主程序模块循环判断系统是否有事件发生,当发生200ms事件时,调用键盘处理子程序、LCD显示刷新子程序。当发生500ms事件时,调用ADC转换子程序及LCD显示刷新子程序。主要模块调用关系如图6所示

4.3.2 系统程序流程图设计

1、主程序流程图

2、键盘处理流程

功能:显示相应页面以及修改系统参数

输入:键值

输出:修改显示缓冲器数据及系统参数

寄存器分配:寄存器组1,各子程序具体分配情况见子程序说明。

调用子程序:页面处理子程序(Pagehandle)、加键处程序(Uphandle)、保存数据子程序(Savehandle)、移位处理子程序(Shifthandle)

父函数:主程序

3、ADC转换处理流程

功能:启动ADC转换、读取ADC转换结果、进行温度校正、比较、继电器控制输出

输入:无

输出:温度值显示值、继电器控制输出

寄存器分配:寄存器组3,各子程序具体分配情况见子程序说明。

调用子程序:启动ADC转换子程序(Start_Adc)、读转换结果程序(ReadADC)、求平均值子程序(Average)、二进制温度转BCD码子程序(Bin_Temp_BCD)、温度校正子程序(TempAdjust)、温度比较子程序(TempCopmare)

父函数:主程序

4、定时器中断处理程序流程

功能:产生定时事件

输入:无

输出:时间事件

寄存器分配:寄存器组1。

调用子程序:读取键值子程序(Getkeyvalume)、定时器初始化子程序

父函数:无

4.3.3 系统程序设计

目前许多公司在生产单片机的同时,都会推出自己的编译系统,并且许多编译系统都会支持C语言、汇编语言或两种语言的混合编程;本系统采用汇编语言编程,使用Keil C51编译。由于程序的篇幅较长,下面主要介绍主程序及二进制温度转换为BCD温度值子程序,其它程序请查阅附录中的程序清单。

1、主程序清单

ORG 0000H ;复位入口

JMP PROGRAME_STAR ;程序开始

ORG 0003H ;外部中断0入口

RETI ;

ORG 000BH ;定时0中断入口

AJMP TIME0_INT ;

ORG 0013H ;外部中断1入口

RETI ;

ORG 001BH ;定时1中断入口

RETI ;

ORG 0023H ;串口中断入口

RETI ;

ORG 0060H ;程序起点

PROGRAME_STAR:

MOV SP , #STACK ;设置堆栈

MOV PSW , #(0 SHL 3) ;使用寄存器组0

MOV R0 , #10H ;清内存的开始地址

MOV R1 , #50H -1 ;设置清除内存计数

MOV A , #00H ;

MAIN0:

MOV R0 , A ;内存清零

INC R0 ;

DJNZ R1 , MAIN0 ;

ACALL DEVICE_INIT ;设备初始化

MOV IE ,#82H ;开中断

MAINLOOP:

ACALL WDRESET ;看门狗复位

MOV A , TIMEEVENT ; 200ms事件标志, 处理键盘事件

ANL A , #EVT_MS200 ; A和#EVT_MS200做与运算,取出200ms事件标志位 JZ MAIN1 ; 200ms事件标志位为0时跳到MAIN1

MOV A , #EVT_MS200 ;

CPL A ;

ANL TIMEEVENT , A ;清除200ms事件标志

MOV A , KEYOVER ;键盘处理完标志

JNZ MAIN3 ; ********************

MOV A , KEY_VALUE ;取键值

JZ MAIN3 ;键盘值为0时跳出**********

ACALL KEYHANDLE ;处理键盘事件

AJMP MAIN3 ; ***********************

MAIN1:

MOV A , TIMEEVENT ; 500ms事件标志处理ADC转换

ANL A , #EVT_MS500 ; A和#EVT_MS500做与运算,取出500ms事件标志位 JZ MAIN4 ; 500ms事件标志位为0时跳到MAIN4

MOV A , #EVT_MS500 ;

CPL A ;

ANL TIMEEVENT , A ;清除500ms事件标志

LCALL ADCCONVERT ;调用ADC转换子程序

MAIN3:

ACALL REFESHLCD ;刷新LCD

MAIN4:

SETB CSLCD ; LCD控制芯片片选信号拉高

SETB CSADC ;置位AD7844E 片选

SETB CSE2ROM ;置位AT25010 片选

AJMP MAINLOOP ;主循环

2、二进制温度转换为BCD温度值子程序

;二进制温度转换为BCD温度值子程序

;输出:无

;输入:无

;寄存器组: 第 3 组

; 温度值=ADC转换结果(BIN) * 量程值4096

BIN_TEMP_BCD:

MOV PSW , #(3 SHL 3) ; 使用寄存器组3

MOV R6 , RANGE ; 将BCD码量程值转换为二进制数 MOV R7 , RANGE+1 ;

LCALL BCDTOBIN ;

MOV R0 , #TEMP_VALUE ; 温度转换后的存储地址

MOV R6 , TEMP_BINL ; 取二进制温度低位

MOV R7 , TEMP_BINH ; 取二进制温度高位

LCALL MUL16 ; 调用16进制乘法

;以下程序根据第一次转换的结果查表取出校正函数

MOV A , TEMP_VALUE+1 ; 取二进制温度高位

ANL A , #0F0H ;

SWAP A ;

MOV R6 , A ;

MOV A , TEMP_VALUE+2 ; 取二进制温度高位

ANL A , #0F0H ;

SWAP A ;

MOV R7 , A ;

MOV A , TEMP_VALUE+2 ; 取二进制温度高位

ANL A , #0FH ;

SWAP A ;

ADD A , R6 ;

MOV R6 , A ;R6,R7分别存放二进制温度的低位和高位 LCALL BINTOBCD ; 调用二进制转换为BCD码

MOV A , R5 ; 去掉转换结果的千位

ANL A , #0FH ; TEMP_BCDH 存放结果的百位和十位

SWAP A ;

MOV R5 , A ;

MOV A , R4 ;

ANL A , #0F0H ;

SWAP A ;

ADD A , R5 ;

MOV R6 , A ;

MOV R7 , #00H ;

LCALL BCDTOBIN ;

MOV DPTR , #DIVCODE00 ; 查表地址

MOV A , R4 ; 偏移地址

MOVC A , A+DPTR ;

MOV R5 , A ;

RL A ; 偏移地址*2

MOV DPTR , #INTERCEPT0 ; 查表地址

MOVC A , A+DPTR ;

MOV BINRANGE+1 , A ; 校正值高位

INC DPTR ;

MOV A , R5 ;

RL A ;

MOVC A , A+DPTR ;

MOV BINRANGE , A ; 校正值低位

MOV DPTR , #DIVCODE00 ; 查表地址

MOV A , R4 ; 偏移地址

MOVC A , A+DPTR ;

MOV DPTR , #SLOPECODE ; 查表地址

MOVC A , A+DPTR ; 斜率值

;以下是将(ADC转换结果(BIN) * 量程值 ) *斜率

MOV R4 , A ;

MOV B , TEMP_VALUE ;

MUL AB ; TEMP_VALUE*斜率

MOV TEMP_VALUE , A ;

MOV R3 , B ; R3 乘积的高位暂存 CLR C ;

MOV A , R4 ;

MOV B , TEMP_VALUE+1 ;

MUL AB ; (TEMP_VALUE+1)*斜率 ADD A , R3 ;

MOV TEMP_VALUE+1 , A ;

MOV A , B ;

ADDC A , #00H ;

MOV R3 , A ;

CLR C ;

MOV A , R4 ;

MOV B , TEMP_VALUE+2 ;

MUL AB ; (TEMP_VALUE+2)*斜率 ADD A , R3 ;

MOV TEMP_VALUE+2 , A ;

MOV A , B ;

ADDC A , #00H ;

MOV R3 , A ;

相关文档
相关文档 最新文档