STM32 热敏电阻NTC的软件设计(ADC采集)

这篇具有很好参考价值的文章主要介绍了STM32 热敏电阻NTC的软件设计(ADC采集)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 

前言

一、查表函数

二、ADC采集       

三、查表

四、数据滤波


前言

记录一些我在工作和学习过程中遇到的问题。

NTC:在淘宝随便买的

单片机型号:STM32G030C8T6

目的:用单片机采集NTC温度

代码是小学生水平!

        电路设计可以参考https://blog.csdn.net/qq_45217932/article/details/127513686?spm=1001.2014.3001.5501

一、查表函数

        NTC就是随温度变化阻值变化的传感器,所以在硬件上只要计算出他现在是什么阻值就能得到他的温度了,什么阻值对应什么温度。也就是阻值随温度变化的对照表。我在淘宝随便买的随便问的,我买了两个型号反正RT表是大差不差,可以参考一下。

热敏电阻adc采样电路,stm32,单片机,嵌入式硬件

         得到RT表只是第一步,还要把你测量的温度范围对应的阻值打到软件上,这样才能形成这个表,纯手打的有没有打错我也没一个一个对比,反正用到现在也是没出错就对了。

#define NTCTABNum 251

float NTCTAB_2[NTCTABNum] = {
	32.660,31.040,29.500,28.060,26.680,25.400,24.180,23.020,21.920,20.880,  				//0   -  
	19.900,18.970,18.090,17.260,16.460,15.710,15.000,14.320,13.680,13.070,  				//10  -  19
	12.490,11.940,11.420,10.920,10.450,10.000,7.574 ,9.166 ,8.778 ,8.408 ,	 				//20  -  29
	8.058 ,7.722 ,7.404 ,7.098 ,6.808 ,6.532 ,6.268 ,6.016 ,5.776 ,5.546 ,					//30  -  39
	5.326 ,5.118 ,4.918 ,4.726 ,4.544 ,4.368 ,4.202 ,4.042 ,3.888 ,3.742 ,					//40  -  49
	3.602 ,3.468 ,3.340 ,3.216 ,3.098 ,2.986 ,2.878 ,2.774 ,2.674 ,2.580 ,					//50  -  59
	2.488 ,2.400 ,2.316 ,2.234 ,2.158 ,2.082 ,2.012 ,1.942 ,1.876 ,1.813 ,					//60  -  69
	1.751 ,1.693 ,1.637 ,1.582 ,1.530 ,1.480 ,1.432 ,1.385 ,1.341 ,1.289 ,					//70  -  79
	1.256 ,1.216 ,1.178 ,1.141 ,1.105 ,1.071 ,1.038 ,1.006 ,0.975 ,0.9452,					//80  -  89
	0.9164,0.8888,0.862 ,0.8364,0.8114,0.7874,0.7642,0.7418,0.7202,0.6994,					//90  -  99
};

二、ADC采集       

        在介绍采集之前,我想说一下关于ADC+DMA,我想大家大部分都是用的这个采集的,我现在还是会用的阶段。我就简单说下我的理解吧,ADC全称Analog-to-Digital Converter,模数转换器顾名思义将模拟量转换成数字量,在这里就是我们采集到的温度(模拟量)经过单片机的ADC转换成0和1的数字量进行数据分析。

        而DMA全称Direct Memory Access,直接储存器访问,在这里配合ADC实现了将ADC采集到的数据通过DMA传输到指定的内存空间,我们程序直接访问这个内存空间就可以得到想要的数据了。这个挺重要的哦,新手不知道怎么配置移步百度一下先,后面我把他了解透透了也会出一个ADC+DMA的博文的。

        好的,那么我们保证ADC+DMA配置顺利,要准备开始采集了 。关于NTC的采集硬件设计在我之前的博文有更过大家可以参考一些,今天主要介绍软件设计。

        来!ADC采集数据,并转换成电阻

/***********************************************************************
功  能:将ADC采到的值转换成电阻
参  数:channel:指定的ADC通道
返回值:电阻值
*************************************************************************/
float GetResValue(void)
{
	
	HAL_ADCEx_Calibration_Start(&hadc1);  
	HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC_Value, 1);  //开启ADC DMA传输 

    float 	adc_v,res;
	adc_v 	= (float)(ADC_Value[0]&0xFFF)*3.275/4096;  //将采集到值转换成电压
	res 	= 10 /( 4.096/adc_v - 1);	//电压转换成电阻
	return res;
}

三、查表

得到电阻值就可以对照查温度了:

/***********************************************************************
功  能:查表函数
参  数:1.tableNum :表格的元素的个数  
		2.*p:表格
返回值:当前阻值下的温度值
*************************************************************************/

float GetADCTemperature(float *p,uint8_t tableNum)
{
	uint8_t	i,index	= 0;
	float v1,v2,v3;
	float tem;
	float resdata;
	resdata = GetResValue();  //电阻值
    /*查表*/
	for(i=0;i<(tableNum-1);i++)  
	{
		if((resdata<p[i]) && (resdata>p[i+1]))
			index = i;	
	}
	v1 	= p[index] - resdata;
	v2 	= p[index] - p[index+1];
	v3 	= v1/v2;
	tem = v3+index;

	return tem;
}

四、数据滤波

        滤波还是很有必要的,我用的是比较传统的滤波方式:掐头去尾取平均值。经过滤波和不经过滤波数据还是区别蛮大的。


/***********************************************************************
功  能:掐头去尾取平均值
参  数:无  
返回值:平均值

*************************************************************************/
#define NUM 30
#define NTCTABNum 102   //表内数据个数
int	ave_temp1[NUM+1];

int GetMedian_Temperature(void)
{
	int i,j;
	int tmp;
    int ave_temp;
	uint32_t    sum1=0;
	for(i=0;i<NUM;i++)
	{
		ave_temp1[i] = GetADCTemperature(NTCTAB_1,NTCTABNum)*10;      //将测得的温度值放大10倍存在int型数组中,方便后面上传有人云
//		HAL_Delay(100);
	}

	for(i=0;i<NUM-1;i++)		//排序
	{
		for(j=0;j<(NUM)-i;j++)
		{
			if(ave_temp1[j]<ave_temp1[j+1])
			{
				tmp 			= ave_temp1[j];
				ave_temp1[j] 	= ave_temp1[j+1];
				ave_temp1[j+1] 	= tmp;
			}
		}
	}

	for(i=5;i<NUM-5;i++)	//掐头去尾取平均值
	{
		sum1 += ave_temp1[i];
	}
	ave_temp = sum1/(NUM-10); 
	
	return ave_temp;
}

        我的数据最后是需要上云的,所以对数据要求有些特殊,大家如果也有特殊的显示就要考虑数据的格式了。文章来源地址https://www.toymoban.com/news/detail-534311.html

到了这里,关于STM32 热敏电阻NTC的软件设计(ADC采集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 热敏电阻NTC103、PT100温度计算公式

    NTC 热敏电阻温度计算公式:Rt = R *EXP(B*(1/T1-1/T2))         (1) T1和T2指的是K度,即开尔文温度。         (2) Rt 是热敏电阻在T1温度下的阻值。         (3) R是热敏电阻在T2常温下的标称阻值。10K的热敏电阻25℃的值为10K(即R=10K)。         (4) T2 = (273.15+25)。         (

    2024年02月06日
    浏览(48)
  • 功率型热敏电阻(NTC)的主要参数及深入介绍

          RT指在规定温度 T 时,采用引起电阻值变化相对于总的测量误差来说可以忽略不计的测量功率测得的电阻值。       这个被包含于上一条,要理解清楚。也叫标称电阻值,根据国标规定,NTC热敏电阻器在25℃环境温度中所测得的零功率电阻值并标志在热敏电阻器上面。

    2024年02月11日
    浏览(46)
  • 单片机测量NTC热敏电阻温度的方法(含程序代码)

    NTC是负温度系数热敏电阻,随着温度的升高,NTC的阻值会呈非线性的下降。 这里采用100k 3950的热敏电阻,100k代表的是在25℃下的标准阻值,3950是热敏电阻的B值,B值与电阻温度系数正相关,也就是说B值越大,其电阻温度系数也就越大。 网上查找我们所选用NTC对应的R-T对照表

    2024年02月11日
    浏览(42)
  • 51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016

    51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016 Proteus仿真小实验: 51 Proteus仿真NTC热敏电阻温度测量温度控制系统-0016 功能: 硬件组成:51单片机 +4位数码管+NTC热敏电阻+ADC0809+24C02存储器+按键+蜂鸣器+电机 1.通过ADC0809测量出NTC热敏电阻的阻值,然后根据阻值计算出温度。

    2024年02月08日
    浏览(46)
  • 基于单片机热敏电阻PT100温度控制系统设计

    ** 单片机设计介绍,基于单片机热敏电阻PT100温度控制系统设计   基于单片机热敏电阻PT100的温度控制系统设计是一个综合了硬件和软件设计的工程任务。以下是对该设计概要的详细描述: 一、系统概述 该温度控制系统利用热敏电阻PT100作为温度传感器,通过单片机进行数

    2024年04月24日
    浏览(58)
  • STM32--ADC数值采样/附ADC采集热敏传感器使用

    目录 一丶ADC介绍 二丶ADC工作原理及管脚分布 三丶代码部分详解 (一)库函数介绍 (二)代码部分整合         ADC模块中文名为模拟/数字转换器,是12位逐次逼近型的模拟数字转换器,一般用于数值的采样   可以将引脚上连续变化的模拟电压转换为内存中存储的数字变

    2024年02月03日
    浏览(50)
  • 【GUI】使用PID控制器进行台式过程控制实验,以保持热敏电阻的温度(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、操作说明 本实验是温度控制的反馈控制应用。特别是,本实验讲解: 手动和自动控制的区别 生成动态数据的 步进测试 拟合动态数据以构建简单的一阶加死区时间 (FOPDT) 模型 从标准调整规则 获取 PID 控制的 参数

    2024年02月15日
    浏览(50)
  • STM32开发(十二)STM32F103 功能应用 —— NTC 温度采集

    👈《上一篇》  🏡《主目录》  👉《下一篇》 了解STM32 片内资源ADC。本实验是基于STM32F103开发 实现 NTC温度采集。 NTC温度采集实现: 1、使用查表方式。可参考

    2024年02月03日
    浏览(44)
  • [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

    上一篇:[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 学C语言时,使用的printf()函数,就是通过串口打印出来的。 跟外部器件通信,比如GPS模块、蓝牙模块、wifi模块; 两个开发板之间通信,制定私有协议。 PC电脑通信,使用上位机显示数据或控制下位机。 操作:打

    2024年01月22日
    浏览(71)
  • Stm32_标准库_11_ADC_光敏&热敏传感器_测数值

    在测量光敏传感器数值得基础上手动将通道改成热敏传感器通道即可 由于温度传感器的测量范围是-20 ~ 105摄氏度,所以输出温度得考虑带上符号这就需要在原有输出光照强度代码的基础上新添加几个函数 函数1: 在获取模拟电压函数最开始写入通道函数方便接入GPIO_1或GPIO_

    2024年02月19日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包