找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4579|回复: 1
打印 上一主题 下一主题
收起左侧

基于51单片机的恒温箱设计

[复制链接]
跳转到指定楼层
楼主
ID:723490 发表于 2020-4-22 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

恒定温度的设备,被广泛地应用于生产、生活、实验等领域。在医用、水产、特种工业、工业探伤、照相等行业,都需要有稳定而精确的温度。在本设计中,我们针对培养箱而设计的一个恒温系统,在系统里,通过对恒温箱温度的检测与变送传到单片机,与给定值进行比较,单片机对数据进行处理,根据偏差信号的大小输出驱动PWM输出,通过改变PWM输出的周期和幅值,控制发热丝的功率,从而达到恒温箱内温度控制的目的。

本设计是对恒温箱进行温度控制。从箱内温度的检测、变换到信号的转换和传送这一系列的过程都牵扯到很多的知识,在设计过程中我们也遇到很多困难,比如说温度测量器件的选用,变换成电压信号还是电流信号,相应的怎么传送等,都经过了考虑才选择了这个方案。单片机的设计中,单片机外部线路的设计,端口的分配和选用,复位和内部时钟的配合和电路的驱动等方面也遇到了不少问题,经过讨论我们都基本上解决了。加热电路我们选择了IGBT作为开关器件,IGBT可控而且开关频率很高,适合用在控制频繁通断的场合。

这里利用芯片DS18B20作为恒温箱的温度检测元件。DS18B20芯片可以直接把测量的温度值变换成单片机可以读取的标准电压信号。单片机从外部设置两位拨码开关进行预置数,读入的数据与预置数进行比较,根据偏差的大小,单片机执行程序对PWM进行控制,经过对PWM的输出脉冲进行放大,也就是对恒温箱内电阻丝的驱动,对恒温箱进行加热,使箱内温度升高,热电偶连续对恒温箱进行温度检测,当偏差存在时单片机就继续驱动后继电路进行加热,直到偏差为零。

本设计主要完成了热电恒温箱单片机微机控制系统的硬件电路设计和控制程序的软件编写,对控制系统的主要器件进行了选型和分析,并且对整个控制系统的PID控制程序进行了仿真调试。整个设计基本满足设计要求。


2 总体方案设计

2.1 方案一

   

图2.1 方案一总体图

利用热电偶作为恒温箱的温度检测元件,应用桥式电路对热电偶作为补偿。热电偶出来的电流信号通过转换变成电压信号,再进行A/D转换变换成单片机可以接受的电压信号,在从单片机读入进行数据处理。单片机从外部设置两位拨码开关进行预置数,读入的数据与预置数进行比较,根据偏差的大小,单片机执行程序对PWM进行控制,经过对PWM的输出脉冲进行放大,也就是对恒温箱内电阻丝的驱动,对恒温箱进行加热,使箱内温度升高,热电偶连续对恒温箱进行温度检测,当偏差存在时单片机就继续驱动后继电路进行加热,直到偏差为零。在控制过程中,存在着检测信号与控制信号之间的滞后关系,因此,在单片机的控制程序里加入了数字PID控制算法,是控制更加的准确。单片机的设计包括外部时钟和上电复位电路计。单片机对温度的检测可以通过三个LED进行显示。

方案二

图2.2方案二总体图

利用DS18B20作为恒温箱的温度检测元件,直接把测量的温度值变换成单片机可以读取的标准电压信号。单片机从外部设置两位拨码开关进行预置数,读入的数据与预置数进行比较,根据偏差的大小,单片机执行程序对PWM进行控制,经过对PWM的输出脉冲进行放大,也就是对恒温箱内电阻丝的驱动,对恒温箱进行加热,使箱内温度升高,热电偶连续对恒温箱进行温度检测,当偏差存在时单片机就继续驱动后继电路进行加热,直到偏差为零。在控制过程中,存在着检测信号与控制信号之间的滞后关系,因此,在单片机的控制程序里加入了数字PID控制算法,是控制更加的准确。单片机的设计包括外部时钟和上电复位电路计。单片机对温度的检测可以通过1602液晶显示。

2.2 方案比较与选择

a.方案一用的是热电偶进行温度的测量,热电偶的测量范围和精度要求都符合本设计的需要,在不同的环境下所需要的补偿是不一样的,而且输入单片机要进行模数转换,增加了转换电路即增加了成本,转换还需要时间,那往往就给控制带来了很多麻烦,而且给恒温巷的使用带来一定的局限性,使保温箱不能得到推广,给厂家大批量的生产也带来了很多不便。线性化的处理往往是应用热电偶的约束。而在方案二中,应用的是测量温度的专用芯片,避免了上述的一些问题,而且应用方案二的芯片使测量的灵敏度增加不少。

b.在方案一中,热电偶测量出来的信号是电流信号,电流信号适合远距离传输,而到单片机的距离不大,电流信号容易受外界的干扰而影响了测量信号,导致测量的误差增加,就算可以用其他方法消除干扰信号,也麻烦。而在方案二中,测量出来的是电压信号,能直接输入单片机,方便而且准确,不容易受外界干扰。

c.在方案一中,需要进行电流——电压的转换,在经过A/D转换,在经过标准化处理才能的到标准的数字电压向输入单片机,而方案二中却可以直接输入。

综上所述:方案二比方案一有更大的优越性,而且方案二只用一个芯片就可以达到目的,而方案一却要经过多个步骤,从经济角度看,方案二更加经济实惠,且使用性强。因此这个设计决定起用方案二来进行综合设计。


3 系统硬件设计

3.1 温度采集模块设计3.1.1数字温控芯片DS18B20介绍

在本设计中,选用的是温度测量的专用芯片DS18B20。DS18B20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-50℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃。DS1822的精度较差为±2℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。新一代产品更便宜,体积更小。DS18B20、DS1822的特性DS18B20可以程序设定9~12位的分辨率,精度为±0.5℃。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。省略可存储用户定义报警温度、分辨率参数的EEPROM, 精度降低为±2℃,适用于对性能要求不高,成本控制严格的应用,是经济型产品。


3.1.2 DS18B20的内部结构

DS18B20内部结构主要由四个部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的内部结构如下图所示。

图3.1 DS18B20的内部结构

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校检码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。                  

  表3.1

bit7 bit6 bit5 bit4 bit3    bit2   bit1    bit0

2^3

2^2

2^1

2^0

2^(-1)

2^(-2)

2^(-3)

2^(-4)

    bit15 bit14 bit13 bit12 bit11   bit10   bit9     bit8

S

S

S

S

S

2^6

2^5

2^4

这是12位转化后得到的12位数据,存储在18B20的两个比特的RAM中,二进制中的前面5位符号,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度.

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625的数字输出为FF6FH,-55℃的数字输出为FC90H.

3.1.3 DS18B20的外形及引脚说明

外形如图3.1.2所示。

图3.2  DS18B20的外形与引脚图

1(GND):地
2(DQ):单线运用的数据输入输出引脚
3(VDD):可选的电源引脚

实际电路图:

                  

图3.3 DS18B20的外形

3.1.4DS18B20的特性及工作原理

DS18B20可以程序设定9~12位的分辨率,精度为±0.5℃。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度,存储在EEPROM,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!

DS1822DS18B20软件兼容,是DS1820的简化版本,省略了存储用户定义报警温度,分辨率参数的EEPROM,精度降低为±2℃。适用于对性能要求不高,成本控制严格的应用,是经济型产品。

DS18B20工作原理:

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。

                     图3.4 DS18B20工作流程图

   

图3.3(2)  DS18B20读写时序图

3.2 预置数

输入预置数由两个十进制拨码开关来完成,如图7。每一个拨码开关有四位,由0000到1111,取其中的0000到1010就可以实现十进制中0到10的设定,两个就可以构成两位的输入,就可以实现0到100的置数。

3.2.1拨码盘介绍

由于BCD拨码盘方便、直观、实用、易于操作等优点,被广泛应用于参数设定的监测仪表,机械机床等设备上,具有很大的应用空间。图3.2.1为拨码盘的内部原理图,1、2、4、8四个端子为数据端,com为公共端,当拨码盘窗口显示的数值不为零时,其数据线将有一位或几位与com端接通。例如:当拨码盘输出为5时,1、4与com端接通。

图3.4  BCD拨码盘内部原理

读拨码盘流程图:

图3.7 读拨码盘流程图

实际电路原理图:

                  

图3.8实际电路原理图

3.2.2 时钟

时钟电路用于产生单片机工作时所需的时钟信号。单片机本身就是一个复杂的同步时序电路,为保证同步工作方式的实现,单片机应该在唯一的时钟信号控制下工作,严格按照时序执行指令进行工作,而时序所研究的是指令执行中各个信号的关系。

时钟是单片机的心脏,单片机的各功能部件的运行都是以时钟频率为基础,有条不紊地一拍一拍地工作。因此,常用的时钟电路有两种方式,一种是内部时钟方式,一种是外部时钟方式。

单片机内部有一个用于构成振荡器的高增益反相放大器,该增益反相放大器的输入端为X1,输出引脚为X2。着两个引脚跨接晶振和微调电阻,就构成一个稳定的自激振荡器。

图3.9 自激振荡器

3.2.3 复位电路

本设计用的是手动复位电路中的按键电平复位电路。通过RST端经电阻与电源Vcc              接通而实现。如下图所示。

图3.10 按键电平复位电路

3.2.4LCD显示

单片机对数据进行处理后通过LCD进行显示。LCD各管脚如下图所示,接单片机的P0口和P2口。

图3.11 1602液晶电路

3.2.5加热电路

下图电路供应电源及加热电路驱动

           图3.12 整流电路图

图3.13  5V与12V电源

图3.14 加热驱动电路

交流220V电压通过整流、滤波后得到一个标准的直流电压,此时,二极管无法导通。当单片机把温度信号读进去后,与给定值进行比较,当偏差存在的时候,单片机通过34口输出一个脉冲,出来后进行信号磁隔离,MOSFET控制电压,驱动IGBT,使加热回路导通,这样,箱内温度就得到增加。此时单片机继续从温度检测芯片那里读数据,加热到当偏差为零时,脉冲变低,加热回路停止工作。

3.2.6IGBT管介绍

IGBT(绝缘栅双极晶体管)作为新型电力半导体场控自关断器件,集功率MOSFET的高速性能与双极性器件的低电阻于一体,具有输入阻抗高,电压控制功耗低,控制电路简单,耐高压,承受电流大等特性,在各种电力变换中获得极广泛的应用。


4  PID控制

4.1 PID控制原理

通过输入通道将温度传感器DS18B20采集到的被控对象当前温度转变为数字量并输入到单片机中,单片机求出输入的当前温度值与设定值的偏差,并根据该偏差进行PID运算,最后,根据PID运算的结果由单片机输出控制数字信号经过磁隔离,经驱动电路控制晶闸管整流电路,控制恒温箱加热。本设计分两个阶段:

(1)自由升温阶段控制.在这个阶段,希望升温越快越好.所以,控制上只要让电热丝以最大的功率加热也就是单片机输出脉冲的最大值.

在这个过程中,不断测温,当预设温度与实际测量的温度之差小于等于10度时进入控温阶段.

(2)控温阶段.恒温箱这个控制对象属于带纯滞后的惯性环节,所以采用PID控制.根据给定的参数设置.编写增量式PID算法子程序等.


4.2 PID控制系统框图

                          图4.1 PID控制系统框图

4.3 PID算法

增量式算法中,输出量与执行的变化量相对应,即是前后两次采样所计算的位置差值,其算式为:△u(n)=u(n)-u(n-1)在此就不详细板书了,详细式子请见附录.

a.中断子程序流程如下图所示,它的作用是判断是否进入控温阶段,若已进入控温阶段,则调用PID算法子程序,否则输出最大脉冲,使晶闸管整流器以全功率加热.


图4.2中断子程序流程图                  

b.增量式PID算法的程序流程图如下图所示,计算△u(n)时只需要现时刻以及以前的两个偏差值e(n)、e(n-1) 、e(n-2),初始化程序置初值e(n-1)=e(n-2)=0,由中断服务对过程变量进行采样,并根据参数计算出△u(n).


图4.3 PID算法子程序


5 软件设计

5.1 编程平台简介

KeilSoftware公司推出的uVision3是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。

Keil uVision 系列是一个非常优秀的编译器,受到广大单片机设计者的广泛使用。其主要特点如下:

  • 支持汇编语言、C51语言等多种单片机及设计语言;
  • 可视化的文件管理,界面友好;
  • 支持丰富的产品线,除了51及其兼容内核的单片机外,还新增了对ARM内核产品的支持;
  • 具有完善的编译链接工具;
  • 具备丰富的仿真调试功能,可以仿真串口、并口、A/DD/A、定时器/计数器以及中断等资源,同时也可以和外部仿真器联合进行在线调试
  • 支持在一个工作空间中进行多项目的程序设计;
  • 支持多级代码优化。
5.2 程序流程图设计

图5.1程序流程图

5.3 控制系统仿真调试

系统控制程序编写好以后,要进行单片机控制系统的仿真调试,以验证程序的正误,确保系统的安全稳定运行。用Proteusisis软件进行仿真,具体步骤如下:

1 进入仿真环境并加载程序

图5.2 仿真环境和加载程序界面

2 运行程序且对状态进行监控

系统运行功能检测。上电运行时界面如下图所示:温度测量系统正常,LCD正常显示。

图5.3 验证功能状态图一

图5.4 验证功能状态图之二

经ISIS仿真,数码拨盘正常。




附录1:程序设计
根据程序流程图的设计,以及整个控制系统的输入输出信息分析,设计的控制程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define LCD_DATA P1

  6. sbit LCD_RS=P3^5;
  7. sbit LCD_RW=P3^6;
  8. sbit LCD_E =P3^3;
  9. sbit DQ=P3^1;
  10. bit presence;

  11. uchar  code  cdis1[ ] = {"   DS18B20 OK   "};
  12. uchar  code  cdis2[ ] = {"  TEMP:    .  C "};
  13. uchar  code  cdis3[ ] = {" DS18B20  ERR0R "};
  14. uchar  code  cdis4[ ] = {"  PLEASE CHECK  "};
  15. uchar data  temp_data[2] = {0x00,0x00};
  16. uchar data  display[5] =   {0x00,0x00,0x00,0x00,0x00};
  17. uchar code  ditab[16] =    {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  18. uchar code  mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};

  19. /*初始化lcd1602                                      */
  20. /*******************************************************************/
  21. void LCD_Init()
  22. {
  23. LCD_DATA=0;                                            
  24. LCD_Write_Cmd(0x38,0);                 //三次显示模式设置,不检测忙信号
  25. LCD_Delay(5);
  26. LCD_Write_Cmd(0x38,0);
  27. LCD_Delay(5);
  28. LCD_Write_Cmd(0x38,0);
  29. LCD_Delay(5);
  30.   LCD_Write_Cmd(0x38,1);              //显示模式设置,开始要求检测忙信号:8位、2行、5X7点阵
  31. LCD_Write_Cmd(0x08,1);   //关闭显示
  32. LCD_Write_Cmd(0x01,1);                //清屏
  33. LCD_Write_Cmd(0x06,1);                //显示光标移动设置:文字不动,光标自动右移
  34. LCD_Write_Cmd(0x0C,1);   //显示开及光标设置:光标关、光标不闪烁
  35. }
  36. /*初始化ds1820                                      */
  37. /*******************************************************************/
  38. DS18B20_Init(void)
  39. {
  40.   DQ=1;
  41.   DS18B20_Delay(8);
  42.   DQ=0;
  43.   DS18B20_Delay(255);
  44.   DQ=1;
  45.   DS18B20_Delay(8);
  46.   presence=DQ;
  47.   DS18B20_Delay(100);
  48.   DQ=1;
  49.   return(presence);
  50. }
  51. /* 主函数     */
  52. /************************************/
  53. void main()
  54. {
  55.                  Ok_Menu();
  56.               do
  57.   {
  58.                  DS18B20_Read_Temperature();
  59.      DS18B20_Disp_Temperature();
  60.               }
  61.   while(!presence) ;
  62.               while(1)               
  63.    Error_Menu();
  64.   do
  65.   {
  66.                  DS18B20_Init();
  67.               }                 
  68.                             while(presence) ;
  69. }
复制代码

附录2:硬件电路原理图


以上的的Word格式文档51黑下载地址:
恒温箱的设计.doc (753.5 KB, 下载次数: 66)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:672979 发表于 2021-5-24 15:25 | 只看该作者
能给个hex文件吗,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表