不少美信 DS18B20 用户,想要用更高精度或更快读温速度的单总线温度芯片进行应用 升级。敏源第 4 代高精度温度芯片 M1820(TO92S 封装)、M1601(SOT23 封装)、 M601(DFN8 封装)等,最高测温精度±0.1℃,同时也有±0.5℃精度的产品。温度芯片内 置 16 bit ADC,温度转换时间 10.5/5.5/4ms 可配置,客户把原有 DS18B20 应用例程做如 下简单修改即可:
1、温度转换时间 DS18B20 温度转换时间最快 500ms,M1820、M1601、M601 系列温度转换时间 10.5/5.5/4ms(默认出厂配置 10.5ms),配置方式见下:
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、M1601、M601 系列为 16bit ADC,温度 寄存器格式不同,计算公式也不同,修改如下:
float M1820_OutputtoTemp(int16_t out)
{ return ((float)out/256.0 + 40.0); }
3、睡眠模式
M1820、M601、M1601 系列进入睡眠时,需要把 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、M1601、M601 系列时,暂存器配置只需按芯片手册定义进行修订即 可。
与 DS18B20 相比,M1820、M1601、M601 系列除了更高精 度外,还具有更宽电压范围(1.8~5.5V)、更低功耗(测温平均电 流 5μA@3.3V,1Hz)、温度一致性好、测温分辨率高等优点。
选型可参见下表。
原文标题 : 0.1℃单总线温度芯片 M1820 等升级替代 DS18B20 应用指南