导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[讨论]用热敏电阻测温度.电路图修正过.[djrwww]

 *第14628篇: [讨论]用热敏电阻测温度.电路图修正过.

  
楼 主:djrwww 2003年7月19日10:40
 [讨论]用热敏电阻测温度.电路图修正过.
请教各位.该电路用单片机如何控制热敏电阻准确测温度?它的误差有多大?
                        谢谢.

此主题相关图片如下:
按此在新窗口浏览图片
  
2楼:Lichunfu 2003年7月19日17:00
 我最近刚完成一个温控器!
我也是用热敏电阻测量温度,误差1度吧,因为我只显示2位,小数就用四舍五入了,不过电路和你的不太一样。我参考周立功提供的利用模拟比较器实现的∑-△ADC,稍微做了修改。有兴趣你可以
  
3楼:djrwww 2003年7月21日10:41
 是不是周立功已把那个利用模拟比较器实现的∑-△ADC电路删掉?
,太遗憾啦.
望Lichunfu能详细告知"用模拟比较器实现的∑-△ADC"?
或不吝贴你的测量温度那部分原理参考.
  
4楼:Lichunfu 2003年7月21日11:27
 方案给你,不知是否有用。
原理图说明:因为AT89C51的I/O口高电平驱动能力不足,故加了R3。
R1选择问题,假如你的测量的温度多数情况下在T附近,则R1就取在T度时热敏电阻的阻值,因为这样可以使你的ADC值在128上下摆动。当然也可以取其他值,我用的就是25度时的值,因为厂家会给出25度时的热敏电阻的阻值,这个值比较准确,而且一般为整数,在电阻的系列值中容易找到R1的值,我用的热敏电阻是R25=10K的,所以R1用了10K的精密电阻(1%)。热敏电阻我用的是3%的NTC电阻。转换值与温度的关系你用热敏电阻的公式推一下就可以得到。还有该方案的测温范围不是很宽,你可以尝试用恒定电流加在热敏电阻上的方法,只是uA级的恒流源不好做,因为该方案能满足我的要求,故没有做其他尝试。
;--------------------------------------------------------------------
; 程序名称: ∑-△AD 转换程序
; 输入条件: (无)
; 输出条件: A=8位ADC结果
; 影响资源: A、PSW、R6、R7
;--------------------------------------------------------------------
ADCProg:
 SETB ADC
 MOV R6, #2   ;为了正确跟踪输入电压,采样连续采样两次,舍去第一次的值
 MOV R7, #0
AD_Start:
 CLR A   ;ADC输出=0
AD_Loop:
 MOV C, ADC
 MOV ADC_CON, C
 JC AD_Count
 DEC A   ;ADC输出减1
AD_Count:
 CALL Delay_15us
 DJNZ R7, AD_Loop  ;采样256次
 DJNZ R6, AD_Start  ;循环2次
 SETB AD_CON
 RET
;====================================================================
;15us延迟
Delay_15us:
 MOV R4, #6
 DJNZ R4, $
 RET

此主题相关图片如下:
按此在新窗口浏览图片
  
5楼:djrwww 2003年7月21日17:26
 先谢谢Lichunfu,请问你用什么热敏电阻的公式,测温范围是多大?
  
6楼:Lichunfu 2003年7月22日10:09
 NTC热敏电阻B值公式。
先更正昨天的帖子,我用的热敏电阻的精度是1%,不是3%。

  B= T1T2 Ln(RT1/RT2)/(T2-T1) ——————————(1)
  B:NTC热敏电阻的B值,由厂家提供;
  RT1、RT2:热敏电阻在温度分别为T1、T2时的电阻值,厂家提供的是温度为298.15K  (25摄氏度)时的阻值。
 T1、T2:绝对温标。
 我还是针对昨天的原理图简单的说说:
 由(1)式可得:
                  B(1/T1-1/T2)
 RT1/RT2=e                         ——————————————(2)
取T1=298.15K,此时热敏电阻的阻值为RT1=10K,故取R1=10K,设温度为T2时的分压值为V2,则:V2=RT2Vcc/(RT2+R1),得 RT2=V2R1/(Vcc-V2),所以
  RT1/RT2=Vcc/V2-1   代入(2)式得
    B(1/T1-1/T2)
  e                      =Vcc/V2-1
  得 B(1/T1-1/T2)=Ln(Vcc/V2-1)

  T2=T1/(1-T1(Ln(Vcc/V2-1))/B)
  设8位ADC输出值为N,则 Vcc/V2-1=256/N-1
  所以 T2=T1(1-T1(Ln(256/N-1))/B)
 换算为摄氏温度后则
         T=T2-273.15

你可以用C或VB编个程序从N=0开始到N=255计算出温度表,然后以N为索引查表直接得到温度。也可以通过实际测试出温度值构成温度表格,采用插值等算法得到温度值。我这里是以T1=25度计算的,你可以通过调整T1的值来测试更高或更低温度。


>>>>>>对该主题发表你的看法

本主题贴数6,分页: [第1页]


[上一篇主题]:请教:我的程序仿真可以,脱机就是不行(详情见内)

[下一篇主题]:sos!