Mstar温控(热敏电阻)调试笔记

温控见到的I2C 类型的,还ADC 类型的。两种类型获取数据的通道及工作原理不一样。I2C data 获取到的数据根据协议转换成温度即可, 而ADC 类型的温控一般指热敏电阻,连接在主芯片的SAR 口,主芯片通过sar 的电压值,得到热敏电阻的阻值,再通过阻值计算当前的温度。从流程上看要掺一点。

热敏电阻连接

在这里插入图片描述
上图是为了兼容多颗料绘制的原理图,根据实际上料情况简化如下:
在这里插入图片描述
热敏电阻RT 与 R665 的1k 电阻串联,对3.3 V 进行分压,然后接入芯片的SAR口。
在这里插入图片描述
temp_sens pin 接入主芯片的E4 (sar3),当外接温度变化时,主芯片通过sar 口采集到的adc 也是变化的。通常产品也是通过采集到的adc 反推出当前的温度。

SAR 口配置

mboot\MBoot\sboot\inc\mooney\board\chip\MSD95WLXM8.h

  1. E4 的pin 脚定义
#define BALL_E4 PAD_SAR3
#define PAD_SAR3 34
#define GPIO_PAD_34 GPIO33
#ifndef BALL_E4_IS_GPIO
#define BALL_E4_IS_GPIO 0
#endif 
#ifndef PAD_SAR3_IS_GPIO
#define PAD_SAR3_IS_GPIO BALL_E4_IS_GPIO
#endif 
  1. SAR3 口定义

mboot\MBoot\sboot\inc\mooney\board\BD_MST142B_10A_MOONEY.h

#define PAD_SAR3_IS_GPIO                        GPIO_IN    

mboot 定义好sar3口之后,就可以直接获取adc 值了。

//-------------------------------------------------------------------------------------------------
/// Set SAR as ADC channel.
/// @ingroup G_SAR_COMMON
/// @param u8Channel: sar ADC channel 0~7
/// @param bEnable: 1: configured as ADC, 0: configured as GPIO input
/// @return E_SAR_ADC_OK: Success
/// @return E_SAR_ADC_FAIL or other values: Failure
//-------------------------------------------------------------------------------------------------
SAR_AdcResult MDrv_SAR_Adc_Config(MS_U8 u8Channel,MS_BOOL bEnable);

//-------------------------------------------------------------------------------------------------
/// Get ADC value function for each SAR channel.
/// @ingroup G_SAR_COMMON
/// @param u8Channel: sar ADC channel 0~7
/// @return MS_U8: ADC value
//-------------------------------------------------------------------------------------------------
MS_U8 MDrv_SAR_Adc_GetValue(MS_U8 u8Channel);

对于SAR 3 ,就是直接使用MDrv_SAR_Adc_GetValue(3)来多去ADC值。
有了ADC 值下一步就需要建立和温度的函数关系。

RT的阻值与温度

adc 值和RT电阻值 的关系基本上时线性的,比较好找到规律。但是RT阻值和温度的关系是非线性就有点麻烦。我们先看一下温控的几个参数,特性。NTCG103JF103FT为例
在这里插入图片描述
从datasheet 中,我们可以看到一个公式,在25摄氏度 到 85 摄氏度之间,一个变化常量的计算公式,这个常量就是曲线(电阻与温度关系曲线)
的斜率,也即导数。根据型号我们找到这个常量所在的区间
在这里插入图片描述
由上面数据可知,B的取值范围在3401 ~ 3450 之间。
在这里插入图片描述
原厂根据前面变化规律变化,提供了一组值就是约25℃时,电阻为10k 欧姆,此时B 值为3435.
在这里插入图片描述
推到上面的公式可以得到一个RT 电阻值和开氏温度 之间的关系。其中RT1为温度T1 时零功率电阻值,RT2 为温度T2时零功率电阻值。代入RT1 ,T1 ,也即10k 欧姆,25+273 开尔文及B值(3435) 就会得到一个 RT 与T的一元方程函数。 另外在测试几组adc 值,RT阻值得到两者的关系,最终可以得到adc 与 T 之间的关系。

ADC 与 温度之间的估算

上面根据datasheet 提供的参数 和公式 做的一个比较精确,但是很复杂的计算方法。在此有一个估算的方法,直接把RT电压 与 温度T 当成一种线性关系来使用。根据datasheet 提供的数据,温度变化区间在25℃ ~ 85℃,电阻的值 10k ~ 0k那么电压为3000mv ~ 0mv 代入公式 ax + b = y, 则有
a3000 + b = 25 , b = 85 。计算得到 a = -0.02, b = 85,那么y = 85 - 0.02 x . 其中y 为温度(单位℃),x 为电压(单位mv)。 热敏电阻的电压值为
x = adc
3300 / 255. 最终计算得出

y = 85 - (adc*3300/255)*0.02

然后通过红外仪验证,通过offset进行些许校正。

y = 85 - (adc*3300/255)*0.02 + offset

code 如下:

float convertToVoltage(U8 channel)
{
	return 3300*(((float)MDrv_SAR_Adc_GetValue(chanel))/255);
}

S16 voltageToTemperature(U8 channel)
{
	return  85 -  0.02 * convertToVoltage(channel) + offset ;   // offset 做微调用
}

参考:https://wenku.baidu.com/view/e2f53c4c2f3f5727a5e9856a561252d380eb2092.html
https://baijiahao.baidu.com/s?id=1620021463882312794&wfr=spider&for=pc

资源链接:https://download.csdn.net/download/kehyuanyu/11988500

发布了101 篇原创文章 · 获赞 19 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/kehyuanyu/article/details/103178926