用传统的水银或酒精温度计来测量温度,不仅测量时间长、读数不方便、而且功能单一,已经不能满足人们在数字化时代的要求。本文提出了一种新型的数字式温度测量电路的设计方案,该方案集成了温度测量电路和实时日历时钟电路。
温度测量电路的测温范围在-20℃~50℃之间,分辨率为1℃,测温时间小于1秒。电路中采用凌特公司的电阻可编程振荡器LT1799来实现电阻值到频率的转换,然后根据预先存储在ROM中的参数值进行比较映射得到待测温度值。实时日历时钟电路能显示年、月、日、星期、时、分、秒七种时钟信号,用户可以对时间进行设定或修改。整个电路用Altera公司的ACEX1K系列的FPGA进行了硬件仿真实现,电路设计灵活,便于修改。
1测温原理
温度监测主要是利用温度传感器来实现。本设计的温度传感器采用的是NTC热敏电阻,即具有负温度系数的热敏电阻,其电阻值(RT)随温度(T)的升高而迅速减小。阻值温度关系表达式为:
式中,A、B是由半导体材料和加工工艺所决定的两个常数,B值为热敏指数。设计中选用的是R25℃为100kΩ的MF58高精度测温热敏电阻,热敏指数为3650K。
LTC1799是一种电阻可编程振荡器[1],可以产生占空比为50%的方波,并具有温度稳定和电源电压稳定的特性,是一种低功率器件,外围仅需一个元件,即设置电阻和旁路电容。LTC1799标准电路如图1所示,图中0.1μF的电容接在电源引脚与地之间,可以将电源噪声降至最低。第1、3引脚之间连接设置电阻,用来控制输出频率,本设计中用热敏电阻替代设置电阻。第4引脚是一个三态分频引脚,决定主控时钟在输出前是被1、10或100分频,设计中将该引脚接地,即输出分频系数为1。第5引脚为输出引脚,输出频率与设置电阻之间的关系为:
由于热敏电阻的阻值随温度的变化而改变,这样便可以通过LTC1799建立温度和频率之间的关系,以实现对温度的测量。
由(1)、(2)式可知电路设计中存在两种非线性关系:一是热敏电阻的阻值和温度之间的非线性关系,二是阻值频率转换时的非线性。对非线性问题,可以用数学方法进行处理,但算法比较繁琐,而且要占用大量的硬件资源。因此设计中采用了另外一种方法进行处理,即利用ROM预先存储频率—温度的数据,通过查表法进行温度映射。这样既避免了非线性问题的影响又节省了硬件资源。
图1LTC1799标准电路
2硬件电路设计
从功能上划分,硬件电路分为温度测量电路和实时日历时钟电路两大部分。
2.1温度测量电路
2.1.1频率测量电路
频率测量电路主要是采用频率计数的方法,外部晶体振荡器分频后通过门控电路得到周期为2T的采样基准信号count_en和计数复位信号count_clr,在采样基准信号正半周计数器计数使能,计数模块开始对输入信号的频率进行测量,测量时间恰为T,并在采样基准信号的下降沿将采样的数据结果锁存。若在时间T内计数器测得信号脉冲个数为N,则被测信号的频率为:FX=N/T。
计数复位信号用于每一次测量开始时对计数模块进行复位,以清除上次测量的结果。各信号之间的时序关系如图2所示。
图2采样控制信号之间的时序关系
另外,由于测量过程中被测频率信号与采样控制信号之间没有同步锁定关系,在计数的末尾将产生±1的附加误差,即参考文献[2]中所提到的量化误差。所以采样时间T和计数器的位数一定要选择合理。在本设计中,测量的频率在10kHz~300kHz的范围内变化,在待测的温度范围内温度每变化1℃,则阻值最小变化0.5828kΩ。当取T=20ms,R=100kΩ时,N=1000,则±1的量化误差的影响几乎可以忽略不计。
2.1.2数据处理电路
由于在频率测量电路中必然会存在测量误差,所以必须对这些测量数据结果进行处理。本设计针对数据处理提出了一种新的思路,其数据处理流程如图3所示。如图中所示,将频率测量电路中的数据结果N’先通过若干个寄存器移位寄存,然后利用比较器对寄存的数据进行比较,去除最大和最小值后将剩下的中间值相加,最后通过除法器得到平均值N。
图3数据处理流程框图
采用该处理方法处理数据的优点为:
(1)有效降低了测量误差的影响。通过比较器可以将突发的偶然错误数据排除。根据随机误差的补偿性原理,对于有限次测量,可以近似认为多次测量的算术平均值即为真值的最佳估计值。
(2)可以动态地反映被测信号变化趋势。这种方法适用于很多对实时性测量要求较高的场合中。
2.1.3温度映射电路
温度映射电路框图如图4所示。由图4可知,地址计数器和温度值计数器都是通过有限状态机来控制的。状态1:计数器清空;状态2:计数器计数;状态3:锁存计数结果;状态4:计数器结果输出。反复执行以上四种状态可实现温度的实时测量控制。
图4温度映射电路框图
由于温度测量范围是-20℃~50℃,分辨率仅为1℃,所以ROM中只需存储70个数据,选用128×12位的ROM即可满足要求。同时,ROM中存储的不是如1℃、2℃、3℃等整数点的值,而是1.5℃、2.5℃、3.5℃时的值[3],这样既可以保证精度的要求又可以起到四舍五入的作用。初始状态,温度计数器中存储的是-20℃的最低温度值,地址计数器的值清零。来一次CLK信号,地址计数器和十进制计数器的值都加1;然后取得ROM中相应地址的标准脉冲值,与输入的实际采样脉冲值N进行比较。若小于实际输入值则比较器输出S=1,2个计数器继续计数;反之,计数器停止计数。此时温度计数器的值即为实际测量的温度值。
采用ROM进行温度映射除了具有前面提到的优点以外,还使其设计灵活通用,在此电路中只需更改ROM中存储的数据就可以适用于多种类型的温度传感器。
图5时钟计时显示框图
图6时钟工作模式
2.2实时日历时钟电路
2.2.1时钟计时显示
时钟计时显示功能框图如图5所示。各主要模块的功能如下:
(1)由外部晶振分频产生1Hz的SEC信号,输入到模为60的分频计秒电路,待计数器计数至60的瞬间,进位至计数60的分频计分电路加1,而计秒电路也清除为0,重新计秒。
(2)除日计数器外,计分、计时、计月、计星期、计年电路功能类似。
(3)日计数器分为四种情况:闰年2月份29天;平年2月份28天;1、3、5、7、8、10、12月份31天;其余月份30天。
(4)七组计数电路的输出分别是DBS、DBM、DBH、DBD、DBW、DBN、DBY。它们同时只会有一组出现,控制输出的ENB信号是由扫描电路信号S衍生而来的。
(5)扫描电路的扫描频率必须超过人的眼睛视觉暂留频率24Hz,才可以达到点亮单个七段显示器,却享有13个同时显示的视觉效果[4]。
(6)由于除了星期外,其余数据都是由2位十进制数来表示,所以先将以二进制表示的BIN码改成两个位数的BCD码,然后经过七段译码电路送至七段显示器显示。
2.2.2时钟设定
时钟计时和时钟调整模式通过外部按键K1来实现切换,其工作模式如图6所示的由八种状态变量组成。在时钟调整模式(即除去111计时状态)的任意情况下通过按键K2进行时间调整。
各种调整方式的操作类似,以计秒的同步控制信号ECS为例,其组成如下:
ECS=(SEC&SC)|(ADJ&~STATE[2]&~STATE[1]&~STATE[0]);
其中:SC=STATE[2]&STATE[1]&STATE[0];
ADJ=SEC&(~SC)&~K2;
(1)SC表示正常计时状态,SEC和SC共同负责时钟计时动作,STATE为状态变量。
(2)在时钟调整秒数的工作模式下(即STATE为000),由STATE和K2控制的ADJ信号负责手动调整秒数。
本设计基于topdown的设计思想,进行合理模块划分,在数字电路设计部分运用硬件语言Verilog及Quartus工具进行了仿真、综合、适配、下载,最后通过Altera公司的FPGA进行硬件测试,实现了设计要求。该电路可广泛应用在家用电器及办公自动化设备的温度监测和控制领域中。