打印

使用基于RISC的MCU简单的温度指示器

[复制链接]
431|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Sode|  楼主 | 2018-11-27 11:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用基于RISC的MCU简单的温度指示器

非常简单的温度指示器可以在8位RISC微控制器周围构建(参见图)。来自温度感应器的数据由MCU处理并且用于显示温度。在本电路中使用的MAX6577温度感应器可以测量范围在-40°C至125°C之间的温度。它几乎不需要其他外部元件。
这个感应器可以将温度转换成其输出信号频率与绝对温度(K)成比例的方形波。如果这个频率已经测量出来了,计算温度就会变得相当容易。这可以通过不同的时间测量电路或者MCU中提供的定时器来实现。

这个电路使用AVR AT90S4433低成本MCU用来处理感应器数据和显示温度。在其他器件中,这个MCU配有4千字节的系统内可编程闪存、128字节的SRAM、128字节的系统可编程EEPROM、一个六通道10位ADC、20个可编程I/O线路、多个定时器和一个UART。

温度在三个共阳极的七段显示器上显示。显示器的各个段都连结在一起,在软件的帮助下对显示的数据进行复用。这种方法不仅减少了I/O接口线路数,而且还降低了电流要求。

显示器连接到MCU的端口D。为显示温度读数,数据被锁存在这个端口上,且相应的显示器被激活。这可以通过定时器0来实现,该定时器被配置具有64预标定因子。只要定时器0发生计数上溢,就会产生中断。定时器0的ISR锁存端口D(即显示器的数据总线)上的显示数据,并且生成相应的信号来启用各自的显示器装置(在端口B处,并且通过各自的晶体管Q1、Q2或者Q3)。



温度测量使用定时器1来实现。定时器计数确定了输入信号的脉冲宽度。sensorstatus()子程序重复检查感应器信号的逻辑状态。一旦检测到第一个上升边沿,就会启用先前在定时器模式中将预定标因子配置为1的定时器。然后,当检测到感应器信号的第一个下降沿时,就会停用定时器。接着,定时器内容就会被显示出来,并且可以用于计算温度感应器信号的脉冲宽度。定时器内容显示之后,定时器就会被重新初始化为0。一旦信号的时间周期已知,即可轻松地算出信号频率(fOUT=1/tOUT)。此后就会检查数据是否超过这个限制。

由于输入信号是一个占空比为50%的方波,所以总的脉冲周期为宽度的2倍。因此,温度的计算公式为CPU_FREQ/(2×宽度)。然后,从中减去273.15 K即可得到摄氏度温度。通过执行可以处理浮点数据的AVR-GCC开发环境,将脉冲的时间周期转换成温度已经变得相当简单。

要显示的范围状态和温度信息通过变量“r”来实现。一旦定时器0的ISR处于激活状态,就会检查“r”的值,并且各自的数据也会被锁存端口D上,这取决于DISPLAY_ON变量的值,这个变量也可以用来选择各自的激活的七段显示器单元。如果输入数据在范围之内,则ISR调用binarytobcd()子程序,这个子程序可以将二进制数据转换成有效的BCD格式。BCD数据(半字节)是根据激活的七段显示器单元来分开的,这可以再次通过关联DISPLAY_ON的值来实现。一旦ISR完成了它的工作,定时器0就会被重新初始化为一个值(Refresh_Val),这个值将产生下一个中断,接着显示下一数据,并且不会引起闪烁。

本软件使用AVR-GCC开发环境编写。它可以处理所有的AVR MCU功能,包括不同的中断、EEPROM、定时器、UART和ADC等。本软件被用来编译C源程序,并生成HEX文件。可以使用基于并行端口的编程器(例如uisp)将这个文件下载到MCU的系统内可编程闪存中。

可以方便地进行修改本软件,从而显示从-40°C至125°C这个完整范围内的温度,或者以华氏度显示数据。还可以修改这个软件以显示输入信号的频率。



相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1049

主题

1522

帖子

8

粉丝