数字温度计的设计.docx
- 文档编号:4380413
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:731.16KB
数字温度计的设计.docx
《数字温度计的设计.docx》由会员分享,可在线阅读,更多相关《数字温度计的设计.docx(15页珍藏版)》请在冰豆网上搜索。
数字温度计的设计
在实际的生活当中许多家用设备或工业生产方面对温度的有所要求,基于这个原因,温度控制一直都是单片机行业研究的课题。
本实验设计的缘由是因为对温度测量有浓厚兴趣,希望借此机会能对一些其中一些原理有所了解,提高自己的实践能力。
在对所做课题的要求有一番了解之后,开始构思硬件电路的主要框架,由于是测温,使用热敏电阻作为温度传感器,题目明确要求用到LM331芯片及单片机最小系统完成设计,因此设计的思路是,用热敏电阻的典型桥电路两端经温度变化产生的电压经LM741放大后,将该电压接入LM331芯片进行幅频转换,送入8051单片机最小系统板进行一段时间内的计数,处理后的数据即对就所测的温度。
通过这个实验对单片机最小系统的作用更有兴趣,实验的结果是可以对小范围温度进行测量。
关键字:
电桥,放大,幅频转换,定时,计数
在许多电子测试、电子检验等对数字频率的测量。
虽然数字频率计
第1章实验任务与系统框图
1.1实验任务
设计一个数字温度计
要求如下:
(1)测温范围:
0℃-100℃
(2)分辨率为±0.1℃,测量精度为±2℃
(3)A/D转换器采用LM331V/F变换
(4)测量结果用单片机最小系统做显示器输出
1.2系统框图
被测量指的是温度,传感器使用的是热敏电阻,变换器指的是将温度的变化转换为电压幅度的变化,V/F指的是将电压信号转换为脉冲信号,该脉冲信号送入单片机进行计数处理,将处理结果经常7279显示电路显示出来。
第二章硬件设计
2.1传感器模块
这一模块采用的是热敏电阻的典型电桥电路,实验使用的热敏电阻是一个负温度系数的电阻,阻值随温度升高而降低。
因此电桥两端压差就会因温度变化而变化。
图1热敏电阻典型电桥电路
人手给热敏电阻加热时,其阻值变化大概为8K到10.5K左右,当为10K时,电位器阻值为3.8K时,电桥平衡,1,2两端压差为0。
由于人手给其加热时阻值变化范围不大,因此电桥最大压差也只有零点几伏而已。
2.2放大电路模块
这里采用LM741放大器将上述电路产生的小信号进行放大,其外接电路如下:
图2放大电路模块
LM741的3脚和2脚分别是同相与反相输入端,上述信号的压差就是从这两个脚输入,7脚与4脚分别接正负工作电源,6脚为放大后的电压输出,这是一个加减运算电路,输出电压为U=100K/10K*(U3-U2)=10(U3-U2)
2.3V/F转换模块
V/F转换模块的核心芯片为LM331,图3为LM331工作的外接电路,其内部主要由输入比较器,单稳态定时器,精密电流源电路等组成,输出驱动管采用集电极开路形式,因而可以通过选择逻辑电流和外接电阻,灵活改变输出脉冲的逻辑电平。
这里使用温度补偿电路,保证在温度范围内电源电压在低至4V时仍有较高的转换精度,单电源或双电源供电,输出范围在100KZ之内,本实验为几千HZ,基准电压产生1.9V直流电压,2脚被钳位在1.9V上,当2脚接电阻后,形成基准电流IR,IR的作用决定V/F的转换系数.
LM331控制输出的单稳态定时器产生T=1.1RtCt,代入下式得
可以看到输出频率与电压信号的大小成线性关系,图中Rt使7脚偏流抵消6脚偏流的影响,Rt和Ct组成低通滤波电路;6端加入调零电路来保补偿单电源供电在小电压输入时引起的误差,与MCS-51单片机连接的简便方法是将频率输出端接至计数器的输入端,通过输入频率,测知电压值。
上述电路的电压信号经100K电阻进7脚,由3脚输出脉冲。
图3V/F转换电路
2.4二分频模块
将上述脉冲信号经过一个由D触发器构成的二分频电路,可得到频率减半的脉冲信号。
D触发器的状态方程为Qn+1=Dn,其输出状态的更新发生在CP脉冲的上升沿,触发器的状态只取决于时钟到来前D端的状态。
其功能表如下:
将D触发器的Q’端与Q端相连,S与R端接高电平,则输出的脉冲信号为输入脉冲频率的一半。
图4二分频电路
2.5单片机最小系统板模块
该最小系统板上8052芯片和7279芯片及其显示电路,这里运用到的是8052芯片的定时器1和计数器0将上述脉冲信号送入单片机计数器0引脚进行一段时间内脉冲个数的计数,将计数值处理送7279外围显示器显示出来。
第3章软件编程
3.1程序流程图
图1程序流程图
3.2细节分析与说明
定时器1工作在定时状态,其初值为TH1=00H,TL1=00H,即使用最大定时时间,计数器0工作在计数状态,当定时器1达到9个定时中断时,将计数器0的计数值TH0送32H单元,TL0送31H单元,其方式字与初值设置如下:
MOVTMOD,#15H;定时器1电路工作在定时状态,定时器0工作在计数状态
MOVTH1,#00H;使用最大定时时间
MOVTL1,#00H
MOVTH0,#00H
MOVTL0,#00H
MOVIE,#88H;开定时器0中断
SETBTR0;开始定时
SETBTR1;开始计数
定时器1的中断服务程序如下:
INT_T1:
INC30H
MOVA,30H
CJNEA,#9,X1;看是否达到6个最大定时时间
X1:
JCOVER
CLRTR0;若是,停止计数
CLRTR1;停止定时
MOV30H,#00H;清空该单元
MOV31H,TL0
MOV32H,TH0
LCALLCONVERT;调用数据转换
LCALLDISP;调用显示
MOVTH1,#00H;重新开始定时
MOVTL1,#00H
MOVTH0,#00H;重新开始计数
MOVTL0,#00H
SETBTR0;重新开始计数
SETBTR1;重新开始定时
OVER:
RETI
在实验过程中,观察到对热敏电阻加热时,计数器所计脉冲个数的值在4000以下,由于要求能达到0.0~100.0摄氏度的显示,因此,假设TH0最大为3,TL0最大为232,则脉冲个数为3*256+7=1000,在到数第二位取小数点,变成100.0,这样最大温度就能达到100度。
数据处理部分程序如下
CONVERT:
MOVR0,#40H
MOV@R0,#7FH;在40H单元存放一个符代码,经7279译码后显示器灭
INCR0
MOVA,32H
CJNEA,#3,LP0;看TH0是否为3
SJMPLPP
LP0:
JCLP2
MOV32H,#3;若TH0大于3,强制其为3,且令TL0为232
MOV31H,#232
SJMPLP2
LPP:
MOVA,31H;若TH0为3,3*256=768
CJNEA,#232,LP1;此时看TL0是否为232,768+232=1000,在第在位数上取小数点,正好为100。
0度
LP1:
JCLP2
MOV31H,#232;若大于,则强制存放TL0单元的内容为232,开始将计数值送以40H为首址单元中
LP2:
MOVA,32H
CJNEA,#1,LP3
MOV@R0,#6;若TH0为1,送以40H为首址单元BCD码256
INCR0
MOV@R0,#5
INCR0
MOV@R0,#2
SJMPLP6
LP3:
CJNEA,#2,LP4;若TH0为2,送以40H为首址单元BCD码512
MOV@R0,#2
INCR0
MOV@R0,#1
INCR0
MOV@R0,#5
SJMPLP6
LP4:
CJNEA,#3,LP5;若TH0为1,送以40H为首址单元BCD码768
MOV@R0,#8
INCR0
MOV@R0,#6
INCR0
MOV@R0,#7
SJMPLP6
LP5:
MOV@R0,#0;若都不是,送以40H为首址单元BCD码000
INCR0
MOV@R0,#0
INCR0
MOV@R0,#0
LP6:
MOVR1,#45H;以45H单元开始存放的是TL0的BCD码
MOVA,31H
MOVB,#10
DIVAB
MOV@R1,B
INCR1
MOVB,#10
DIVAB
MOV@R1,B
INCR1
MOV@R1,A
CLRC
MOVR7,#3
MOVR0,#41H
MOVR1,#45H
LOOP:
MOVA,@R0;将TH0与TL0的BCD码相加
ADDCA,@R1
DAA
MOV@R0,A
RLCA
RLCA
RLCA
RLCA
INCR0
INCR1
DJNZR7,LOOP
MOVA,#0
ADDCA,#0
MOV@R0,A
MOVA,42H;第2位BCD带小数点输出
ORLA,#80H
MOV42H,A
RET
以下为7279显示子程序,7279芯片是一片具串行接口的,可同时驱动8们共阴式数码管的智能显示驱动芯片,要使7279工作,CPU首先要给7279发送一个字节的控制指令,然后再把具体数据传送给7279使它显示出来,而这两条指令之间需要一段时间的延时。
7279发送一个字节的控制指令或一字节数据时,都是一位一位发送的,因此要循环发送8次。
DISP:
PUSHPSW;7279显示子程序
SETBRS0
MOVR1,#90H;显示字符C
CLRCS
MOVR6,#20
DJNZR6,$
MOVA,R1
ACALLSTFS
MOVR6,#12
DJNZR6,$
MOVA,#4EH;字符C代码
ACALLSTFS
MOVR6,#04H
DJNZR6,$
SETBCS
INCR1
CLRCS;显示一个小圆圈
MOVR6,#20
DJNZR6,$
MOVA,R1
ACALLSTFS
MOVR6,#12
DJNZR6,$
MOVA,#63H;小圆圈代码
ACALLSTFS
MOVR6,#04H
DJNZR6,$
SETBCS
MOVR7,#5
MOVR0,#40H
MOVR1,#82H
DISP1:
CLRCS
MOVR6,#20
DJNZR6,$
MOVA,R1
ACALLSTFS
MOVR6,#12
DJNZR6,$
MOVA,@R0
ACALLSTFS
MOVR6,#04H
DJNZR6,$
SETBCS
INCR0
INCR1
DJNZR7,DISP1
POPPSW
RET
STFS:
PUSHPSW;7279发送一字节子程序
SETBRS1
MOVR7,#8
STF1:
RLCA
MOVDAT,C
SETBCLK
MOVR6,#04H
DJNZR6,$
CLRCLK
MOVR6,#04H
DJNZR6,$
DJNZR7,STF1
POPPSW
RET
第4章实验调试
4.1硬件调试
在实验开始之初,编写完代码且编译成功后,用proteus软件进行硬件仿真,这里的模拟电压是直接用一个滑动变阻器接上电源后产生,改变其阻值,得到不同的电压,将该电压加到后续电路;碰到的问题是如果不加D触发器进行二分频,则从LM331芯片看不到脉冲输出,通过翻阅实验指导书,发现书上V/F转换电路后面加了个二分频电路,于是在仿真图上加上该芯片组成个分频器后,其输出端通过示波器果然看到了脉冲信号。
对于这个问题,没有去深究,也没有看到相关资料的说明,估计这里可能是分频器还起到了一个驱动的作用。
然后开始硬件焊接时,是按照仿真图上的样子连接下来的,依旧是用一个变位器接电源产生模拟电压,发现改变其阻值,显示器阻值确实会照预想变化,说明硬件连接成功。
接下来是思考如何用温度传感器来产生模拟电压,而不是依靠一个变位器,经老师提点,选择热敏电阻作为温度传感器,采用其典型电桥电路,由于热敏电阻随温度变化,电桥两端压差会有变化,而这个压差可能不大,因此还思考如何设计一个较好的放大电路,将这个小信号放大后,接至LM331进行V/F转换。
有了这个思路,开始在另一块试验板上将这个任务分两个模块进行,从图1看出,其中电桥电路有两个阻值严格相等的电阻,因此选择电阻对阻值要精确测量,电桥连接好后,加上电源,对热敏电阻加热,发现电桥两端确实有压差出现,而且最大确实只有零点几伏大小。
下面就是要把这个小信号进行放大,选择LM741作为放大器形成一个加减运算电路,并且把放大器倍数初设为15,当给正负输入端加入较小的模拟电压时,发现输出电压确实是输入电压的15倍,这样放大器这块也设计成功。
之后,便在实验板上把上述两个模块电路焊上去,所有焊接工作完成后进入软件调试。
在此,又碰到一个奇怪的问题,当给热敏电阻加热一段时间后,7279显示电路数码管显示的值不会再增加,而且还不稳定,最后会跳回零去,其实这个问题在用proteus进行仿真时也遇到了,当时怀疑是否因为温度越高,模拟电压越大,脉冲频率越大,脉宽越窄,导致计数器识别不来,计数出现紊乱,但是细想又不可能,脉冲信号频率再怎么大输出频率最大也只有几十K,对于计数器来说,这样大小的频率对计数是没有影响的,后来怀疑是放大倍数最大了,但是即使放大倍数为15,LM331的最大输入电压也只有4点几伏,而它能接受的能达到10V,权衡之下,还是将放大倍数降为10倍,即把反馈电阻由150K变为100K,这样当加热热敏时7279显示电路数码管显示的值到后面不会因温度较大时而出现紊乱,只不过这时最大计数值下降了零点几倍。
4.2软件调试
定时器1的定时时间是要控制好的,要反复调试,它要使在这个定时时间段内计数器0的值大小合适,这样后面进行数据转换就不会很麻烦,最后选定为600ms。
对于这个系统,到底具体的温度对应的单片机的计数值是多少,这个是要通过理论计算得来的,但是这样是很难算出来的,因为这跟具体的电路及芯片参数都有关系,况且理论计算都是要有严格的推算步骤的,还有,课设要求能进行0—100度的温度显示,而人手加热只可能在30几度温度内变化,因此,这次实验并不是真实地显示实时温度,而只是摸拟一下热敏电阻随人手加热温度升高,导致显示器显示值增大的这个现象而已,也就是说,该实验的实验现象设计为当不加热时,显示器显示值在0度左右,而人手加热时,最高升致100度。
因此想了一个办法,就是当温度已升到较大,计数值已达1000时,令显示器显示100度,当温度还在升高,计数值还在增大时,也是在代码中强制令TH0为3,TL0为232,即计数值为1000。
这样最终温度值就会在000.0C—100.0C之间进行显示。
实验小结
这次课程设计是一个小型的基于单片机最小系统的数字温度计的设计。
在这个软硬件结合的实验中,有很多感触。
要完成一个大的设计性实验,最好是分步做,等一部分完成后再进行下面的部分,还有就是即使硬件能跑起来,得到的数据也要经过软件编程合理地处理后才能得到一个较好的显示结果,另外还有一点就是当我们对某一部分电路对总体电路的影响不明确时,可以在另一块小板上对这一小块电路进行实验,成功后再在总硬件板上试行。
在硬件设计时,曾经想过不用热敏电阻做温度传感器,因为觉得这样可能硬件电路会比较麻烦而且没有把握会成功,因此直接通过一个电位器分压得到模拟电压,在用电位器做成功之后,感觉一个温度计系统还是得需要一个温度传感器才像样的,在老师的提点下,才开始考虑用热敏电阻的典型电桥电路替换电位器得到模拟电压。
前面已说过,这个实验只是摸拟一下热敏电阻随人手加热温度升高从而导致显示器显示值增大的这个现象,而要显示真正的实时环境温度,还要根据硬件具体参数进行理论推算,超越了自己所能达到的难度范围,况且实验要求0—100度温度显示,就更不可能用人手加热实现,因此,如实验调试中所述,实际想了一个比较取巧的方式。
最让人觉得兴趣倍增的还是最小系统板这一块,因为所编的程序通过下载线全部烧入到8051的ROM中去了,也就是说,当所有调试工作完成后,这个最小系统与所焊的硬件电路可单独脱离计算机,而成为单独工作的最小系统。
从这次设计,也更加体会到嵌入式系统深入到生活各处的广泛应用,提升了自己对这方面的兴趣。
附录
附录I总电路图
附录II元件清单
原件种类
原件名称
数量
芯片
74LS74
1个
LM741
1个
LM331
6个
电解电容
1uf
1个
瓷片电容
100pF
1个
10pF
1个
电阻/欧姆
6.2K
1个
6.8K
1个
10K
7个
51K
1个
100K
4个
变位器
5K
2个
热敏电阻
NTC
1个
插槽
16脚
1个
8脚
2个
附录III作品展示
该图显示的温度为30.3摄氏度。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 温度计 设计