51系列单片机闭环温度控制 实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EN = 0;
}
/*************
函数功能:Show_Num初始化
****************/
void Show_Num(u8 x,u8 y,u8 n,u16 num)//n为数字长度num小于等于65535
{
u16 Temp=num;
u8 a[5],i;
8031对温度的控制是通过可控硅调控实现的。可控硅通过时间可以通过可控硅控制板上控制脉冲控制。该触发脉冲想8031用软件在P1.3引脚上产生,受过零同步脉冲后经光偶管和驱动器输送到可控硅的控制级上。偏差控制原理是要求对所需温度求出偏差值,然后对偏差值处理而获得控制信号去调节加热装置的温度。
PID控制方程式:
程序结构图如下:
3、电路原理图
三、实验结果分析(含程序、数据记录及分析和实验总结等,可附页):
1、51系列单片机直流电机闭环调速实验程序
/*--------------------------------------------------------------------------
REG52.H
#define TLC2543_H_
//////TLC2543////
sbit SDO = P2^0;
sbit SDI = P2^1;
sbit CS = P2^2;
sbit CLK = P2^3;
sbit EOC = P2^4;
//u16 read_tlc2543(u8 port);
#define u8 unsigned char
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;
/* SCON */
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
}
k++;
if(k>2)
{
PORT = port;
}
}
return AD_value;
}
u8 AD_deal(void)
{
u16 AD_value;
u16 temp;
float temp1;
AD_value = read_tlc2543(0x00);
temp1 =(AD_value*0.04069);
for(i=z;i>0;i--);;
}
u16 read_tlc2543(u8 port)
{
static u8 PORT = 0;
u8 Temp,i,k=0;
u16 AD_value=0;
Temp = port;
CS = 1;
CLK = 0;
delay_us(1);
Temp<<=4;
CS = 0;
while(1)
Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
void delay_ms(u16 z)
{
u16 i;
u8 j;
for(i=z;i>0;i--)
for(j=120;j>0;j--);
}
/*************
函数功能:LCD写数据
****************/
void LCD_WriteData(u8 Dat)
{
RS = 1;
// delay_ms(5);
2.学号:
3.班级:4.同组其他成员:
序号
姓名
班级
学号
1
2
二、实验内容(实验原理介绍)
1、系统基本原理
计算机控制技术实训,即温度闭环控制,根据实际要求,即加温速度、超调量、调节时间级误差参数,选择PID控制参数级算法,实现对温度的自动控制。
闭环温度控制系统原理如图:
2、PID算法的数字实现
本次试验通过8031通过OVEN是模拟加热的装置,加一定的电压便开始不停的升温,直到电压要消失则开始降温。仿真时,U形加热器为红色时表示正在加热,发红时将直流电压放过来接,就会制冷,变绿。T端输出的是电压,温度越高,电压就越高。
成绩:
重庆邮电大学
自动化学院综合实验报告
题目:51系列单片机闭环温度控制
学生姓名:蒋运和
班级:0841004
学号:2010213316
同组人员:李海涛陈超
指导教师:郭鹏
完成时间:2013年12月
一、实验名称:
51系列单片机闭环温度控制实验
——基于Protuse仿真实验平台实现
基本情况:
1.学生姓名:
AD_value<<=1;
if(SDO)
AD_value |= 0x01;
delay_us(2);
CLK = 1;
}
CLK = 0;
CS = 1;
if(PORT == port)
break;
else
{
Temp = port;
Temp<<=4;
delay_us(2);
CS = 0;
//PORT = port;
/* BIT Registers */
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0; //8052 only
式中e是指测量值与给定值之间的偏差
TD微分时间
T积分时间
KP 调节器的放大系数
将上式离散化得到数字PID位置式算法,式中在位置算法的基础之上得到数字PID
增量式算法:
3、硬件电路设计
在温度控制中,经常采用是硬件电路主要有两大部分组成:模拟部分和数字部分,对这两部分调节仪表进行调节,但都存在着许多缺点,用单片机进行温度控制使构成的系统灵活,可靠性高,并可用软件对传感器信号进行抗干拢滤波和非线性补偿处理,可大大提高控制质量和自动化水平;总的来说本系统由四大模块组成,它们是输入模块、单片机系统模块、计算机显示与控制模块和输出控制模块。输入模块主要完成对温度信号的采集和转换工作,由温度传感器及其与单片机的接口部分组成。利用模拟加热的装置来控制温度。
u8 S_Temp=100; //设置温度
u8 P_Temp=25; //实际温度
u8 pulse = 0;
u8 Kp=30,Ki=0;Kd=10;
int uk=0;
int num=0;
struct FLAG
{
u8 turn;
}
myflag;
/*************
函数功能:延时
****************/
#define u8 unsigned char
#define u16 unsigned int
#define PULSE 200
//////LCD///////
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;
sbit LED = P3^0;
sbit ENA = P3^7;
#define u16 unsigned int
u16 read_tlc2543(u8 port);
u8 AD_deal(void);
#endif
#include<reg52.h>
#include"tlc2543.h"
//#include"wendu.h"
void delay_us(u16 z)
{
u16 i;
void Show_fNum(u8 x,u8 y,u16 num);
void LCD_Init(void);
void key_scan(void);
//void key_scan(void);
extern u16 read_tlc2543(u8 port);
#endif
#ifndef TLC2543_H_
/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
{
for(i=0;i<8;i++)
{
CLK = 0;
if(Temp&0x80)
SDI = 1;
else
SDI = 0;
AD_value<<=1;
if(SDO)
AD_value |= 0x01;
CLK = 1;
delay_us(2);
Temp<<=1;
}
for(i=8;i<12;i++)
{
CLK = 0;
sbit RCLK = T2CON^5;
sbit TCLK = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2 = T2CON^2;
sbit C_T2 = T2CON^1;
sbit CP_RL2 = T2CON^0;
#endif
#ifndef WENDU_H_
#define WENDU_H_
sbit IN2 = P3^6;
sbit IN1 = P3^5;
void delay_ms(u16 z);
void LCD_WriteData(u8 Dat);
void LCD_WriteCOM(u8 com);
void Show_Num(u8 x,u8 y,u8 n,u16 num);//n为数字长度num小于等于65535
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
P1 = Dat;
EN = 1;
delay_ms(5);
EN = 0;
}来自百度文库
/*************
函数功能:LCD命令
****************/
void LCD_WriteCOM(u8 com)
{
RS = 0;
// delay_ms(5);
P1 = com;
EN = 1;
delay_ms(5);
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/* 8052 Extensions */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
temp =(u16)(temp1*10);
if((temp%10)>4)
temp = temp/10+1;
else
temp = temp/10;
temp = (u8)temp;
return temp;
}
#include<reg52.h>
#include"wendu.h"
#include"tlc2543.h"
sbit TI = SCON^1;
sbit RI = SCON^0;
/* P1 */
sbit T2EX = P1^1; // 8052 only
sbit T2 = P1^0; // 8052 only
/* T2CON */
sbit TF2 = T2CON^7;
sbit EXF2 = T2CON^6;
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/* IE */
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
/* IP */
sbit PT2 = IP^5;
}
/*************
函数功能:Show_Num初始化
****************/
void Show_Num(u8 x,u8 y,u8 n,u16 num)//n为数字长度num小于等于65535
{
u16 Temp=num;
u8 a[5],i;
8031对温度的控制是通过可控硅调控实现的。可控硅通过时间可以通过可控硅控制板上控制脉冲控制。该触发脉冲想8031用软件在P1.3引脚上产生,受过零同步脉冲后经光偶管和驱动器输送到可控硅的控制级上。偏差控制原理是要求对所需温度求出偏差值,然后对偏差值处理而获得控制信号去调节加热装置的温度。
PID控制方程式:
程序结构图如下:
3、电路原理图
三、实验结果分析(含程序、数据记录及分析和实验总结等,可附页):
1、51系列单片机直流电机闭环调速实验程序
/*--------------------------------------------------------------------------
REG52.H
#define TLC2543_H_
//////TLC2543////
sbit SDO = P2^0;
sbit SDI = P2^1;
sbit CS = P2^2;
sbit CLK = P2^3;
sbit EOC = P2^4;
//u16 read_tlc2543(u8 port);
#define u8 unsigned char
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;
/* SCON */
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
}
k++;
if(k>2)
{
PORT = port;
}
}
return AD_value;
}
u8 AD_deal(void)
{
u16 AD_value;
u16 temp;
float temp1;
AD_value = read_tlc2543(0x00);
temp1 =(AD_value*0.04069);
for(i=z;i>0;i--);;
}
u16 read_tlc2543(u8 port)
{
static u8 PORT = 0;
u8 Temp,i,k=0;
u16 AD_value=0;
Temp = port;
CS = 1;
CLK = 0;
delay_us(1);
Temp<<=4;
CS = 0;
while(1)
Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
void delay_ms(u16 z)
{
u16 i;
u8 j;
for(i=z;i>0;i--)
for(j=120;j>0;j--);
}
/*************
函数功能:LCD写数据
****************/
void LCD_WriteData(u8 Dat)
{
RS = 1;
// delay_ms(5);
2.学号:
3.班级:4.同组其他成员:
序号
姓名
班级
学号
1
2
二、实验内容(实验原理介绍)
1、系统基本原理
计算机控制技术实训,即温度闭环控制,根据实际要求,即加温速度、超调量、调节时间级误差参数,选择PID控制参数级算法,实现对温度的自动控制。
闭环温度控制系统原理如图:
2、PID算法的数字实现
本次试验通过8031通过OVEN是模拟加热的装置,加一定的电压便开始不停的升温,直到电压要消失则开始降温。仿真时,U形加热器为红色时表示正在加热,发红时将直流电压放过来接,就会制冷,变绿。T端输出的是电压,温度越高,电压就越高。
成绩:
重庆邮电大学
自动化学院综合实验报告
题目:51系列单片机闭环温度控制
学生姓名:蒋运和
班级:0841004
学号:2010213316
同组人员:李海涛陈超
指导教师:郭鹏
完成时间:2013年12月
一、实验名称:
51系列单片机闭环温度控制实验
——基于Protuse仿真实验平台实现
基本情况:
1.学生姓名:
AD_value<<=1;
if(SDO)
AD_value |= 0x01;
delay_us(2);
CLK = 1;
}
CLK = 0;
CS = 1;
if(PORT == port)
break;
else
{
Temp = port;
Temp<<=4;
delay_us(2);
CS = 0;
//PORT = port;
/* BIT Registers */
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0; //8052 only
式中e是指测量值与给定值之间的偏差
TD微分时间
T积分时间
KP 调节器的放大系数
将上式离散化得到数字PID位置式算法,式中在位置算法的基础之上得到数字PID
增量式算法:
3、硬件电路设计
在温度控制中,经常采用是硬件电路主要有两大部分组成:模拟部分和数字部分,对这两部分调节仪表进行调节,但都存在着许多缺点,用单片机进行温度控制使构成的系统灵活,可靠性高,并可用软件对传感器信号进行抗干拢滤波和非线性补偿处理,可大大提高控制质量和自动化水平;总的来说本系统由四大模块组成,它们是输入模块、单片机系统模块、计算机显示与控制模块和输出控制模块。输入模块主要完成对温度信号的采集和转换工作,由温度传感器及其与单片机的接口部分组成。利用模拟加热的装置来控制温度。
u8 S_Temp=100; //设置温度
u8 P_Temp=25; //实际温度
u8 pulse = 0;
u8 Kp=30,Ki=0;Kd=10;
int uk=0;
int num=0;
struct FLAG
{
u8 turn;
}
myflag;
/*************
函数功能:延时
****************/
#define u8 unsigned char
#define u16 unsigned int
#define PULSE 200
//////LCD///////
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;
sbit LED = P3^0;
sbit ENA = P3^7;
#define u16 unsigned int
u16 read_tlc2543(u8 port);
u8 AD_deal(void);
#endif
#include<reg52.h>
#include"tlc2543.h"
//#include"wendu.h"
void delay_us(u16 z)
{
u16 i;
void Show_fNum(u8 x,u8 y,u16 num);
void LCD_Init(void);
void key_scan(void);
//void key_scan(void);
extern u16 read_tlc2543(u8 port);
#endif
#ifndef TLC2543_H_
/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
{
for(i=0;i<8;i++)
{
CLK = 0;
if(Temp&0x80)
SDI = 1;
else
SDI = 0;
AD_value<<=1;
if(SDO)
AD_value |= 0x01;
CLK = 1;
delay_us(2);
Temp<<=1;
}
for(i=8;i<12;i++)
{
CLK = 0;
sbit RCLK = T2CON^5;
sbit TCLK = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2 = T2CON^2;
sbit C_T2 = T2CON^1;
sbit CP_RL2 = T2CON^0;
#endif
#ifndef WENDU_H_
#define WENDU_H_
sbit IN2 = P3^6;
sbit IN1 = P3^5;
void delay_ms(u16 z);
void LCD_WriteData(u8 Dat);
void LCD_WriteCOM(u8 com);
void Show_Num(u8 x,u8 y,u8 n,u16 num);//n为数字长度num小于等于65535
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
P1 = Dat;
EN = 1;
delay_ms(5);
EN = 0;
}来自百度文库
/*************
函数功能:LCD命令
****************/
void LCD_WriteCOM(u8 com)
{
RS = 0;
// delay_ms(5);
P1 = com;
EN = 1;
delay_ms(5);
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/* 8052 Extensions */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
temp =(u16)(temp1*10);
if((temp%10)>4)
temp = temp/10+1;
else
temp = temp/10;
temp = (u8)temp;
return temp;
}
#include<reg52.h>
#include"wendu.h"
#include"tlc2543.h"
sbit TI = SCON^1;
sbit RI = SCON^0;
/* P1 */
sbit T2EX = P1^1; // 8052 only
sbit T2 = P1^0; // 8052 only
/* T2CON */
sbit TF2 = T2CON^7;
sbit EXF2 = T2CON^6;
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
/* IE */
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
/* IP */
sbit PT2 = IP^5;