按照TMP006的layout指导,画了一块小板子。如下
样品和板子到了,就焊几块吧!用热风*吹了3块,有两个芯片引脚短路,有个没短路。然后调程序,死活不能正确的读到芯片ID,怀疑焊接不好。后来将芯片中间那块敷铜用刀片给割了,再用热风*吹,吹了两个都可以正确读到芯片的两个ID。
关于程序,我有一个IO模拟IIC的程序,单片机是用的STM32。TMP006的寄存器还是比较简单,总共就5个,其中2个是制造商ID(5449h)和设备ID(0067h),调试时,能正确读出这两个,那硬件和IIC就没问题了。还有三个是配置寄存器、设备自身温度寄存器、目标传感电压。测温主要就靠自身温度和目标传感电压计算而出的。
读出寄存器00和01的值,转换成自身温度Tdie(单位℉)和目标传感电压Vobj(单位nV),再根据下图公式计算出目标温度
读Tdie和Vobj模块如下:
typedef struct
{
float Tdie;
short int Vobj;
}TMP006_TypeDef;
TMP006_TypeDef Tmp006;
void TMP006_Read(void)
{
unsigned char RxData[2] ;
do
{
//读配置寄存器
IIC_Read(TMP006_ADDRESS,CONF_REG,RxData,2);
}
while((RxData[1]&0x80)!=0x80);//等待转换完成
//
IIC_Read(TMP006_ADDRESS,TEMPERATURE_REG,RxData,2);
Tmp006.Tdie=((RxData[0]<<8)+RxData[1])*0.0078125 + 273.15;
IIC_Read(TMP006_ADDRESS,VOBJECT_REG,RxData,2);
Tmp006.Vobj=(RxData[0]<<8)+RxData[1];
}
读Tobj计算模块如下:
float TMP006_Tobj(void)
{
float Vos = 0;
float Tobj = 0;//单位℉
float fvobj = 0;
float S = 0;
float temp = 0;//红外转换电压值 单位nV
TMP006_Read();//读取Tdie和Vobj
S = S0*(1+a1*(Tmp006.Tdie-Tref)+a2*(Tmp006.Tdie-Tref)*(Tmp006.Tdie-Tref));
Vos = b0+b1*(Tmp006.Tdie-Tref)+b2*(Tmp006.Tdie-Tref)*(Tmp006.Tdie-Tref);
if(Tmp006.Vobj >= 0x8000) temp = -(0xffff-Tmp006.Vobj)*156.25;
else temp = Tmp006.Vobj*156.25;
temp *= 1e-009;
fvobj = (temp-Vos) + c2*(temp-Vos)*(temp-Vos);
Tobj = sqrt(sqrt(Tmp006.Tdie*Tmp006.Tdie*Tmp006.Tdie*Tmp006.Tdie + (fvobj/S)));//单位℉
return (Tobj-273.15);//单位℃
}
本打算隔着玻璃测温度,后发现普通的玻璃远红外透不过去,3um波长以上的基本都透不过了,换成温度也就是700℃以下的波长基本穿不过去。所以如果要么订制透远红外的玻璃或者亚克力也行。还有一个问题,就是关于物体的发射率,越亮的物体发射率越接近0,越黑的物体越接近1.所以红外测温时,要根据被测物来调整发射率,上面计算公式中的S0就是用来校准物体的发射率的。我就没有去校准,用了一个典型的值:Typical values for S0 are between 5 × 10–14 and 7 × 10–14
.
在TI文档中,还介绍了被测物体与传感器的距离,在什么样的条件下,测出的温度比较接近目标温度。其实TMP006的视角有180°,在淘宝上有红外测温*和红外测温笔,基本上红外测温*的视角比较小,故可远距离测。红外测温笔视角应该和TMP006差不多,所以最好靠着测才准确。
实物图:
完整代码见附件!代码对应ADR0与ADR1接地
官网资料链接:http://www.ti.com.cn/product/cn/TMP006/samplebuy
其他论坛相关链接:http://bbs.eeworld.com.cn/thread-341966-1-1.html
在
TMP006 User Guide中写出来测量精度和距离的问题,发热面越大越靠近传感器,精度越高(缺点就是这个是180°的视角)。下面有个图:
TMP006.zip:免费下载地址:http://www.ippipp.com/file/id/25800