Board logo

标题: [求助]QG8+热敏电阻测环境温度的问题 [打印本页]

作者: wangyj    时间: 2007-7-5 10:23     标题: [求助]QG8+热敏电阻测环境温度的问题

感谢版主昨天关于AD问题的解答!
现有关于QG8采用热敏电阻来测量环境温度的问题请教:
AD初始化为:
void InitADC(void){
ADCSC1 = 0x1F; //初始化时禁止ADC
ADCSC2 = 0x00;
ADCCFG = 0xF8;
APCTL1 = 0x04; //管脚选择:APCTL1_ADPC2
}

处理程序:
void Envir_temperature(void)
{
uint8_t T;
uint16_t Temp;

ADCSC1_ADCH = 0x02; //通道选择:AD2
while (!ADCSC1_COCO ) {};
Temp = ((uint16_t)ADCRH)<<8 | (uint16_t)ADCRL;
ADCSC1_ADCH = 0x1F;
// T = Tnormal*(1-Tnormal*(log(1024/Temp-1))/Br);
T = Br*Tnormal/(Br-Tnormal*log(1024/Temp-1));
T = T-273.15;
SendMsg(T); //把T打到串口
}
请问:
1.处理程序对吗?
3.最后打到串口的T是实际温度吗?

谢谢您了!
作者: strongchen    时间: 2007-7-5 10:31

你先写入芯片,运行一下,看看结果如何。
作者: wangyj    时间: 2007-7-5 11:13

串口打出的T为0x19,也就是25。
如果用手接触热敏电阻,没变化;如果用冰接触,则直接打出0xEF;如果用热水(饮用白开水)接触,则显示从0x19直接到0x2C、0x38,再到0x41。
不知为什么没有其他中间值?
我设定3秒钟采集一次,在本次采集完到下次采集时,会不会是温度已经变了的这个原因。
或者还有QG8本身采集一次所需的时间。
作者: strongchen    时间: 2007-7-5 12:09

3秒采样一次是太慢了。
作者: wangyj    时间: 2007-7-5 12:33

时间问题也是一个原因,另外问题的关键是为什么温度变化时总是这几个值?
比如每次温度升高时,都是从0x19上升到0x2C,为什么总是0x2C?哪怕出来一个0x2D或0x2A、0x2B什么的。

作者: strongchen    时间: 2007-7-5 17:04

看看AD转换结果寄存器的值到底是多少。
作者: wangyj    时间: 2007-7-5 18:20

AD转换寄存器的值会变,比如:0x1F0、0x1ED等,但计算结果均为T=0x19;
当温度变化较大时(热敏电阻与热水接触),AD转换寄存器的值变化较大,计算结果才会变为T=0x2C;
试验现象好像就是:对于公式:
T = Br*Tnormal/(Br-Tnormal*log(1024/Temp-1));
T = T-273.15;
当温度(AD转换寄存器的值)变化较大时,计算的结果才会变;
当温度(AD转换寄存器的值)变化不大时,计算的结果几乎不变;

这两天有事,不能继续该问题,等回来继续。
作者: strongchen    时间: 2007-7-6 09:36

那么这个计算过程肯定有问题。
作者: wangyj    时间: 2007-7-10 10:33

strongchen,您好!

公式:T = Br*Tnormal/(Br-Tnormal*log(1024/Temp-1));

又做了下面试验:
1.常温下,采样值ADRH ADRL=01 F4,即Temp=500,带入上述公式,手动计算得T=299.3559K,即26摄氏度;而MCU计算出来的值为19摄氏度;
2.用手接触热敏电阻,采样值ADRH ADRL=01 9A,即Temp=410,带入上述公式,手动计算得T=302.71169K,即35摄氏度;而MCU计算出来的值为19摄氏度;
所以,估计公式没问题,而是MCU对浮点数的计算有问题。
您有什么解决办法吗?
作者: strongchen    时间: 2007-7-10 10:40

对于8位MCU来说,最好不要进行这么复杂的计算。用查表的方法即快捷又高效。
作者: s050805015    时间: 2007-7-10 15:29

版主你好,初学单片机,我还没有用过查表方式的,查表的怎么搞啊,精确性是不是不高啊?
作者: strongchen    时间: 2007-7-10 15:33

查表就是事先将转换结果计算好,然后保存在程序中。需要时直接查表即得到结果。一般用数组的方式。
作者: wangyj    时间: 2007-7-11 12:34

用查表法,就可以了。
感谢帮忙!谢谢!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0