0.1℃单总线温度芯片M1820升级替代DS18B20应用指南

敏源传感首页    0.1℃单总线温度芯片M1820升级替代DS18B20应用指南

 

不少客户反映之前应用DS18B20,但想要精度更高,响应速度更快的温度芯片进行国产替代。敏源高精度温度芯片M1820最高测温精度±0.1℃,内置16 bit ADC,温度转换时间10.5/5.5/4ms可配置,替代DS18B20时,程序上只需做如下简单修改即可。


1、温度转换时间


DS18B20温度转换时间最快500ms,M1820温度转换时间10.5/5.5/4ms,配置方式见下:


ConvertTemp();
Delay_ms(11);//不同重复性下转换时间不同,此处延时必须大于对应的转换时间。
/* @brief  设置周期测量频率和重复性
* @param  mps 要设置的周期测量频率(每秒测量次数),可能为下列其一
*@arg CFG_MPS_Single:每执行ConvertTemp一次,启动一次温度测量
*@arg  CFG_MPS_Half    :每执行ConvertTemp一次,启动每秒0.5次重复测量
*@arg  CFG_MPS_1:每执行ConvertTemp一次,启动每秒1次重复测量
*@arg  CFG_MPS_2:每执行ConvertTemp一次,启动每秒2次重复测量
*@arg  CFG_MPS_4:每执行ConvertTemp一次,启动每秒4次重复测量
*@arg  CFG_MPS_10:每执行ConvertTemp一次,启动每秒10次重复测量
* @param  repeatability:要设置的重复性值,可能为下列其一
*@arg  CFG_Repeatbility_Low:设置低重复性,转换时间4ms
*@arg  CFG_Repeatbility_Medium:设置中重复性,转换时间5.5ms
*@arg  CFG_Repeatbility_High:设置高重复性,转换时间10.5ms
* @retval 无
*/
bool OW_SetConfig(uint8_t mps, uint8_t repeatability)

uint8_t scrb[sizeof(M1820_SCRATCHPAD_READ)];
M1820_SCRATCHPAD_READ *scr = (M1820_SCRATCHPAD_READ *) scrb;
/*读9个字节。第7字节是系统配置寄存器,第8字节是系统状态寄存器。最后字节是前8个的校验和CRC*/
if(OW_M1820_ReadScratchpad_SkipRom(scrb) == FALSE)
{        
return FALSE;  /*读暂存器组水平*/
}
/*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/    
 if(scrb[8] != MY_OW_CRC8(scrb, 8))
 {    
return FALSE;  /*CRC验证未通过*/
 }
scr->Cfg &= ~CFG_Repeatbility_Mask;
scr->Cfg |= repeatability;
scr->Cfg &= ~CFG_MPS_Mask;
scr->Cfg |= mps;        
OW_M1820_WriteScratchpad_SkipRom(scrb+4);
return TRUE;
}

 

2、温度寄存器


DS18B20分辨率9-12bit ADC,M1820为16bit ADC,温度寄存器格式不同,计算公式也不同,修改如下:

 

float M1820_OutputtoTemp(int16_t out)
{
return ((float)out/256.0 + 40.0);    
}

 

3、睡眠模式


M1820进入睡眠时,需要把Scratchpad寄存器的9个字节全部读完,无需发送发送指令,读取函数按如下进行修改:


bool ReadTempWaiting_SkipRom(uint16_t *iTemp)
{
uint8_t scrb[sizeof(MY18E20_SCRATCHPAD_READ)];
MY18E20_SCRATCHPAD_READ *scr = (MY18E20_SCRATCHPAD_READ *) scrb;
/*读9个字节。前两个是温度转换结果,最后字节是前8个的校验和--CRC。*/    
 if(MY18E20_ReadScratchpad_SkipRom(scrb) == FALSE)
 {        
 return FALSE;  /*读寄存器失败*/
 }
 /*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/    
if(scrb[8] != MY_OW_CRC8(scrb, 8))
{    
 return FALSE;  /*CRC验证未通过*/
 }
/*将温度测量结果的两个字节合成为16位字。*/    
*iTemp=(uint16_t)scr->T_msb<<8 | scr->T_lsb; 
return TRUE;        
}

 

4、暂存器


使用M1820时,暂存器配置只需按芯片手册定义进行修订即可。

 

与DS18B20相比,M1820电压范围更宽(1.8~5.5V)、功耗更低(测温平均电流5μA@3.3V,1Hz),具体性能指标详见手册资料。另,除TO92S封装外,另有S0T23(M1601)、DFN8(M601)等形式供客户选择。

 

 

2022年5月26日 11:42
浏览量:0
收藏