温度控制系统设计.docx

上传人:b****3 文档编号:10537352 上传时间:2023-05-26 格式:DOCX 页数:35 大小:620.28KB
下载 相关 举报
温度控制系统设计.docx_第1页
第1页 / 共35页
温度控制系统设计.docx_第2页
第2页 / 共35页
温度控制系统设计.docx_第3页
第3页 / 共35页
温度控制系统设计.docx_第4页
第4页 / 共35页
温度控制系统设计.docx_第5页
第5页 / 共35页
温度控制系统设计.docx_第6页
第6页 / 共35页
温度控制系统设计.docx_第7页
第7页 / 共35页
温度控制系统设计.docx_第8页
第8页 / 共35页
温度控制系统设计.docx_第9页
第9页 / 共35页
温度控制系统设计.docx_第10页
第10页 / 共35页
温度控制系统设计.docx_第11页
第11页 / 共35页
温度控制系统设计.docx_第12页
第12页 / 共35页
温度控制系统设计.docx_第13页
第13页 / 共35页
温度控制系统设计.docx_第14页
第14页 / 共35页
温度控制系统设计.docx_第15页
第15页 / 共35页
温度控制系统设计.docx_第16页
第16页 / 共35页
温度控制系统设计.docx_第17页
第17页 / 共35页
温度控制系统设计.docx_第18页
第18页 / 共35页
温度控制系统设计.docx_第19页
第19页 / 共35页
温度控制系统设计.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

温度控制系统设计.docx

《温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《温度控制系统设计.docx(35页珍藏版)》请在冰点文库上搜索。

温度控制系统设计.docx

温度控制系统设计

温度控制系统设计

 

一、绪论.......................................................................................................................3

二、温度系统的总体设计………………………………………..………………….3

2.1设计要求…………………………………………………………….………3

2.2设计的总体思路…………………………………………………….………3

三、硬件电路的设计………………………………………………………..……….4

3.1所用主要器件的介绍…………………………………………………........4

3.1.1AT89S51单片机介绍…………………………………………………...4

3.1.2A/D转换芯片TLC1543…………………………….…………………6

3.1.3D/A转换芯片TLC5620……………………………………….…….7

3.1.4运放芯片LM324……………………………………………………….7

3.1.5执行部件………………………………………………………………..8

3.2电路原理图设计……………………………………………………………..8

3.2.1温度测量电路设计……………………………………………...………8

3.2.1.1方案的选择…………………………………………………………8

3.2.2A/D、D/A、单片机、键盘及其显示原理图…………………………10

3.3EWB仿真…………………………………………………………..………10

3.3.1PT1000为0°C时的仿真………………………………………….…10

3.3.2PT1000为100°C时的仿真……………………….…………………11

3.3.3作图标定…………………………………………………..……………11

3.4用99设计原理图………………………………………………..…………12

3.5PCB图的设计…………...…………….…………………………………12

四、系统软件设计………………………………………………………..…………13

4.1完整的控制程序…………………………………………………...………13

4.2软件编程当中遇到的一些问题及其解决方法……………………...……20

4.2.1按键的设置….…………………………………………………………20

4.2.2数码管如何显示字符……………………………………….…………20

4.2.3滤波环节…………………………………………………...………….20

4.2.4采样周期的设置……………………………………………….………21

4.2.5PID算法的实现…………………………………………………….….21

4.2.6如何实现P、I、D参数的小数化……………………………….……22

五、系统调试……………………………………………………………………...…23

5.1硬件的调试....................................................................................................23

5.2软件调试……………………………………………………………………23

5.3整个系统的调试………………………………………………...………….24

5.3.1P、I、D参数的整定方法……………………………………………24

5.3.2数据的记录与作图……………………………………………………25

六、结果分析…………………………………………………………....……………27

谢辞…………………………………………………………………..………….28

参考文献……………………………………………….…………………….………29

一、绪论

随着极速计算机科学和自动化水平的不断提高,在各种应用领域都大量采用计算机控制系统。

计算机控制系统的应用使得科学研究、工农业生产、工艺时间的效率大大的提高,同时也大幅度提高了产品和成果的质量。

计算机控制系统从结构上讲都是类同的,它包括计算机组成的控制器和被控对象,并且对象的输出通过反馈给控制器,形成一个闭环的控制系统。

由于大量的控制系统的任务较专业化,并且执行的是直接数字控制任务,故基本采用单片机。

单片机是目前控制系统采用最多的器件和芯片。

单片机以其体积小、性能价格比高、指令丰富、提供多种外围接口部件控制灵活等优点,广泛应用与各种家电产品、智能化仪表、工业控制系统和国能控制系统中,在温度控制领域的应用也是十分广泛的。

下面介绍的温度控制系统的设计,就是一个典型的例子,传统用模拟电路的控制精度不高,而且适用的范围也较小。

如果用单片机数字控制的话,在线修改的能力强,稳定性比较好,适应性也比较强。

二、温度系统的总体设计

2.1设计要求

温度测量范围为0~100度,温度设定范围为40~95度,静态误差为1度,超调量<10%,温度显示精度为0.1度。

2.2设计的总体思路

计算机温度控制系统的设计包括如下几个部分;

(1)、温度信号的检测可以采用铂电阻、PN结、热敏电阻等传感器电路,或采用温度变送器,将温度转换为标准电压信号,通过A/D芯片采集到单片机,或通过DS18B20直接读取温度的数字量;

(2)、在单片机将设定温度和测量温度相比较,经过PID控制算法进行实时处理,计算出控制量输出,同时进行参数的显示和修改等操作;(3)、将控制量通过D/A变成标准电压送给可控硅模块对交流电调压,或将控制量转换为PWM信号驱动继电器或双向可控硅对交流电进行开关控制,用电加热的方式对水加热;

 

图1-1温度控制系统的基本组成

三、硬件电路的设计:

3.1所用主要器件的介绍

3.1.1AT89S51单片机介绍

兼容MCS51微控制器,4K字节FLASH存储器支持在系统编程ISP1000次擦写周期,128字节片内RAM,工作电压4.0V到5.5V,全静态时钟0Hz到33MHz,三级程序加密,32个可编程IO口,2/3个16位定时/计数器,6/8个中断源,全双工UART,低功耗支持Idle和Power-down模式,Power-down模式支持中断唤醒,看门狗定时器,双数据指针,上电复位标志。

AT89S51具有如下特点:

4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

引脚图如图3—5.

3.1.1.1主要功能特性:

兼容MCS-51指令系统

4k可反复擦写(>1000次)ISPFlashROM

4.5-5.5V工作电压

时钟频率0-33MHz

3级加密位

128x8bit内部RAM

2个16位可编程定时/计数器

32个双向I/O口

6个中断源

全双工UART串行中断口线

低功耗空闲和省电模式图3—5AT89S51引脚

中断唤醒省电模式

看门狗(WDT)电路

双数据寄存器指针

上电复位标志

灵活的ISP字节和分页编程

3.1.1.2引脚图与引脚说明

VCC(40脚):

供电电源

GND(20脚):

P0口:

P0口为一个8位漏极开路双向I/O口,作为输出端,每脚可吸收8个TTL门电流,当P0口的管脚第一次写1时,被定义为高阻输入,P0口当用于外程序数据寄存器它可以被定义为数据/地址的低八位。

P1口:

P1口是一个内部提供上拉的8位双向I/O口。

P1口缓冲器能接收或输出4个TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入。

P1口被外部下拉为低电平时,将输出电流(

),这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

P2口:

P2口为带内部上拉的8位双向I/O口,P2口缓冲器可接收或输出4个TTL门电流,当P2口被写为“1”时,其管脚被内部电路拉高,作为输入。

P2口管脚被外部拉低,将输出电流(

),这是由于内部上拉的缘故。

P2口用于外部程序存储器或16位地址外部数据存储器进行存取(MOVXQRI)时,P2口输出地址的高八位,在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时(MOVXQRL)P2口输出其特殊功能寄存器的内容。

P3口:

P3口管脚是8个带内部上拉的双向I/O口,可接收或输出4个TTL门电流。

P3口写入“1”时,被内部上拉为高电平,并用作输入。

P3口管脚被外部拉低,将输出电流(

),这是由于内部上拉的缘故。

P3口也可用作AT89S51的一些特殊功能口,如下所列:

P3.0(RXD):

串行输入口

P3.1(TXD):

串行输出口

P3.2(INT0):

外部中断0

P3.3(INT1):

外部中断1

P3.4(T0):

计数器0外部输入端

P3.5(T1):

计数器1外部输入端

P3.6(

):

外部数据存储器写选通

P3.7(

):

外部数据存储器读选通

P3口同时为闪速编程和编程校验接收一些控制信号。

RST:

复位输入,当要使器件复位时,要在RST脚保持两个机器周期的高电平时间。

ALE/

当访问外部存储器时,地址锁存允许输出电平,用于锁存地址的低位字节。

:

此输出为外部程序存储器的读选通信号。

保持低电平时,则只访问外部程序存储器(0000H~FFFFH),不管是否有内部存储器。

XTAL1:

反向振荡器放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡放大器的输出。

3.1.2A/D转换芯片TLC1543

它是10位A/D转换,11个通道串行传输的芯片。

 

其具体管脚如下:

A0-A10是11个输出口,REF为基准电压。

3.1.3D/A转换芯片TLC5620

它是8位的D/A转换,4个通道输出的芯片

 

其具体管脚如下:

DACA-DACD就是输出的四个通道。

它有两种工作模式。

输出的模拟电压为0—2.5V,和模拟电压为0—5V。

输出的模拟电压直接控制可控硅调压模块来调节热得快的供电电压,以达到控制的效果。

3.1.4运放芯片LM324

 

它是一个4运放的芯片,它用来提供检测电路的放大电压的任务,可以支持单双电源供电。

3.1.5执行部件:

此模块内部集同步变压器、移相触发电路和输出晶闸管于一体,不需外部提供工作电源,只需模块本身便可用0-5VDC;0-10V;4-20mA等信号,即可自动控制(或电位器手动控制)实现单相交流电压的无级可调。

整个模块的强电和弱电为全隔离,最大电流等级为350A。

图如下:

图中3,4脚接220V的交流电,1,4脚接热得快的输入电压,3,2脚拿导线相连,CON脚接TLC5620模拟量的输出,COM脚接地脚。

3.2电路原理图设计

3.2.1温度测量电路设计

3.2.1.1方案的选择

方案一温度变送器电流变电压;

 

 

方案二PN结测温

 

方案三采用热电阻测量电路

本次实验提供的实验器材为PT1000,我们采用的是方案三。

但是方案三的电路比较复杂,干扰,损耗比较大。

故我们改进一下。

3.2.2A/D、D/A、单片机、键盘及其显示原理图

本电路图完成了单片机、键盘显示电路、A/D转换、D\A转换、RS485通信的主体电路的设计。

3.3EWB仿真

用热电阻测量温度,要采用三线制,这个是毫无疑问的。

改进后的电路原件明显的比上面的少了很多,这样电路上的损耗也就少的多,线性也会好的多。

设计电路,用EWB仿真如下:

3.3.1PT1000为0度的时候,PT1000的阻值为1000欧姆,仿真电压为0V。

第一个放大器为差分比例运算电路,第一级的输出就为电桥两端电压的差值。

《模拟电子电路基础》p321页,它承担的主要任务就是实现差动输出。

第二个运放为同相比例放大器,实现的功能主要的是放大的作用,在运放的负端,反馈回路上的电阻除以接地电阻极为放大倍数。

前面加了一个稳压二极管,用来稳压。

后面加了一个104的电容用来滤波,以实现稳定的输出。

3.3.2下图为PT1000为100°C的时候,电阻值为1385.06。

仿真电压输出为2.5V。

3.3.3作图标定

先采用两点标定的方法,确定第二个放大器的放大倍数。

然后在验证是否线性。

又PT1000的分度表可以修改电桥电阻的值来测试它是否线性。

仿真结果如下:

实际温度

0

10

20

30

40

50

对应阻值

1000.000

1039.025

1077.935

1116.729

1155.408

1193.971

输出电压

0v

297.7mv

583.0mv

856.7mv

1.120v

1.372v

实际温度

60

70

80

90

100

100

对应阻值

1232.419

1270.751

1308.968

1347.069

1385.055

1385.055

输出电压

1.615v

1.849v

2.074v

2.291v

2.500v

2.500v

做图如下:

 

3.4用99设计原理图

仿真通过之后,用PROTEL99软件进行原理图的设计

如下:

 

由于电路PT1000要在0°C的时候,电桥达到平衡。

即调节R4。

把输出调到0V。

运放都为非理想运放,故采用双电源供电,确保可以调0。

但是在实际电路中,如果单电源也可以的话,就用短路帽把J4短路,就变成了单电源供电了。

如果单电源满足不了要求的话,把J4接负电源就可以了。

这样设计的话,可以避免不必要的麻烦,减少调试工作量。

事实上,我们就是这样做的。

3.5PCB图的设计

 

四、系统软件设计

4.1完整的控制程序

#include

#defineuintunsignedint

#defineucharunsignedchar

#definetim65536-2000///大约延时2ms

sbitdis0=P2^4;

sbitdis1=P2^5;

sbitdis2=P2^6;

sbitdis3=P2^7;

sbitdis4=P3^3;

sbitkey3=P2^0;

sbitkey2=P2^1;

sbitkey1=P2^2;

sbitkey0=P2^3;

#definepk16//显示P

#defineik17//显示I

#definedk18//显示D

#definesk19//显示S

#definemv20//显示O

#defines20/////定义一个数组

intBuf[s],count;

uchardisp[8];

ucharkey,keyx,ts;

inte0,e1,e2,u,y0,r,K;////定义PID算法的变量

intpara[10],ptr;////定义一个指针

ucharcodeledtab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

ucharcodedistab[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xed,0x6b,0x0f,0xe3,0x4f,0x4d,0x8c,0xcf,0xa1,0x92,0x9c};//从0--15最后五位是PIDSO字符

////延时子程序

voidtime(uintt)

{

uinti;

for(i=0;i

}

/////数码管显示子程序,就是将para[ptr]里面的数字,按照个十百千显示在数码管上面

voiddistran()

{

disp[3]=distab[para[ptr]%10];

disp[2]=distab[(para[ptr]/10)%10];

disp[1]=distab[(para[ptr]/100)%10];

disp[0]=distab[(para[ptr]/1000)%10];

disp[4]=~ledtab[ptr];

//在这根据ptr的值设定想要的显示,

if(ptr==0)disp[2]&=0x7f;///在第一个数码管管上加小数数点

if(ptr==1)disp[0]=distab[19];//在第一个数码管管上加S字母

if(ptr==2)disp[0]=distab[16];//在第一个数码管管上加P字母

if(ptr==3)disp[0]=distab[17];//在第一个数码管管上加I字母

if(ptr==4)disp[0]=distab[18];//在第一个数码管管上加D字母

if(ptr==5)disp[0]=distab[20];//在第一个数码管管上加O字母

}

////键盘的扫描子程序

voiddisplay()

{

staticdis=0;////静态变量只在开始的时候赋值一次。

dis=(dis+1)%5;////因为只有4拍按键,所以可以通过修改dis

dis0=1;dis1=1;dis2=1;dis3=1;dis4=1;

P0=disp[dis];

switch(dis)

{

case0:

dis0=0;break;

case1:

dis1=0;break;

case2:

dis2=0;break;

case3:

dis3=0;break;

case4:

dis4=0;break;

}

if(!

key0)keyx=dis+1;////通过dis的值来判断到底是哪排哪列的哪个键按下

if(!

key1)keyx=dis+5;

if(!

key2)keyx=dis+9;

if(!

key3)keyx=dis+13;

}

voidmodi(ucharp,intx)////按键按下后的计算程序,把para[p]=para[p]+x,

{////依此来修改要显示的值。

比如+100,-100,+10,-10,

if(p>0&&p<8)////+1,-1等。

para[p]+=x;

if(para[p]<0)

para[p]=0;

}

/////////////////////////////////////////

//按键的设置

voidkeyproc()

{

if(key>0)

{

switch(key)

{

case1:

ptr=1;break;////para[1]显示当前的设定值,

case2:

ptr=2;break;////para[2]显示P的当前值

case3:

ptr=3;break;////para[3]显示I的当前值

case4:

ptr=4;break;////para[4]显示D的当前值

case5:

modi(ptr,100);break;////数码管显示的值+100

case6:

modi(ptr,10);break;////数码管显示的值+10

case7:

modi(ptr,1);break;////数码管显示的值+1

case8:

break;

case9:

modi(ptr,-100);break;////数码管显示的值-100

case10:

modi(ptr,-10);break;////数码管显示的值-10

case11:

modi(ptr,-1);break;////数码管显示的值-1

case12:

break;

case13:

ptr=6;break;////修改采样周期

case14:

break;

case15:

ptr=5;break;////显示操作值mv,也就是控制量。

case16:

ptr=0;break;////显示实时温度

}

}

key=0;

}

//////////////////////////////////////////

sbitDACS=P3^6;

sbitCLK=P3^5;

sbitDAT1=P3^4;

sbitDAT3=P1^3;

sbitDAT2=P1^4;

sbitADCS=P3^7;

////////////////////////////////////////

//D/A转化的子程序

voidTLC5620(ucharch,ucharx)

{

uchari,p;

p=(ch*2+1)<<5;////输出电压为0—5V

CLK=0;DACS=0;

for(i=0;i<3;i++)

{

p=p<<1;DAT1=CY;

CLK=1;CLK=0;

}

p=x;

for(i=0;i<8;i++)

{

p=p<<1;DAT1=CY;

CLK=1;CLK=0;

}

DACS=1;CLK=1;

}

//////////////////////////////////////

//A/D转化的子程序

uintTLC1543(ucharp)

{

uintres=0;

uchari;CLK=0;

ADCS=0;p=p<<4;

for(i=0;i<10;i++)//把通道号打入1543

{

p=p<<1;DAT3=CY;

CLK=1;CLK=0;

}

ADCS=1;//等待AD转换

time(50);

ADCS=0;

for(i=0;i<10;i++)//取D9--D5

{

CLK=1;res<<=1;

DAT2=1;if(DAT2)res++;

CLK=0;

}

ADCS=1;CLK=1;

returnres;

}

///////////////////////////////////////////////////////

////中断子程序

voidtimer0()interrupt1//中断产生

{

staticintmt=0;////mt刚开始为静态变量,也就是程序刚开始运行的时候赋

longx;////值为0

inti;

TH0=tim>>8;TL0=tim;display();K=10;////将tim的在值赋给T.

if(mt++>para[6])////mt自加1,直到满足条件>para[6],执行下面的程序

{///可以通过修改para[6]的值来修改采样周期

mt=0;count=0;

for(i=0;i

{

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2