摘要:该应用笔记介绍了一款基于MAXQ3212微控制器的温度监控器,这个简单系统将检测到的环境温度与系统预先设定的门限进行比较,并控制继电器输出比较结果。系统同时也包括一个1-Wire数字温度计和由8位LED显示驱动器驱动的4位、7段LED显示器。利用微控制和高度集成的显示驱动器,可有效降低外部元件的数量。
本应用笔记说明了如何使用MAXQ微控制器设计这样的控制系统或温度监控器。考虑到MAXQ3212所具备的功能及其设计简单、价格低廉和随处可得的低价位开发环境,MAXQ3210评估板(MAXQ3210-KIT),我们选择这款器件作为系统控制器。本文例程所使用的开发环境是MAX-IDE 1.0版和MAXQ3210仿真开发板A版。
MAXQ3212用作系统控制器,将两个按键开关连接到处理器配置为输入端口的引脚,实现用户接口功能(设置上、下调节)。另外一个微处理器端口用作信号输出,控制继电器动作。
图1. 系统电路图
利用一个4位、7段LED显示器作为系统显示,确保其在各种照明环境下提供有效显示,不需要额外的系统背光。
为简化处理器与显示器之间的接口设计,提供必要的驱动电流和多路复用开关,本系统选用了Maxim的8位LED显示驱动器ICM7218AIPI。该器件包含了所有与微控制器、共阳极LED显示器直接连接的电路。LED驱动器可以最多驱动8位数字,但本系统只使用了4位显示器。无需使用外部限流电阻即可驱动7段显示器的每一段。
系统输出控制标准电机继电器,把交流电切换到任意负载,可以按照负载的供电要求进行设置。系统采用了一个可以切换8A电流、线圈电压恰好是5V系统供电电压的继电器。当然,该继电器可以工作在任何不超过最终驱动FET (BS170)额定电压或电流的条件下。
考虑到这个系统实施的可行性,不需要进行精确地系统仿真或优化系统的闭环性能。实际温度与所要求温度门限的简单比较是唯一的输出切换规则。为了达到实际系统的要求,可以修改软件子程序Relay_Switch。
用简单的DS18B20-PAR测量环境温度,在-10°C至+85°C温度范围内可以提供±0.5°C的测试精度。本系统中,所要求的工作温度范围为+12°C至+38°C (+55°F至+100°F)。芯片的温度测试分辨率是9至12位,可由用户选择,关于分辨率的选择可参考下述内容。其它应用中,每个DS18B20所包含的唯一的64位ID可以支持1-Wire网络中挂接多个DS18B20。
虽然系统中只用到了一个1-Wire器件,但是,1-Wire总线设计工作在一个主机和多个从机,即多点工作,本应用中选用了一片DS18B20进行温度测量,Maxim还可提供多款具有类似功能的器件。例如,需要检测多个位置的温度时,可以使用DS28EA00,它可以简化1-Wire器件在1-Wire网络中的物理位置识别。
在温度监控应用中,通过一条口线进行逐位控制,实现1-Wire总线的通信。实现这一功能的软件请参考应用笔记3769,"用MAXQ3210构建1-Wire温度记录仪"。这个软件专为MAXQ3210和DS1822 Econo 1-Wire数字温度计编写。本应用中只需把原来软件里的9位分辨率更该成10位,应用笔记3769也提供了1-Wire及其应用的参考设计。
将控制位TAP和RSTD设置到相应电平(分别为0和1),这5个引脚的默认调试功能可以被禁,可作为普通引脚使用,不再用于调试功能。本设计中,最终调试的应用程序是显示部分,因为它们需要大量的I/O引脚,但功能比较简单,仅需要少量的调试工作。
汇编程序在指令禁止这五个调试控制信号之前插入较长的时间延时(大约5秒钟),这个延时允许调试板在禁止调试控制之前仍然具有处理器的控制权。由此,调试板能够在必要时对器件进行控制。
本应用中不使用多路复用器,需驱动4位、每位7段的LED。不包括小数点位,共需要28条独立的信号线(4位 x 7段)。显然,如果没有其它电路的话,MAXQ3212无法提供这么多端口信号。所以,我们选用了ICM7218解决这个问题,其内部多路复用器可以提供最多8位显示,不需要额外的限流电阻可直接驱动LED显示。简单通过8位信号和2路控制(模式、写操作)就可以与处理器连接。
检测到按键动作时候,LED会显示当前的设置点。为了帮助指示正在显示的是温度门限,微控制器会打开最后一位小数点 (通常为关闭状态)。如果按键保持足够的时间,温度会以大约每秒0.5°F的速度递增或递减。达到所要求的温度时,用户可释放按键,立即建立新的温度门限。显示器随后返回到环境温度值,最后一位小数点关闭。
温度高有效位
温度低有效位
这个温度传感器的分辨率可以由用户配置为9、10、11或12位,对应的温度分辨率为0.5°C、0.25°C、0.125°C、0.0625°C。DS18B20上电时的默认分辨率是12位,本应用中被初始化为10位,此时,第1位和第0位(2-3,2-4)没有意义,可以分辨最小温度值是0.25°C。
在这个应用里,以华氏温度为单位显示温度。利用下列方程进行转换:
华氏温度 = (摄氏温度 × 1.8) + 32(式1)
因为温度以小数形式表示,而且转换时需要乘以1.8,所以用二进制数进行计算。进行实数乘法运算时,需要在不浪费处理器资源的情况下尽量减小计算误差。DS18B20初始化时,温度值的分辨率设置成10位,所以第1位和第0位没有意义。在温度小数部分的其余2位(第3位和第2位)提供0.25°C (0.45°F)的分辨率。因为MAXQ3212累加器的字节宽度为8位,可以方便地用一个字节作为温度换算的小数部分,乘法器可以包含6位小数信息。从下面可以看出,可以用6位小数近似表示到0.8至0.8的99.61%。
2-1 = 0.500000 => 0.8的62.50%
2-2 = 0.250000 + 0.50000 = 0.750000 => 0.8的93.7%
2-5 = 0.031250 + 0.0750000 = 0.781250 => 0.8的97.65%
2-6 = 0.015625 + 0.781250 = 0.796875 => 0.8的99.61%
用这个精度的数值转换华氏度数据,足以满足这个温度传感器的精度要求。
作为一个例子,我们可以计算测量温度+24.2510,(018.116)摄氏度,可表示为:
温度高有效位
温度低有效位
换一种方式表示,上面的数值可以表示为00000001 1000.01xx2,这个数乘以1.810。把1.810转换成二进制数,用6位表示小数,结果转换成常数0001.1100112。这种转换方法如下:
0000s0 011000.012 = 006116
× 00000000 01.1100112 = 007316
-----------------------
00101011 .100100112 = 2B9316
+ 00100000 .000000002 = 32.010
-----------------------
01001011 .100100112 = 4B9316 = 75.57421910
可以看出,75.574219是精确的计算结果。如果把这个结果去掉2位小数,得到75.5°F,可以达到用计算器进行浮点运算时的0.15°F精度。如此精确的结果足以满足这种应用的要求。
引言
很多应用场合需要调节、控制温度,例如,当环境温度过低时,利用一个灯泡即可提升一个封闭的小空间的温度或烘干未干的油漆等类似物品。多数情况下,利用温度检测、电源开关和加热源即可构成一个闭环温控系统。本应用笔记说明了如何使用MAXQ微控制器设计这样的控制系统或温度监控器。考虑到MAXQ3212所具备的功能及其设计简单、价格低廉和随处可得的低价位开发环境,MAXQ3210评估板(MAXQ3210-KIT),我们选择这款器件作为系统控制器。本文例程所使用的开发环境是MAX-IDE 1.0版和MAXQ3210仿真开发板A版。
系统设计详细说明
概述
这个数字温度监控系统的实施非常简单,图1是系统的电路图。DS18B20 1-Wire®数字温度传感器用来检测环境温度,系统把这个温度与用户设置的温度门限进行比较,如果温度低于用户设置的门限,继电器将产生控制信号。通常情况下系统通过4位LED显示器指示环境温度,当用户设置温度时,LED用来显示用户的设置值。MAXQ3212用作系统控制器,将两个按键开关连接到处理器配置为输入端口的引脚,实现用户接口功能(设置上、下调节)。另外一个微处理器端口用作信号输出,控制继电器动作。
图1. 系统电路图
利用一个4位、7段LED显示器作为系统显示,确保其在各种照明环境下提供有效显示,不需要额外的系统背光。
为简化处理器与显示器之间的接口设计,提供必要的驱动电流和多路复用开关,本系统选用了Maxim的8位LED显示驱动器ICM7218AIPI。该器件包含了所有与微控制器、共阳极LED显示器直接连接的电路。LED驱动器可以最多驱动8位数字,但本系统只使用了4位显示器。无需使用外部限流电阻即可驱动7段显示器的每一段。
系统输出控制标准电机继电器,把交流电切换到任意负载,可以按照负载的供电要求进行设置。系统采用了一个可以切换8A电流、线圈电压恰好是5V系统供电电压的继电器。当然,该继电器可以工作在任何不超过最终驱动FET (BS170)额定电压或电流的条件下。
考虑到这个系统实施的可行性,不需要进行精确地系统仿真或优化系统的闭环性能。实际温度与所要求温度门限的简单比较是唯一的输出切换规则。为了达到实际系统的要求,可以修改软件子程序Relay_Switch。
用简单的DS18B20-PAR测量环境温度,在-10°C至+85°C温度范围内可以提供±0.5°C的测试精度。本系统中,所要求的工作温度范围为+12°C至+38°C (+55°F至+100°F)。芯片的温度测试分辨率是9至12位,可由用户选择,关于分辨率的选择可参考下述内容。其它应用中,每个DS18B20所包含的唯一的64位ID可以支持1-Wire网络中挂接多个DS18B20。
1-Wire接口
Maxim的1-Wire总线采用独特的串行通信接口,只需要一条信号线和地线进行通信。这种接口通过微控制器的一个引脚即可实现与1-Wire器件的通信。接口还具有供电功能,称为寄生电源,利用1-Wire信号线能够在没有1-Wire器件本地供电的情况下进行工作。该系统设计中,接口设计并不重要,关键在于远端温度的测量。虽然系统中只用到了一个1-Wire器件,但是,1-Wire总线设计工作在一个主机和多个从机,即多点工作,本应用中选用了一片DS18B20进行温度测量,Maxim还可提供多款具有类似功能的器件。例如,需要检测多个位置的温度时,可以使用DS28EA00,它可以简化1-Wire器件在1-Wire网络中的物理位置识别。
在温度监控应用中,通过一条口线进行逐位控制,实现1-Wire总线的通信。实现这一功能的软件请参考应用笔记3769,"用MAXQ3210构建1-Wire温度记录仪"。这个软件专为MAXQ3210和DS1822 Econo 1-Wire数字温度计编写。本应用中只需把原来软件里的9位分辨率更该成10位,应用笔记3769也提供了1-Wire及其应用的参考设计。
MAXQ3212 I/O引脚
MAXQ3212共有15个端口引脚可以使用:端口0有8条口线,端口1有7条口线。与ICM7218显示驱动器通信最少需要10条信号线(引脚),4个引脚用于温度设置的上、下调节,继电器驱动以及DS18B20的通信,共占用14个引脚。默认情况下,MAXQ3212 15个引脚中的4个用于JTAG接口(P1.0、P1.2、P1.3、P1.4),1个用于做复位输入(P1.1)。虽然这5个信号控制调试功能,但也用作其它功能。在整个调试过程中需要特别考虑。将控制位TAP和RSTD设置到相应电平(分别为0和1),这5个引脚的默认调试功能可以被禁,可作为普通引脚使用,不再用于调试功能。本设计中,最终调试的应用程序是显示部分,因为它们需要大量的I/O引脚,但功能比较简单,仅需要少量的调试工作。
汇编程序在指令禁止这五个调试控制信号之前插入较长的时间延时(大约5秒钟),这个延时允许调试板在禁止调试控制之前仍然具有处理器的控制权。由此,调试板能够在必要时对器件进行控制。
显示器选择
对显示器的选择主要考虑温度监控器用于室内还是室外,光线的亮暗程度。这样做的目的是希望在除了强光照射情况(比如阳光直射的室外)以外,在各种光照条件下都能看清LED的显示结果。通常采用简单的彩灯就可以提供必要的显示对比度和可见性。LED显示器不再需要额外电路,比如背光电路。本应用中不使用多路复用器,需驱动4位、每位7段的LED。不包括小数点位,共需要28条独立的信号线(4位 x 7段)。显然,如果没有其它电路的话,MAXQ3212无法提供这么多端口信号。所以,我们选用了ICM7218解决这个问题,其内部多路复用器可以提供最多8位显示,不需要额外的限流电阻可直接驱动LED显示。简单通过8位信号和2路控制(模式、写操作)就可以与处理器连接。
用户输入门限设置
鉴于MAXQ3212的端口资源,不可能为用户输入温度门限提供一个并行接口。所以,采用简单的上、下调节键增大或降低温度门限。在系统初始上电时,软件会把温度默认值设置为+72.5°F,并把这个值存储到MAXQ3212 EEPROM内。如果用户增大或降低温度设置点,新的温度值就会存进这个EEPROM。由于EEPROM为非易失存储器,即使在掉电情况下数据也不会丢失。检测到按键动作时候,LED会显示当前的设置点。为了帮助指示正在显示的是温度门限,微控制器会打开最后一位小数点 (通常为关闭状态)。如果按键保持足够的时间,温度会以大约每秒0.5°F的速度递增或递减。达到所要求的温度时,用户可释放按键,立即建立新的温度门限。显示器随后返回到环境温度值,最后一位小数点关闭。
温度转换
这个应用中,利用软件把温度从摄氏度转换到华氏度。执行DS18B20的“温度转换”命令,16位(带符号位)结果按照以下方式储存到温度传感器的寄存器中。温度高有效位
Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit 9 | Bit 8 |
Sign | Sign | Sign | Sign | Sign | 26 | 25 | 24 |
温度低有效位
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
23 | 22 | 21 | 20 | 2-1 | 2-2 | 2-3 | 2-4 |
这个温度传感器的分辨率可以由用户配置为9、10、11或12位,对应的温度分辨率为0.5°C、0.25°C、0.125°C、0.0625°C。DS18B20上电时的默认分辨率是12位,本应用中被初始化为10位,此时,第1位和第0位(2-3,2-4)没有意义,可以分辨最小温度值是0.25°C。
在这个应用里,以华氏温度为单位显示温度。利用下列方程进行转换:
华氏温度 = (摄氏温度 × 1.8) + 32(式1)
因为温度以小数形式表示,而且转换时需要乘以1.8,所以用二进制数进行计算。进行实数乘法运算时,需要在不浪费处理器资源的情况下尽量减小计算误差。DS18B20初始化时,温度值的分辨率设置成10位,所以第1位和第0位没有意义。在温度小数部分的其余2位(第3位和第2位)提供0.25°C (0.45°F)的分辨率。因为MAXQ3212累加器的字节宽度为8位,可以方便地用一个字节作为温度换算的小数部分,乘法器可以包含6位小数信息。从下面可以看出,可以用6位小数近似表示到0.8至0.8的99.61%。
2-1 = 0.500000 => 0.8的62.50%
2-2 = 0.250000 + 0.50000 = 0.750000 => 0.8的93.7%
2-5 = 0.031250 + 0.0750000 = 0.781250 => 0.8的97.65%
2-6 = 0.015625 + 0.781250 = 0.796875 => 0.8的99.61%
用这个精度的数值转换华氏度数据,足以满足这个温度传感器的精度要求。
作为一个例子,我们可以计算测量温度+24.2510,(018.116)摄氏度,可表示为:
温度高有效位
Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit 9 | Bit 8 |
0 (sign) | 0 (sign) | 0 (sign) | 0 (sign) | 0 (sign) | 0 | 0 | 1 |
温度低有效位
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
1 | 0 | 0 | 0 | 0 | 1 | x | x |
换一种方式表示,上面的数值可以表示为00000001 1000.01xx2,这个数乘以1.810。把1.810转换成二进制数,用6位表示小数,结果转换成常数0001.1100112。这种转换方法如下:
0000s0 011000.012 = 006116
× 00000000 01.1100112 = 007316
-----------------------
00101011 .100100112 = 2B9316
+ 00100000 .000000002 = 32.010
-----------------------
01001011 .100100112 = 4B9316 = 75.57421910
可以看出,75.574219是精确的计算结果。如果把这个结果去掉2位小数,得到75.5°F,可以达到用计算器进行浮点运算时的0.15°F精度。如此精确的结果足以满足这种应用的要求。
评论
查看更多