炉温控制系统报告(1)_第1页
炉温控制系统报告(1)_第2页
炉温控制系统报告(1)_第3页
炉温控制系统报告(1)_第4页
炉温控制系统报告(1)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机的水温控制系统目录摘要 3第一章 前言 31.1 课题背景和意义 31.2 设计内容概述31.3 报告概述5第二章 课题设计要求 2.1 课题要求62.2 原件清单6第三章 系统方案设计73.1 系统的设计要求 73.2 系统的控制部分 73.3 系统的控制方式 7第四章 系统硬件电路设计 84.1 STC12C5A60S2最小系统84.2 DS18B20传感器电路 94.3 矩阵键盘 104.4 数码管显示模块 114.5 蜂鸣器报警电路 12第五章 系统测试方法和结果 13第六章 总结 13附录A系统程序代码【摘要】温度是工业控制对象主要的参数之一,如何准备而稳定的控制恒温在一些

2、领域是十分重要的,由于受到被控对象的特性的影响,使得控制系统难以被控制,因而设计一个高性能的温度控制系统是非常有价值的。本系统采用STC89C52单片机为控制单元,以PID控制算法为控制方法并用LABVIEW设计上位机实时监测温度。硬件电路包括矩阵键盘、1602液晶显示、蜂鸣器报警电路等。该系统经过试验证明可以准确控制水温,误差在+-1,并可设计所需的恒温。【关键字】单片机STC89C52、PID、恒温第一章 前言1.1 课题背景和意义 在现代化的工业生产中,电流、电压、温度、流量和流速都是常用的主要控制参数。例如在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都

3、需要对各类加热炉、锅炉进行恒温控制。采用单片机进行控制有控制方便、灵活性强、电路简单等诸多优点。目前温度控制系统在各行各业虽然已经应用的相当广泛,但从国内生产的温度控制器来讲,总体水平仍然不高。成熟产品主要以PID控制器为主,随着嵌入式技术的快速发展及在各行各业的广泛应用,人们对电子产品小型化和智能化的要求越来越高,作为高新技术之一的单片机以其体积小、价格低、可靠性高、应用范围广和控制的灵活性等诸多优势得到越来越广泛的应用。1.2设计内容概述本次计算机控制课程设计是应用计算机的实时监控和温度测量技术,采用单片机、温度检测电路、温度控制电路等,实现电阻炉炉温的实时监控。本次设计使用的STC12C

4、5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。本系列单片机有丰富的内部资源,极大地扩展了8051系列单片机的用途:1.增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机);3.工

5、作频率范围:0 - 35MHz,相当于普通8051的 0420MHz;4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节;5.片上集成1280字节RAM;6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,

6、数秒即可完成一片;8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM);9. 看门狗;10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%;12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz15.5MHz,3.3V单

7、片机为:8MHz12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准;13.共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波特率发生器 再加上2路PCA模块可再实现2个16位定时器;14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块, Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4

8、, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器设置到P4.3);16. PWM(2路)/PCA(可编程计数器阵列,2路):也可用来当2路D/A使用也可用来再实现2个定时器也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);17.A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口

9、,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3);20.工作温度范围:-40 - +85(工业级) / 0 - 75(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595(均可级联)来扩展I/O口, 还可用A/D做按键扫描来节省I/O口或用双CPU,三线通信,还多了串口。1.3报告概述这份技术报告中,详尽地介绍了本系统的整体结构、硬件电路、软件控制算法、调试方法等,并附有单片机程序和详细的操作方法。本文主要介绍基于STC12C5A60S2单片机的炉温

10、控制设计流程,介绍了炉温控制方案以及各个主要模块的工作原理和设计思路。本文并涉及温度传感器系统、继电器系统、显示系统、输入系统的设计。由于系统的复杂性和硬件使用要求以及人力、时间等方面的制约,考虑到系统的实时性和运算能力,系统并没有采用复杂的处理算法和控制算法,一切以实用为主。对于温度控制算法还有待进一步的研究和改进。同时,在电路保护方面的设计有待进一步地学习和实践。第二章 课题设计要求2.1课题要求用单片机及相应的组成部件组成电阻炉温的自动控制系统,要求测温范围0100,使其控制系统控制的温度保温值的变化范围为3060。要求:(1)完成电阻炉温度控制系统设计,包括硬件电路设计和软件程序设计;

11、(2)能够显示控温时的实际炉温和恒温时间;(3)对其主电路和控制电路设计相应的保护电路,使其安全可靠地工作。2.2元器件清单元件名称数量电热杯1个SL1型51单片机综合试验箱1个DS18B20温度传感器1片STC12C5A60S2单片机1片USB下载线1条单线固态继电器1个导线若干另有剪刀、镊子等工具表2.1 元器件表第三章 系统方案设计3.1 系统的设计要求 应用计算机的实时监控和温度测量技术,采用单片机、温度检测电路、温度控制电路等,实现电阻炉炉温的实时监控。要求及技术指标:用单片机及相应的组成部件组成电阻炉温的自动控制系统,要求测温范围0100,使其控制系统控制的温度保温值的变化范围为3

12、060要求:(1) 完成电阻炉温度控制系统设计,包括硬件电路设计和软件程序设计(2) 能够显示控温时的实际炉温和恒温时间(3) 对其主电路和控制电路设计相应的保护电路,使其安全可靠地工作3.2 系统的控制部分水温控制系统以STC12C5A60S2单片机为核心,其总体的结构图:STC12C5A60S2单片机DS18B20矩阵键盘LED显示蜂鸣器继电器单片机通过温度传感器DS18B20采集环境温度,根据矩阵键盘输入的恒温温度控制继电器的通断,并用LED数码管显示恒温温度和实时温度,如果实时温度超过恒温温度,蜂鸣器将会报警。3.3 系统的控制方式本系统采用PID控制算法实现对温度的闭环控制比例,积分

13、,微分(PID)是建立在经典控制理论基础上的一种控制策略。PID控制器作为最早实用化的控制器,已经有五十多年的历史,现在仍然是最广泛的工业控制器。PID控制器最大的特点是简单易懂,使用中不需要精确的系统模型等先决条件,因而成为应用最广泛的控制器。本系统采用了数字PID式中:k 采样信号,k=0,1,2,uk 第k 次采样时刻的计算机输出值ek 第k 次采样时刻输入的偏差值ek1 第k-1 次采样时刻输入的偏差值KI 积分系数(积分时间TI即为累积多少次/个T)KD 微分系数u0 开始进行PID 控制时的原始初值(应为前一次的给定值)如果采样周期取得足够小,则以上近似计算可获得足够精确的结果,离

14、散控制过程与连续控制过程十分接近。第四章 系统硬件电路设计4.1 STC12C5A60S2最小系统4.2 DS18B20传感器电路单线结构,只需一根信号线和CPU相连,不需要外部元件,直接输出串行数据,可不需要外部电源,直接通过信号线供电,电源电压范围为3.3V5V,测温精度高,测温范围为:一55+125,在-10+85范围内,精度为±O.5,测温分辨率高,当选用12位转换位数时,温度分辨率可达00625,数字量的转换精度及转换时间可通过简单的编程来控制:9位精度的转换时间为9375 ms:10位精度的转换时间187.5ms:12位精度的转换时间750ms,具有非易失性上、下限报警设

15、定的功能,用户可方便地通过编程修改上、下限的数值,可通过报警搜索命令识别哪片DS18820采集的温度超越上、下限。4.3 矩阵键盘矩阵键盘共有十六个键,用了其中的十二个键0-9、A、B键,按A键表示设置开始,然后按数字键输入恒温温度,最后按B键确定,此矩阵键盘运用了反转法4.4数码管显示模块数码管的显示原理不论是共阴还是共阳,其基本原理是一样的,都是靠点亮内部的LED来发光。一位数码管的引脚是十个,显示一个8字需要7个小段,另外还有一个小数点。1. 数码管内部原理图实际实验时,为了保证编程的方便和通常将数码管的数字所对应的八位数字记录在数组中,程序中直接使用查表的方法,可以提高程序的效率,也使

16、程序的编写更加简单方便。符号编码符号编码00xC080x8010xF990x9020xA4A0x8830xB0B0xC740x99C0xC650x92D0xA160x82E0x8670xF8F0x8E我们实验箱中的LED数码管是四位数码管,因此为了控制方便,四个数码管的“段选端”是连在一起的,他们的GND或VCC端作为“位选端”来输入控制信号,这样单片机就可以通过程序来控制显示的字符。下图是实验箱开发板中的数码管电路图:2实验箱数码管电路4.5 蜂鸣器报警电路当输入端给高电平时,9014导通,这样蜂鸣器中将会有电流,蜂鸣器将会报警。第五章 系统测试方法和结果通过矩阵键盘输入恒温温度为45,水温

17、从室温开始升,上位机上的温度和1602液晶会显示实时温度,待温度升到43时,通过单片机控制继电器的通断,这样将不再加温,但是水壶的加热器仍然是很热的,通过余温加热,一旦超过定温度,蜂鸣器将会报警,符合我们的设计要求。第六章 总结本次课程设计的题目为水度控制系统,是应用非常广泛的温度控制器,在实践中我们运用了单片机、传感器、电子电路等各方面的知识,实现了可以较好的控制水温的效果,锻炼了我们的动手能力。在调试系统的过程中会用到很多的问题,有些问题是不细心而导致的,有些错误时致命的,而且很不容易发现,所以在实践的过程中一定要细心。附附录A 系统程序代码DS18B20通信程序#define uchar

18、 unsigned char#define DELAY_TIME1 8sbit DQ=P30; /改成P30void ds18b20_delay(int time)/延时时间为(time * 6 us)int i,s,temp;temp=time;for(i=0;i<DELAY_TIME1;i+)s=temp;while(s>0)s-;/*18B20复位函数*/void Init_DS18B20(void)unsigned char x=1,j;DQ=1;/先将数据口拉高for(j=0;j<DELAY_TIME1;j+)_nop_();_nop_();_nop_();/延时大

19、约2uswhile(x) /进行判断,当数据口返回一个0时,跳出循环。初始化成功DQ=0; /拉低ds18b20_delay(80);/延时大约850us,晶振为11.0592DQ=1;/拉高ds18b20_delay(8);/延时50usif(DQ=1) /设置判断条件,看ds1820的返回值,0则跳出while循环 x=1;elsex=0;ds18b20_delay(40);/延时500us/*18B20写命令函数*/void WriteOneChar(uchar val)uchar i,j;for (i = 8; i > 0; i-) /定义 8 bit,写 8 bitDQ = 1

20、;for(j=0;j<DELAY_TIME1;j+)_nop_();_nop_();DQ = 0;for(j=0;j<DELAY_TIME1;j+)_nop_();_nop_();_nop_();_nop_();_nop_();/5usDQ = val & 0x01; /最低位移出,并写入总线ds18b20_delay(6); /66usval = val >> 1; /右移一位,倒数第二位变为最低位DQ = 1;ds18b20_delay(1); /高电平维持11us,写结束/*18B20读1个字节函数*/uchar ReadOneChar(void)ucha

21、r i,j;uchar value = 0;for (i = 8; i > 0; i-)DQ = 1;for(j=0;j<DELAY_TIME1;j+)_nop_();_nop_();value >>= 1; /右移一位DQ = 0;for(j=0;j<DELAY_TIME1;j+)_nop_();_nop_();_nop_();_nop_(); /4usDQ = 1;for(j=0;j<DELAY_TIME1;j+)_nop_();_nop_();_nop_();_nop_(); /4us ,读时隙if (DQ)value |= 0x80; /DQ=1,则

22、写入为 10000000ds18b20_delay(6); /66usDQ = 1;return(value);float ReadTemperature(void)uchar n = 0; /存储符号unsigned int t;uchar a,b;/*读出温度函数*/Init_DS18B20(); /总线复位WriteOneChar(0xCC); / 发Skip ROM命令WriteOneChar(0xBE); / 发读命令a = ReadOneChar(); /温度低8位b = ReadOneChar(); /温度高8位Init_DS18B20();WriteOneChar(0xCC);

23、 / Skip ROMWriteOneChar(0x44); / 发转换命令t = (b << 8) + a;return (t*0.0625);键盘扫描程序#include<STC12C5A60S2.h>#include"shuma.h"extern unsigned char KeyCounter;extern bit KeyFlag;extern bit SetFlag;extern bit DisFlag;extern bit ShowTimeFlag;unsigned char code keycode16=0x77,0x7b,0x7d,0

24、x7e, /1,2,3,A0xb7,0xbb,0xbd,0xbe, /4,5,6,B0xd7,0xdb,0xdd,0xde, /7,8,9,C0xe7,0xeb,0xed,0xee, /*,0,#,D;unsigned char Key_Scan() /返回的是keycode数组的位数unsigned char i,X,Y;unsigned char KeyCode;P2 = 0x0f;if(P2 != 0x0f)Delay(500);if(P2 != 0x0f)X = P2;P2 = 0xf0;if(P2 != 0xf0)Y = P2;while(P2!=0xf0); /如果不松键 则一直停

25、在这边KeyCode = X|Y;elseKeyCode = 0xff; for(i=0;i<16;i+)if(KeyCode=keycodei)return i;return 255; unsigned char Get_Code()unsigned char i=0xff,j=0xff;i=Key_Scan();switch(i)case 0:j=1;KeyFlag=1;break;case 1:j=2;KeyFlag=1;break;case 2:j=3;KeyFlag=1;break;case 3:break; /'A"case 4:j=4;KeyFlag=1;

26、break;case 5:j=5;KeyFlag=1;break;case 6:j=6;KeyFlag=1;break;case 7:break; /'B'case 8:j=7;KeyFlag=1;break;case 9:j=8;KeyFlag=1;break;case 10:j=9;KeyFlag=1;break;case 11:break; /'C'case 12:j='a'KeyFlag=1;SetFlag=1;KeyCounter=0;break;case 13:j=0;KeyFlag=1;break;case 14:j='b&

27、#39;KeyFlag=1;DisFlag=DisFlag;break;case 15:j='c'KeyFlag=1;ShowTimeFlag=ShowTimeFlag;break; /'D' /'D'default:KeyFlag=0;break;return j;数码管显示#include<STC12C5A60S2.h>sbit SegDin=P36; /显示数据高地位sbit SegClk=P37; /数据显示时钟unsigned char code Seg_Table13 = 0xC0,/*0*/ 0xF9,/*1*/ 0xA

28、4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/0x9c,/*10*/ /上框 代表实际温度 0xa3,/*11*/ /下框 代表设定温度 0xff/all off;unsigned char code Pos_Dis_Buf5 = 0xef,0xdf,0xbf,0x7f,0xff;unsigned char Digit3 = 0;/*函数:Delay()功能:不精确延时参数:延时参数返回值:无*/void Delay(unsigned int n)while(-n);/*函

29、数:Seg_Display()功能:数码管在指定位置显示指定的数参数:Pos 显示位置(0 1 2 3) ucDATA (09)待显示的数字 Point 为1则显示小数点,否则不显示返回值:无*/void Bit_Display(unsigned char Pos, unsigned char ucDATA, bit Point)unsigned char i;unsigned char ucTemp;ucTemp = Seg_TableucDATA;/查段码表if(Point)ucTemp &= 0x7f; P4 = Pos_Dis_Buf4;/关闭所有显示for(i = 0; i

30、< 8; i+)SegDin = ucTemp & 0x80;/*每次取最高位,最高位为1,则SEG_DIN=1;反之亦然*/SegClk = 0;SegClk = 1; /*产生74164移位时钟上升沿*/ucTemp <<= 1;P4 = Pos_Dis_BufPos;/使能位选/*函数:Seg_Display()功能:数码管上显示指定的数参数:uiData (09999)待显示的数字返回值:无*/void Seg_Display(float uiData)unsigned char i;Digit0 = (unsigned int)(uiData/10)%10;

31、 /十位Digit1 = (unsigned int)uiData%10; /个位Digit2 = (unsigned int)(uiData*10)%10; /小数后一位for(i = 0; i < 3; i+)if(i!=1)Bit_Display(i,Digiti,0); /不显示小数点elseBit_Display(i,Digiti,1); /显示小数点Delay(50);主程序#include<STC12C5A60S2.h>#include"shuma.h"#include"keyScan.h"#include"ds

32、18b20.h"unsigned char data DisData2; /温度显示值unsigned char data SetData2; /温度设定值unsigned char KeyCounter; /设置温度位数计数器float RTValue; /实际温度值unsigned char STValue=50; /设置温度值unsigned char ShowTime3=0;/恒温时间值 unsigned int m;/定义粗略延迟变量unsigned int cc;/计数次数unsigned int CountFlag;unsigned int TimeCounter=0;

33、/设置恒温时间计数器bit ShowTimeFlag=0;/是否显示恒温时间bit KeyFlag=0;/是否接收到有用键值 1有bit SetFlag=0;/是否设定键按下 1按下bit DisFlag=0; /1显示设定值 0显示实际值sbit Beep = P35;sbit Heat = P31;void InitSys()TMOD=0X01;/MODE 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; /开中断ET0=1;/开定时器0中断P4SW=0xf0; void main()unsigned char i,j,num,k;uns

34、igned char Counter=0; unsigned int htime=0;unsigned int stime=0;InitSys();while(1)RTValue=ReadTemperature(); /获取实际温度num=Get_Code();if(DisFlag=0&&SetFlag=0)/显示实际温度for(j=0;j<50;j+)/每次用循环显示 也许可以提高亮度for(i=0;i<50;i+)Bit_Display(3,10,0); /上方框 表示实际温度Seg_Display(RTValue);if(DisFlag=1&&

35、SetFlag=0)/显示设定温度for(j=0;j<50;j+)/每次用循环显示 也许可以提高亮度for(i=0;i<50;i+)Bit_Display(3,11,0);/下方框 表示设定温度Seg_Display(STValue); if(TimeCounter=1000)TimeCounter=0;if(TimeCounter!=0)stime=TimeCounter;ShowTime0=stime/100;ShowTime1=(stime/10)%10;ShowTime2= stime%10;if(DisFlag=0&&SetFlag=0&&ShowTime

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论