51系列单片机闭环温度控制实验报告
- 格式:doc
- 大小:1.42 MB
- 文档页数:13
#include <reg51.h>#include <absacc.h>#include <math.h>void pid(void) //PID算法子程序void init(void) //初始化子程序void display(void) //延时子程序void clear() //清零子程序int mmul(int x,int y) //16位乘法,溢出赋极值int madd(int x,int y) //16位加法,溢出赋极值int change32_16(int x,int t) //32——16char change16_8(int wd) //16——8#define C8255_A XBYTE[0x7F00]#define C8255_B XBYTE[0x7F01]#define C8255_C XBYTE[0x7F02]#define C8255_CON XBYTE[0x7F03]#define AD0809 XBYTE[0xFEFF] //定义AD0809的地址sbit P17=P1^7; //PWM的驱动char TS=0x64; //采样周期int X=0x80;char SPEC=0x28; //给定:要求达到的温度值char IBAND=0x60; //积分分离值:PID算法中积分分离值int KP=12; //比例系数:PID算法中比例项系数char KI=20; //积分系数char KD=32; //微分系数int CK; //控制量:PID算法产生用于控制的量int TC; //采样周期变量char FPWM; //PWM脉冲中间标识位int CK_1; //控制量变量,用于记录上次控制的值int AAAA; // PWM高电平脉冲时间计算int VAA; //AAAA变量int BBB; //PWM低电平脉冲时间计算int VBB; //BBB变量int TKMARK; //采样标志值int ADMARK; //AD转换结束标志位int ADV ALUE; //AD采样后保存int YK; //反馈:测量温度值int EK; //温度误差int EK_1;int AEK;int BEK;unsigned char dis; //BCD码显示unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char b[]={0x00,0x00,0x00,0x00}; //位选/********************温度表**************/unsigned char codea[0x100]={0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x16,0x17,0x18,0x19, 0x1a,0x1b,0x1c,0x1d,0x1e,0x1e,0x1f,0x20,0x21,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x31,0x32,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3 c,0x3d,0x3e,0x3f,0x40,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x4 f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x6 2,0x63,0x64,0x64,0x65,0x65,0x66,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6e,0x6f,0 x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x85,0x86,0x87,0x88,0x89,0x8 a,0x8b,0x8c,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9b,0 x9c,0x9c,0x9d,0x9d,0x9e,0x9e,0x9f,0x9f,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0 xb0,0xb0,0xb1,0xb2,0xb3,0xb4,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbd,0xbe,0xbe,0xc1 ,0xc2,0xc3,0xc4,0xc5,0xc6,0xc8,0xca,0xcc,0xce,0xcf,0xd0,0xd1,0xd2,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd ,0xde,0xe3,0xe6,0xe9,0xec,0xf0,0xf2,0xf6,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0 xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,}/**************延时子程序*********************/void delay(unsigned int time){unsigned int i;for(i=0;i<time;i++)}/*************主程序*************************/void main(){init();while(1);{while(1){if(TRMARK==0x01)break; //采样周期到否}TRMARK==0x00;while(1){if(ADMARK==0x01)break; //AD转换是否结束}ADMARK=0x00;YK=a[ADV ALUE];dis=(char)YK; //查温度表pid(); //PID算法if(CK<=0x80) //根据CK产生PWMAAAA=0x00;elseAAAA=CK-0x80;BBB=0x7f-AAAA;}}/***********初始化函数*********************/void init(void){YK=0x00; //变量初始化EK=0x00;EK_1=0x00;AEK=0x00;BEK=0x00;CK=0x00;CK_1=0x00;BBB=0x00;VBB=0x00;ADV ALUE=0x00;TKMARK=0x00;ADMARK=0x00;TC=0x00; //采样周期变量FPWM=0x01;AAAA=0x7f;V AA=0x7f;C8255_CON=0x81;display();clear();TMOD=0x11; //T1 ,T0由外部控制中断控制信号,16位定时器,工作在方式一下IP=0x02; //设定T0中断优先级最高IT1=1; //外部中断请求信号方式为脉冲触发方式,外中断1为下降沿有效EX1=1; //允许INT1中断TH0=0xd8;TL0=0xef;TH1=0xd8;TL1=0xef;ET0=ET1=1; //允许T0,T1中断TR0=TR1=1; //启动T0,T1EA=1;AD0809=1; //启动AD转换}void myint3(void) interrupt 3 //定时器1 LED显示{TH1=0xd8;TL1=0xef;ET1=1;display();clear();}void myint1(void) interrupt 2 //外中断1 读AD转换结果{ADV ALUE=AD0809;ADMARK=0x01;}void myint2(void) interrupt 1 //定时器0 启动AD转换{TH0=0xd8;TL0=0xef;ET0=1; //启动定时器0AD0809=1; //启动ADif(TC<TS)TC++; //采样周期变量else{TKMARK=0x01;TC=0x00;}if(FPWM==0x01) //产生PWM ,0x01表示加热模块{if(V A!=0x00){V AA=V AA-1;P17=0; //输出为低加热else{FPWM=0x02;VBB=BBB/2;}}if(FPWM==0x02) //0x02表示停止加热模块{if(VBB!=0x00){VBB=VBB-1;P17=1; //输出为高停止加热}else{FPWM=0x01;V AA=AAAA/2;}}return;}/*****************PID子程序***********/void pid(void){int K,P,I,D;K=P=I=D=0;EK=SPEC-YK;//得到偏差BEK=EK-EK_1-AEK;//12EKAEK=EK-EK_1; //偏差变化量/*********UK=Kp*AEK+Ki*EK+Kd*BEK****/if(abs(EK)>abs(IBAND))I=0; //判积分分离elseI=(EK*TS)/KI; //计算积分项P=AEK;D=((KD/TS)*BEK)/10000; //计算微分项//与书上对照,忽略KP K=madd(I,P);K=madd(D,K);K=mmul(K,KP);CK=K+CK_1;CK=change16_8(CK);CK_1=CK;EK_1=EK;CK=CK+X;}int mmul(int x,int y){int t,z;long s;s=x*y;z=(int)(s&0x0ffff);t=(int)((s>>16)&0x0ffff);s=change32_16(z,t);return(s);}int change32_16(int z,int t) //t=高字节,z=低字节{int s;if(t==0){if((z&0x8000)==0) s=z;else s=0x7fff;}else if((t&0xffff)==0xffff){if((z&0x8000)==0) s=0x8000;else s=z;}else if((t&0x8000)==0) s=0x7fff;else s=0x8000;return(s);}int mmad(int x,int y){int t;t=x+y;if(x>=0&&y>=0) //同号相乘,符号位变反说明溢出{if((t&0x8000)!=0) t=0x7fff;}else if(x<=0&&y<=0){if((t&0x8000)==0) t=0x8000;}return(t);}char change16_8(int wd) //t=高字节,z=低字节{char z,t,s;z=(wd>>8)&0x0ff;if(t==0x00){if((z&0x80)==0) s=z;else s=0x7f;}else if((t&0xff)==0xff){if((z&0x80)==0) s=0x80;else s=z;}else if((t&0x80)==0) s=0x7f;else s=0x80;return(s);}void display() //数码管显示函数{unsigned char i,j=0xf7;b[3]=SPEC/10;b[2]=SPEC%10;b[1]=dis/10;b[0]=dis%10;for(i=0;i<4;i++){C8255_A=j;C8255_B=led[b[i]];delay(0x55);j>>=1;}}void clear(){C8255_B=0x00;}。
《基于51单片机的温度控制系统设计与实现》篇一一、引言在现代工业控制领域,温度控制系统的设计与实现至关重要。
为了满足不同场景下对温度精确控制的需求,本文提出了一种基于51单片机的温度控制系统设计与实现方案。
该系统通过51单片机作为核心控制器,结合温度传感器与执行机构,实现了对环境温度的实时监测与精确控制。
二、系统设计1. 硬件设计本系统以51单片机为核心控制器,其具备成本低、开发简单、性能稳定等优点。
硬件部分主要包括51单片机、温度传感器、执行机构(如加热器、制冷器等)、电源模块等。
其中,温度传感器负责实时监测环境温度,将温度信号转换为电信号;执行机构根据控制器的指令进行工作,以实现对环境温度的调节;电源模块为整个系统提供稳定的供电。
2. 软件设计软件部分主要包括单片机程序与上位机监控软件。
单片机程序负责实时采集温度传感器的数据,根据设定的温度阈值,输出控制信号给执行机构,以实现对环境温度的精确控制。
上位机监控软件则负责与单片机进行通信,实时显示环境温度及控制状态,方便用户进行监控与操作。
三、系统实现1. 硬件连接将温度传感器、执行机构等硬件设备与51单片机进行连接。
具体连接方式根据硬件设备的接口类型而定,一般采用串口、并口或GPIO口进行连接。
连接完成后,需进行硬件设备的调试与测试,确保各部分正常工作。
2. 软件编程编写51单片机的程序,实现温度的实时采集、数据处理、控制输出等功能。
程序采用C语言编写,易于阅读与维护。
同时,需编写上位机监控软件,实现与单片机的通信、数据展示、控制指令发送等功能。
3. 系统调试在完成硬件连接与软件编程后,需对整个系统进行调试。
首先,对单片机程序进行调试,确保其能够正确采集温度数据、输出控制信号。
其次,对上位机监控软件进行调试,确保其能够与单片机正常通信、实时显示环境温度及控制状态。
最后,对整个系统进行联调,测试其在实际应用中的性能表现。
四、实验结果与分析通过实验测试,本系统能够实现对环境温度的实时监测与精确控制。
基于51单片机的温度控制系统设计引言:随着科技的不断进步,温度控制系统在我们的生活中扮演着越来越重要的角色。
特别是在一些需要精确控制温度的场合,如实验室、医疗设备和工业生产等领域,温度控制系统的设计和应用具有重要意义。
本文将以基于51单片机的温度控制系统设计为主题,探讨其原理、设计要点和实现方法。
一、温度控制系统的原理温度控制系统的基本原理是通过传感器感知环境温度,然后将温度值与设定值进行比较,根据比较结果控制执行器实现温度的调节。
基于51单片机的温度控制系统可以分为三个主要模块:温度传感器模块、控制模块和执行器模块。
1. 温度传感器模块温度传感器模块主要用于感知环境的温度,并将温度值转换成电信号。
常用的温度传感器有热敏电阻、热敏电偶和数字温度传感器等,其中热敏电阻是最常用的一种。
2. 控制模块控制模块是整个温度控制系统的核心,它负责接收传感器传来的温度信号,并与设定值进行比较。
根据比较结果,控制模块会输出相应的控制信号,控制执行器的工作状态。
51单片机作为一种常用的嵌入式控制器,可以实现控制模块的功能。
3. 执行器模块执行器模块根据控制模块输出的控制信号,控制相关设备的工作状态,以实现对温度的调节。
常用的执行器有继电器、电磁阀和电动机等。
二、温度控制系统的设计要点在设计基于51单片机的温度控制系统时,需要考虑以下几个要点:1. 温度传感器的选择根据具体的应用场景和要求,选择合适的温度传感器。
考虑传感器的测量范围、精度、响应时间等因素,并确保传感器与控制模块的兼容性。
2. 控制算法的设计根据温度控制系统的具体要求,设计合适的控制算法。
常用的控制算法有比例控制、比例积分控制和模糊控制等,可以根据实际情况选择适合的算法。
3. 控制信号的输出根据控制算法的结果,设计合适的控制信号输出电路。
控制信号的输出电路需要考虑到执行器的工作电压、电流等参数,确保信号能够正常控制执行器的工作状态。
4. 系统的稳定性和鲁棒性在设计过程中,需要考虑系统的稳定性和鲁棒性。
《基于8051单片机的温度控制系统》篇一一、引言随着科技的飞速发展,人们对各类生产与生活设备的智能性和精度要求不断提高。
其中,温度控制系统作为一种关键的工业和家庭自动化技术,已成为当今科学研究与技术应用的重点。
在众多的单片机技术中,基于8051单片机的温度控制系统因其实时性强、性价比高以及适应性强等优点而得到了广泛的应用。
本文旨在深入探讨基于8051单片机的温度控制系统的设计与实现过程。
二、系统概述基于8051单片机的温度控制系统是一种典型的自动化控制系统,该系统采用高精度的温度传感器进行实时检测,并将数据通过A/D转换器传输至8051单片机。
单片机根据预设的算法对数据进行处理,然后通过PWM(脉宽调制)或开关控制等方式对执行器进行控制,以达到调节温度的目的。
三、硬件设计1. 单片机选择:选用8051系列单片机作为核心控制单元,因其性能稳定、成本低、资源丰富等优点而成为行业内的主流选择。
2. 温度传感器:选择高精度的温度传感器进行实时检测,如DS18B20等。
3. A/D转换器:将传感器输出的模拟信号转换为单片机可以处理的数字信号。
4. 执行器:根据需要选择合适的执行器,如加热器、制冷器等。
四、软件设计软件设计是整个系统的核心部分,主要涉及单片机的编程和控制算法的实现。
1. 编程语言:采用C语言进行编程,因其具有代码可读性强、可移植性好等优点。
2. 控制算法:根据实际需求选择合适的控制算法,如PID (比例-积分-微分)控制算法等。
通过编程实现对温度的精确控制。
3. 人机交互:通过LCD显示屏等人机交互设备,实现对系统的实时监控和操作。
五、系统实现系统实现包括硬件连接、程序编写、调试与优化等步骤。
首先将硬件设备按照电路图进行连接,然后编写程序实现单片机的控制功能。
在调试过程中,需要不断优化控制算法和程序代码,以达到最佳的温控效果。
六、系统性能分析基于8051单片机的温度控制系统具有以下优点:1. 实时性强:能够实时检测温度并快速作出反应。
报告评分批改老师《现代电子综合实验》课程设计报告基于单片机的温度检测控制系统设计学生姓名 学 号专 业 班 级同组学生 提交日期 年 月 日指导教师目录2一、实验目的 .....................................................................................2二、实验要求 .....................................................................................2三、实验开发环境及工具 ...........................................................................2四、按键扫描和液晶显示功能实现 ...................................................................24.1矩阵键盘电路 ...............................................................................4.1.1矩阵键盘电路简介 .....................................................................224.1.2矩阵式按键扫描原理 ...................................................................24.1.3 按键扫描子程序设计思想及流程图 ......................................................34.2 LCD1602显示电路 ..........................................................................34.2.1 LCD1602模块简介 ....................................................................34.2.2 LCD1602模块引脚说明 .................................................................4.2.3 LCD1602控制方式及指令 ..............................................................344.2.4 LCD1602液晶显示子程序设计思想及流程图 ..............................................5五、基于单片机的温度检测控制系统设计过程 .........................................................55.1 系统整体电路框图及功能说明 ................................................................55.2 DS18B20数字温度传感器电路 ..............................................................55.2.1 单总线通信方式简介 ..................................................................65.2.2 DS18B20简介 ......................................................................5.2.3 DS18B20读写操作 ..................................................................665.3 声光报警及控制电路 ........................................................................75.4 软件设计 ..................................................................................5.4.1 主程序设计流程图 ....................................................................775.4.2 DS18B20子程序设计思想及流程图 ...................................................85.4.3 声光报警子程序设计思想及流程图 .....................................................9七、 实验过程及实验结果 ...........................................................................9八、实验中遇到的问题及解决方法 ...................................................................10附件 ............................................................................................一、实验目的(1). 掌握单片机应用系统的设计方法与步骤;(2).掌握硬件电路各功能模块的工作原理、应用电路与编程方法;(3).熟练掌握单总线的应用及编程;(4). 掌握基于单片机的温度检测控制系统的设计与实现。
南京邮电大学通达学院2010/2011学年第1学期课程设计实验报告课题名称基于CPU的8LED温度显示控制器的设计专业通信工程学生班级070018学号07001836姓名赵静静指导老师林建中实验日期2010 年11 月19 日题目:基于单片cpu的8led温度显示控制器的设计一,实验目的和要求1,Proteus软件的MCS51单片机仿真学习2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。
基本要求:用热敏电阻或温度传感器作温度探头,通过AD转换器变换,把温度数据转换成BCD码在LCD上显示。
显示精度±0。
5℃能记录和回放温度参数,记录间隔可任意设定(1S到1h,步长1s)回放数据速度可设定画出温度变化曲线。
发挥部分:1 显示精度提高到±0。
1℃2 显示精度提高到±0。
01℃3 与实际温度计温度比较,找出温度显示误差曲线,在报告中描出,并分析误差来源4 实现温度自动补赏二,实验仪器微型计算机一台三,实验原理温度测量通常可以用两种方式来实现,一种是用热敏电阻之类的器件,由于感温效应,热敏电阻的阻值能够随温度变化,当热敏电阻接入电路,测量过它的电流或其两端的电压就会随温度变化发生响应的变化,在将温度变化的电压或电流采集过来,进行A/D 转化后,发送到单片机进行处理,通过显示电路,就可以将被测温度显示出来。
这种设计需要用到A/D转换电路,其测温电路比较麻烦。
第二种方法是用温度传感器芯片。
温度传感器芯片能把温度信号转换成数字信号,直接发送给单片机,转换后通过显示电路既可以显示。
四,基本芯片及其原理单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O 接口等部件,构成一个完整的微型计算机。
《基于51单片机的温度控制系统设计与实现》篇一一、引言随着科技的发展,温度控制系统的应用日益广泛,涉及到家电、工业、医疗等多个领域。
51单片机以其低成本、高可靠性和易用性,成为温度控制系统中常用的核心部件。
本文将介绍基于51单片机的温度控制系统的设计与实现。
二、系统概述本系统以51单片机为核心,通过温度传感器实时检测环境温度,根据设定的温度阈值,控制加热或制冷设备的工作状态,以达到恒温的目的。
系统主要由温度传感器、51单片机、加热/制冷设备及电源等部分组成。
三、硬件设计1. 温度传感器:选用精度高、稳定性好的数字温度传感器,实时采集环境温度并转化为数字信号,便于单片机处理。
2. 51单片机:选用功能强大的51系列单片机,具备丰富的IO口资源,可实现与温度传感器、加热/制冷设备的通信和控制。
3. 加热/制冷设备:根据实际需求选择合适的加热或制冷设备,通过单片机的控制实现温度的调节。
4. 电源:为系统提供稳定的电源供应,保证系统的正常运行。
四、软件设计1. 初始化:对51单片机进行初始化设置,包括IO口配置、中断设置等。
2. 数据采集:通过温度传感器实时采集环境温度,并转化为数字信号。
3. 温度控制算法:根据设定的温度阈值和实际温度值,通过PID控制算法计算输出控制量,控制加热/制冷设备的工作状态。
4. 显示与通信:通过LCD或LED等显示设备实时显示当前温度和设定温度,同时可通过串口通信实现与上位机的数据交互。
五、系统实现1. 电路连接:将温度传感器、51单片机、加热/制冷设备及电源等部分进行电路连接,确保各部分正常工作。
2. 编程与调试:使用C语言或汇编语言编写程序,实现温度控制算法、数据采集、显示与通信等功能。
通过仿真软件进行程序调试,确保系统功能正常。
3. 系统测试:在实际环境中对系统进行测试,观察系统在各种情况下的表现,如温度波动、设备故障等。
根据测试结果对系统进行优化和调整。
六、结论本文介绍了基于51单片机的温度控制系统的设计与实现。
摘要本次实验是软硬件相结合的实验,通过传感器得到的阻值与其它电阻,可以搭建一个电桥,将水温转化为电压,然后通过放大器将电压放大到所需要的值,将所得的电压送入单片机的AD转换电路,将模拟信号转换成数字信号,从而在单片机的液晶屏上显示当前的温度。
此烧水壶是可控制的,即设定温度,使水加热到设定温度且保温,此控制算法采用PID控制算法来控制继电器的通断,来保证水温恒定在设定温度处。
一、设计要求1.传感器:Pt100铂热电阻2.测量放大器:自己设计与搭建3.被控对象:400W电热杯,约0.5公斤自来水4.执行机构:12V驱动,5A负载能力的继电器5.控制系统:51单片机6.控制算法:PID7.温度范围:环境温度~100度8.测量误差1度,控制误差2度二、设计原理及方案1.热电阻传感器热电阻传感器是利用导体或半导体的电阻值随温度变化而变化的原进行测温的。
热电阻的工作原理:温度升高,金属内部原子晶格的振动加剧,从而使金属内部的自由电子通过金属导体时的阻碍增大,宏观上表现出电阻率变大,电阻值增加,我们称其为正温度系数,即电阻值与温度的变化趋势相同。
2.实验原理框图3.测量放大器电路图说明:电位器R10用来调节偏置电压,而电位器R7则用来调节增益。
实验时,用R10来调节零点,用R7来调节满度。
该电路将0℃-100℃转换为0-5V 电压。
上述电路图采用仪表放大器,将铂热电阻两端的电压U2与电位器R10两端的电压U1差放大,放大器输出电压U0与电压差的关系为:)-)(2(1127248U U R RR R U o ⨯+=由铂热电阻阻值与水温的关系可知,铂热电阻的范围是ΩΩ140~100。
则100)10012(12-140)140(1212)-(100)10012(12-100)10012(1212⨯+⨯+≤≤⨯+⨯+K K U U K K 整理得:V U U 04.0)-(012≤≤而仪表放大器的输出电压为0~5V ,所以放大倍数大约为:5/0.04=125。
《基于51单片机的温度控制系统设计与实现》篇一一、引言随着科技的发展,温度控制系统的应用越来越广泛,其精确性和稳定性对于许多领域具有重要意义。
本设计旨在以51单片机为基础,构建一个可靠且高效地温度控制系统。
这种系统能广泛用于家电、工业和医疗等场合,具有重要的应用价值。
二、系统概述基于51单片机的温度控制系统主要包括传感器模块、执行器模块、单片机控制模块以及电源模块。
传感器模块负责实时检测环境温度,执行器模块根据单片机的指令调整环境温度,单片机控制模块是整个系统的核心,负责接收传感器数据、处理并发出控制指令,电源模块为整个系统提供稳定的电源。
三、硬件设计1. 传感器模块设计:采用高精度的温度传感器,如DS18B20,实时检测环境温度并转换为电信号。
2. 执行器模块设计:根据实际需要,选择适当的加热或制冷设备作为执行器,接收单片机的控制指令,调整环境温度。
3. 单片机控制模块设计:以51单片机为核心,通过编程实现温度的实时检测、数据处理和控制指令的发出。
同时,为了方便程序的更新和维护,采用串口通信与上位机进行数据交互。
4. 电源模块设计:为整个系统提供稳定的电源,可采用直流电源或交流电源,通过电源电路进行转换和稳定处理。
四、软件设计软件设计主要包括单片机的程序设计。
程序设计采用C语言编写,易于阅读和维护。
主要功能包括:初始化系统、读取传感器数据、处理数据、发出控制指令以及与上位机进行数据交互。
程序采用中断方式读取传感器数据,保证数据的实时性。
同时,通过PID控制算法对温度进行精确控制,提高系统的稳定性。
五、系统实现1. 系统初始化:单片机上电后,首先进行系统初始化,包括配置时钟、初始化串口等。
2. 数据读取:单片机通过读取传感器模块的数据,获取当前环境温度。
3. 数据处理:单片机对读取的温湿度数据进行处理,包括滤波、转换等操作,得到准确的温度值。
4. 控制指令发出:单片机根据处理后的温度值与设定值的比较结果,发出相应的控制指令给执行器模块。
成绩:综合实验报告题目:51系列单片机闭环温度控制班级:小组成员:指导教师:完成时间:2015年11月一、实验名称:51系列单片机闭环温度控制实验——基于Protuse仿真实验平台实现基本情况:1.实验项目组长:2. 小组成员:3.具体分工:负责程序编写,主要负责查询资料与实验报告撰写。
4.实验要求:①设计硬件电路:温度检测:采用热电偶或热电阻温度给定:采用电位器进行模拟电压给定,0——5VAD转采用12位转换显示采用8位LED,或者LCD1602显示键盘4X4,PID等参数通过键盘设置。
②软件控制算法:数字PID,参数在线修改。
显示窗口:显示温度的设置值SV、温度的实际值PV。
实际温度值,温度峰值、峰值时间等通过串口上传到上位机(选做)二、实验内容1、系统基本原理(实验原理介绍)根据实验要求,温度闭环控制,即对加温速度、超调量、调节时间级误差参数,选择PID控制参数级算法,实现对温度的自动控制。
闭环温度控制系统原理图如下:计算机PID 数字输出温控测温2、PID算法的数字实现本次试验通过8031通过OVEN 是模拟加热的装置,加一定的电压便开始不停的升温,直到电压要消失则开始降温。
仿真时,U形加热器为红色时表示正在加热,发红时将直流电压放过来接,就会制冷,变绿。
T端输出的是电压,温度越高,电压就越高。
8031对温度的控制是通过可控硅调控实现的。
可控硅通过时间可以通过可控硅控制板上控制脉冲控制。
该触发脉冲想8031用软件在P1.3引脚上产生,受过零同步脉冲后经光偶管和驱动器输送到可控硅的控制级上。
偏差控制原理是要求对所需温度求出偏差值,然后对偏差值处理而获得控制信号去调节加热装置的温度。
PID控制方程式:式中e是指测量值与给定值之间的偏差TD 微分时间T 积分时间KP 调节器的放大系数将上式离散化得到数字PID位置式算法,式中在位置算法的基础之上得到数字PID 增量式算法:3、温度控制软件设计程序结构图如下:4、硬件电路设计在温度控制中,经常采用是硬件电路主要有两大部分组成:模拟部分和数字部分,对这两部分调节仪表进行调节,但都存在着许多缺点,用单片机进行温度控制使构成的系统灵活,可靠性高,并可用软件对传感器信号进行抗干拢滤波和非线性补偿处理,可大大提高控制质量和自动化水平;总的来说本系统由四大模块组成,它们是输入模块、单片机系统模块、计算机显示与控制模块和输出控制模块。
输入模块主要完成对温度信号的采集和转换工作,由温度传感器及其与单片机的接口部分组成。
利用模拟加热的装置来控制温度。
该闭环温度控制系统采用AT89S51八位机作为微处理单元进行控制。
采用4X4键盘把设定温度的最高值和最低值存入单片机的数据存储器,还可以通过键盘完成温度检测功能的转换。
温度传感器把采集的信号与单片机里的数据相比较来控制温度控制器。
5、电路原理图1、仿真完整电路图2、12位AD转换模块3、OVEN模型及信号调理电路4、单片机主电路三、实验结果分析(含程序、数据记录及分析和实验总结等,可附页):1、51系列单片机闭环温度控制实验程序Main.c#include "includes.h"char measure_temperature[6] = {'+','0','0','0','C','\0'};char setting_temperature[6] = {'0','1','0','0','C','\0'};char code_table[16] = {'7','8','9','T','4','5','6','P','1','2','3','I','+','0','-','D'};char Pv[6]={'P','0','9','0',' ','\0'};char Iv[6]={'I','0','0','0',' ','\0'};char Dv[6]={'D','0','0','5',' ','\0'};int PWM_Period = 100;int PWM_Hight = 1;int PWM_Hights = 50;short m_temperature = 0;short s_temperature = 100;float pc = 090.0;float ic = 0.0;float dc = 5.0;float e1 = 0;float e2 = 0; char RX_Data[5] = {0};int main(){timer_init();lcd_init();while(1){ADCRead();keyscan();Data_update();LCD_Display(0x80+0x08,setting_temp erature);LCD_Display(0x80+0x40,Pv);LCD_Display(0x80+0x45,Iv);LCD_Display(0x80+0x4A,Dv);}return 0;PWM.c#include "includes.h"uchar T_update = 0;uchar P_update = 0;uchar I_update = 0;uchar D_update = 0;void T0_time() interrupt 1 //PWM {PWM_Hights--;if(PWM_Hights == 0){PWM_EN = 0;PWM_Hights = 1;}PWM_Period--;if(PWM_Period == 0){PWM_EN = 1;PWM_Period = 100;PWM_Hights = PWM_Hight;}}void pid(){static long sum = 0;e2 = e1;e1 = s_temperature-m_temperature;sum += e1;if(e1 > 20){PWM_Hight = 100;}else if(e1 < -20){PWM_Hight = 1;}else{PWM_Hight = PWM_Hight+ pc*(e1+ic*sum+dc*(e1-e2));}if(PWM_Hight > 100)PWM_Hight = 100;else if(PWM_Hight < 1)PWM_Hight = 1;}void Interrupt_T1() interrupt 3{static int count = 0;TH1 = 0x3C;//定时50msTL1 = 0xB0;count++;if(count == 20){pid();count = 0;}}void update_Temp(){short j = 0;short tmp = 0;for(j = 1;j<=3;j++){tmp = tmp*10+(setting_temperature[j]-'0');}if(setting_temperature[0] == '-')tmp = -tmp;s_temperature = tmp;}void update_Pv(){short j = 0;short tmp = 0;for(j = 1;j<=3;j++){tmp = tmp*10+(Pv[j]-'0');}pc = tmp;}void update_Iv(){short j = 0;short tmp = 0;for(j = 1;j<=3;j++){tmp = tmp*10+(Iv[j]-'0');}ic = tmp;}void update_Dv(){short j = 0;short tmp = 0;for(j = 1;j<=3;j++){tmp = tmp*10+(Dv[j]-'0');}dc = tmp;}void Data_update() //循环检查每一次T、PID值是否有修改{if(T_update == 1){update_Temp();T_update =0;}else if(P_update == 1){update_Pv();P_update =0;}else if(I_update == 1) {update_Iv();I_update =0;}else if(D_update == 1){update_Dv();D_update =0;}}Timer.c#include "includes.h"void timer_init(){EA = 0;//关闭总中断ET0 = 1;//ET0用于PWM产生ET1 = 1;//ET1测速计时TMOD = 0x12;//T0:工作方式2 T1:工作方式1TH0 = 0x9C;TL0 = 0x9C;TH1 = 0x3C;//定时50msTL1 = 0xB0;TR0 = 1;//运行定时器0TR1 = 1;//运行定时器1PT0 = 1; //T0中断优先级高EA = 1; //打开总中断}ADS7824.c#include "includes.h"void itoa(short num,char str[]) {int i=3;num = (num/2047.0)*999.0;for(i=3; i>0; i--){str[i] = (num % 10) + '0';num = num / 10;}str[5] = '\0';}void ADCRead(){short num = 0;//无符号16位RC = 0;//启动转换RC = 1;//启动读取while(BUSY == 0);num = 0;BYTE = 0; //读取高4位num = (num|P1)<<8;num = num & 0x0F00;BYTE = 1;//读取低8位num = num|P1;//12位数据完整取好if((num&0x0800) == 0x0800){measure_temperature[0] = '-';num = num&0xF7FF;num = (num^0x07FF)+1;m_temperature = -((num/2047.0)*999.0);}else{measure_temperature[0] = '+';m_temperature = (num/2047.0)*999.0;}itoa(num,measure_temperature);LCD_Display(0x80,measure_temperatu re);RC = 0;}Delay.c#include "includes.h"void delay_ms(int n)//1ms延时{uint i=0,j=0;for(i=0;i<n;i++)for(j=0;j<123;j++);}Display.c#include "includes.h"void lcd_wcom(uchar com) //1602 写命令函数单片机给1602 写命令{rs=0; //选择指令寄存器rw=0; //选择写P0=com; //把命令字送入delay_ms(1);en=1; //使能线电平变化,命令送入1602 的8 位数据口delay_ms(1);en=0;}void lcd_wdat(uchar dat) //1602 写数据函数{rs=1; //选择数据寄存器rw=0; //选择写P0=dat; //把要显示的数据送入delay_ms(1);en=1; //使能线电平变化,数据送入1602 的8 位数据口delay_ms(1);en=0;}void LCD_Display(uint location, uchar Display_Part[]){int i=0;lcd_wcom(location);for(i=0;Display_Part[i] != 0;i++){lcd_wdat(Display_Part[i]);delay_ms(1);}}void lcd_init() //1602 初始化函数{lcd_wcom(0x38); //8 位数据,双列,5*7 字形lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位lcd_wcom(0x01); //清屏LCD_Display(0x80+0x08,setting_temperatu re);LCD_Display(0x80+0x40,Pv);LCD_Display(0x80+0x45,Iv);LCD_Display(0x80+0x4A,Dv); }Keyboard.c#include "includes.h"void keyscan(){uint keyno = 16;uchar temp = 0;uchar i = 0;static char update_flag = 0;static int update_index = 0;char key_code = 0;P3 = 0x0F;if(P3 != 0x0F){P3 = 0x0F;//delay_ms(1);temp = P3;i = temp^0x0F;switch(i){case 1: keyno = 0;break;case 2: keyno = 1;break;case 4: keyno = 2;break;case 8: keyno = 3;break;default: keyno = 16; //无键按下}P3 = 0xF0;temp = P3;//delay_ms(1);i = (temp >> 4) ^ 0x0F;switch(i){case 1: keyno += 0;break;case 2: keyno += 4;break;case 4: keyno += 8;break;case 8: keyno += 12;break;}while(P3 != 0xF0);}if(keyno>=0 && keyno <=15){if(update_flag == 1){key_code = code_table[keyno];setting_temperature[update_index] = key_code;update_index++;if(update_index == 4){update_flag = 0;update_index = 0;T_update = 1;}}else if(update_flag == 2){key_code = code_table[keyno];Pv[1+update_index] = key_code;update_index++;if(update_index == 3){update_flag = 0;update_index = 0;P_update = 1;}}else if(update_flag == 3){key_code = code_table[keyno];Iv[1+update_index] = key_code;update_index++;if(update_index == 3){update_flag = 0;update_index = 0;I_update = 1;}}else if(update_flag == 4){key_code = code_table[keyno];Dv[1+update_index] = key_code;update_index++;if(update_index == 3){update_flag = 0;update_index = 0;D_update = 1;}}else{switch(keyno){case 3:update_flag = 1;break;case 7:update_flag = 2;break;case 11:update_flag = 3;break;case 15:update_flag = 4;break;default:update_flag = 0;}}}}2、实验结果100度设定温度仿真结果零下25度设定温度仿真结果3、实验总结温度控制广泛应用于人们的生产和生活中,人们使用温度计来采集温度,通过人工操51系列单片机直流电机闭环调速实验劳动强度大。