使用NTC负温度系数热敏电阻控制温度

发布时间:2023年12月29日

鱼缸原来的加热棒使用的是NTC负温度系数的热敏电阻测温,负温度系数是指随着温度的升高,电阻是不断按照指数形式减小的,在22度的情况下实测电阻是10K多,可以断定使用了10K(25度下是10K)的电阻,为了先做好实验准备,先买了10K的B3950的热敏电阻:
在这里插入图片描述
将18B20和10K电阻放在一起,获得接近的温度数据,NTC程序:


 float fnCalculation_temperature(uint16_t ADC_values)
 {
 	uint16_t adc_temp=0;
 	float m_wTemperature=0.0; 		//温度值 初始化为0
 	float m_wR2=12000.0;			//附带分压阻值电阻 
 	float m_wR1=0.0; 				//热敏电阻 初始化为0
 	float T2=298.15;				// 273.15 + 25
 	float B=3950.0;  				//数据手册上找
 	float K=273.15; 				//开尔文
 	float R2V=0.0;  				//分压值 初始化为0

 	//一般转换需要时间,普通转换,这里加放转换函数。
 	adc_temp = ADC_values;
 	//需要的时间
 	//HAL_Delay(1);

 	//printf("adc = %d\r\n",adc_temp );

 	//自己单片机>>>>是12位ADC
 	//(1)2^12=4096
 	//(2)上拉3.3V
 	R2V=(adc_temp*(3.25/4096));
 	//电阻公式
 	//m_wR1=((3.3-R2V)*m_wR2)/R2V;
 	m_wR1=(R2V * m_wR2)/(3.25 - R2V);	//接线不同,改了公式
 	//R2=(R2V*R1)/(3.3-R2V);
 	//套公式使用 //注意下面公式中m_wR2在25度是正好是10K,和电路图正好重合
 	//m_wTemperature=1.0/(1.0/T2+log(m_wR1/m_wR2)/B)-K+0.5;
 	m_wTemperature=1.0/(1.0/T2+log(m_wR1/m_wR2)/B) - K - 5.6;//和18B20的温度有误差,加了修正

 	return m_wTemperature;

 }

分压电阻一般使用和热敏电阻相同的阻值,结果没有找到10K的,用了12K替代,分压电阻放在VCC端,就是VCC->12K分压电阻->10K B3950热敏电阻->GND的接线方式,单片机的ADC管脚测试两个电阻之间的电压变化。
调整了电阻的计算公式,测试了电压是3.25V。
因为最终测试结果和18B20的结果有偏差,没有找到原因在哪里,干脆加了个5.6的偏移量,结果算是准确,问题后面再找。

读ADC的程序:

uint32_t get_adc_value1(void)
 {
 	HAL_ADC_Start (&hadc1);//第一步,开启ADC
 	HAL_ADC_PollForConversion (&hadc1,50);// 查询函数,等着ADC 转换,查询转换的标志位.
 	if (HAL_IS_BIT_SET (HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)) //判断ADC是否转换完成,判断EOC标志位
 	{
 		return HAL_ADC_GetValue(&hadc1); //  获取ADC的值
 	}
 	else return 0;
 }
文章来源:https://blog.csdn.net/ztvzbj/article/details/135285756
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。