温度芯片lmt70使用笔记 | 您所在的位置:网站首页 › 人体温度测试仪准确吗 › 温度芯片lmt70使用笔记 |
lmt70使用笔记
一、芯片相关说明二、移植相应驱动库三、驱动库源码分析四、实训
一、芯片相关说明
此芯片有三种电压-温度转换方式分别是: ①一阶导数查表法 ②二阶导数公式法 ③三阶导数公式法 一阶导数查表法适用于人体窄温度范围的温度测量二阶和三阶公式法在宽温度范围-50度到100+度,提供全局更准确的转换。对于没有fpu单元的mcu和人体温度测温范围的应用,推荐使用一阶导数查表法。![]() lmt70.c #include "lmt70.h" #define VOL2TEMP_TABLE_SIZE 21 /* 电压温度转换边,电压为μv,温度从-50度开始,步进为10度,向上增加 * 比如vol2temp_table[0] 表示-50度,vol2temp_table[1]就表示-40度。 * 此处最好换成对应adc转换后的数字输出,这样就可以避免adc输出换算成 * 电压导致的运算误差,同时也提高了运算速度。 */ float v2t_tabl[VOL2TEMP_TABLE_SIZE] = { 1350.441,1300.593,1250.398,1199.884,1149.070, 1097.987,1046.647, 995.050, 943.227, 891.178, 838.882, 786.360, 733.608, 680.654, 627.490, 574.117, 520.551, 466.760, 412.739, 358.164, 302.785 } ; /* 斜率表,在十度区间内使用线性插值法 */ float slope_tabl[VOL2TEMP_TABLE_SIZE] = { 4.985,5.020,5.051,5.081,5.108, 5.134,5.160,5.182,5.205,5.230, 5.252,5.275,5.295,5.316,5.337, 5.357,5.379,5.402,5.458,5.538, 5.538 } ; /* 折半查表实现 */ static int16_t haltserach( float vol) { int16_t low = 0 ; int16_t up = VOL2TEMP_TABLE_SIZE ; int16_t mid ; while ( up >= low) { mid = ( low + up) >> 1 ; if ( v2t_tabl[mid] low = mid + 1 ; } else { return mid ; } } /* 不在线性表里,返回-1或RT2TEMP_TABLE_SIZE表示不在表内 */ /* 其他值,则取下边界温度并返回 */ return up ; } /** @brief 初始化lmt70 * @details 完成与lmt70相关的底层外设的初始化。例如adc,gpio。 * @retval NONE */ void lmt70_init(void) { } /** @brief 从lmt70获取温度数据 * @details 使用一阶导数查表法实现电压-温度转换 * @param[in] vol lmt70输出电压 * @retval 电压-温度转换结果放大100倍 -5000到+15000度 */ int32_t lmt70_get_temp( float vol) { int16_t i ; int32_t rev = 0 ; i = haltserach(vol) ; if ( ( i != -1) && ( i != VOL2TEMP_TABLE_SIZE)) { rev = ( ( ( i * 10) - 50) + ( ( v2t_tabl[i] - vol) / slope_tabl[i])) * 100 ; } return rev ; } /** * @} */lmt70.h /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __LMT70_H #define __LMT70_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "port_typ.h" /** @brief 初始化lmt70 * @details 完成与lmt70相关的底层外设的初始化。例如adc,gpio。 * @retval NONE */ void lmt70_init(void) ; /** @brief 从lmt70获取温度数据 * @details 使用一阶导数查表法实现电压-温度转换 * @param[in] vol lmt70输出电压 * @retval 电压-温度转换结果放大100倍 -5000到+15000度 */ int32_t lmt70_get_temp( float vol) ; #ifdef __cplusplus } #endif #endif /* __LMT70_H */ 四、实训链接: ADC采样可选择stm32自带ADC与外部ADC. lmt70测量到温度传送给oled显示。 OLED对数据处理: |
CopyRight 2018-2019 实验室设备网 版权所有 |