码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【# 软件stm32cubeIDE下使用STM32F103的ADC+DMA测量-基础样例+进阶+实例应用>>热敏电阻温度测量】


    【# 软件stm32cubeIDE下使用STM32F103的ADC+DMA测量-基础样例+进阶+实例应用>>温度测量】

    • 前言
    • 实验环境
    • 先行文章
    • 了解热敏电阻
        • 相关知识
            • (1)什么是NTC电阻
            • (2)基本参数与电路图
            • (3)电阻的温度与电阻值对照表
        • 参考资料
            • (1)了解转换公式 :The Steinhart-Hart 方程
            • (2)了解派生和代替公式:B参数方程
    • 结合电路-确定各个参数
        • 数据手册
    • 代码实现部分
    • 代码链接
    • 对比测试
    • 调试细节
    • 总结

    前言

    前两天,调试一个ADC转换,今天,调试了一个热敏电阻的实验,和以往不太一样的是,没调试以前,一直以为,要自己根据数据拟合啥的,调试的时候,才知道,原理温度曲线表,人家都给你做好了,并且有成熟的公式,你只要明白电路图分压和套用公式,就能使用了。

    实验环境

    本次实验,使用了项目上的板块,所有无法展示,但是基础原理图非常简单,会给出热敏电阻部分电路。再配合以往硬件,就可以使用了。
    如下图,出自本人灵魂画手。
    在这里插入图片描述

    先行文章

    如果不了解ADC,或者没有相关ADC调试经验,非常建议先看看之前文章。
    # 软件stm32cubeIDE下使用STM32F103的ADC+DMA测量-基础样例+进阶+增加通道

    了解热敏电阻

    相关知识

    (1)什么是NTC电阻
    1. 一句话解释热敏电阻:电阻值随着温度变化的电阻。

    2. 随温度升高而电阻增加的热敏电阻称为“ 正温度系数热敏电阻(PTC
      thermistor,即 Positive Temperature Coefficient thermistor)”

    3. 随温度升高而电阻减少的热敏电阻成为“负温度系数热敏电阻(NTC thermistor,即 Negative Temperature
      Coefficient thermistor)”

    如果搜索热敏电阻,网上实在太多了,说的也非常明白了。
    参考资料:https://baike.baidu.com/item/%E7%83%AD%E6%95%8F%E7%94%B5%E9%98%BB/5155280

    另外在维基百科上,有如下说明。
    在这里插入图片描述
    参考链接:https://zh.wikipedia.org/zh-my/%E7%83%AD%E6%95%8F%E7%94%B5%E9%98%BB

    (2)基本参数与电路图

    知道了热敏电阻有什么东西后,我们实际应用时,需要知道一些参数,用来调试,参数主要是电阻的参数,你购买的热敏电阻一般有数据手册,可以在手册里获取到。

    另一部分就是电路图,一般实际应用来说,都是“实验环境”里手绘的电路图,都是近似的,可能上下电阻值,电压等具体值不同而已。

    (3)电阻的温度与电阻值对照表

    了解一个电阻特性,比较直观的办法,看下电阻对照表,这里直接截取一部分,作为展示。
    在这里插入图片描述

    参考资料

    这部分只是作为了解部分,从我目找到资料来看,NTC电阻有个教授发现了一个数学公式,后来派生出来的公式,就是我们现在使用的公式,不理解没关系,可以跳过这段,只要知道往里套公式就行。

    (1)了解转换公式 :The Steinhart-Hart 方程

    在维基百科上搜索,得到有关解释如下。
    在这里插入图片描述
    派生公式
    在这里插入图片描述

    参考链接:https://wikizhzh.top/wiki/steinhart%E2%80%93hart_equation

    (2)了解派生和代替公式:B参数方程

    从上边可以知道,我们用的就是这个派生公式。但是这个公式我们如果数学不好的话,其实也看不懂。
    那么参考如下资料,里面讲述还是挺好的。
    在这里插入图片描述
    参考链接:http://www.wawooo.com/186.html

    结合电路-确定各个参数

    通过上述说明吗,我们得到一个公式,我们实际写代码,其实就是确定好,各个参数后,套用这个公式。

    派生公式:
    Rt = R * EXP( B * ( 1/T1 - 1/T2 ) )

    套用公式:
    T1 = 1 /( ln(Rt/R)/ B + 1/T2 )

    • T1和T2 是指的K度,开尔文温度。

    • Rt 就是热敏电阻 在T1温度下的电阻值

    • R 是热敏电阻在常温T2下的标称值,一般手册里有25°C为10K

    • EXP是e的n次方

    • B值是热敏电阻的参数,手册里有。

    • In是代码里的log函数,直接看代码就明白了。
      在这里插入图片描述

    • 本次实验的ADC是12位, 2的12次幂是4096.

    • 上拉电压为3.3V

    数据手册

    手册链接:https://download.csdn.net/download/qq_22146161/86609054

    代码实现部分

    如下为核心代码,本次实验比较简单,就是在上章实验代码中,加入了一段。

    (1)加入数学的头文件。
    在这里插入图片描述

    (2)加入暂时输出的变量
    在这里插入图片描述

    (3)加入核心的转换代码函数。

    //第二步 加入转换函数
    //转换ADC,直接转换完成。
    float fnCalculation_temperature(uint16_t ADC_values)
    {
    	uint16_t adc_temp=0;
    	float m_wTemperature=0.0; //温度值 初始化为0
    	float m_wR2=10000.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(10);
    
    	//自己单片机>>>>是12位ADC
    	//(1)2^12=4096
    	//(2)上拉3.3V
    	R2V=(adc_temp*(3.3/4096));
    	//电阻公式
    	m_wR1=((3.3-R2V)*m_wR2)/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;
    
    	return m_wTemperature;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    (4)打印输出
    在这里插入图片描述

    代码链接

    代码链接:https://download.csdn.net/download/qq_22146161/86609061

    对比测试

    实际应用的时候,我们需要一个相对标准的测温仪器,让我们知道,我们写的代码,测试显示出来的温度是正确的。
    如下图,将一个测温设备与电阻碰触,让它们温度近似。
    在这里插入图片描述
    对比仪器上显示温度26.5左右。

    在这里插入图片描述

    串口输出显示温度26.6左右。
    在这里插入图片描述

    调试细节

    (1)电阻值,如下图,使用的这个热敏电阻25°时正好时10K,与电路中用的正好也是10K,实际使用还是需要注意下。
    在这里插入图片描述
    (2)文章书写也是一种能力吧,能难避免错别字,和一些数值错误,再参考一些资料时,发现里面一些数组错了,所有在看的时候一定自己算下。

    如下参考资料,里面电阻值说是使用的4.7K,但是算完后,发现用的1K,当然这不妨碍理解,另外这个文档里,提供一种查表输出温度的方式,可以看下。
    在这里插入图片描述

    参考资料:https://zhuanlan.zhihu.com/p/179181715

    总结

    保持初学者之心

  • 相关阅读:
    Linux中搭建DNS 域名解析服务器(详细版)
    Selenium番外篇文本查找、元素高亮、截图、无头运行
    超越iTerm! 号称下一代终端神器,功能贼强大!
    vim程序编辑器
    Ajax入门
    哪些企业适合服务器托管?为什么做服务器托管?
    氨基修饰二硒化钨WSe2纳米粒 (NH2-WSe2)|羧酸聚乙二醇修饰二硒化钨 (COOH-PEG-WSe2)
    锐捷——浮动静态路由配置
    串口发送&串口发送+接收&串口收发HEX数据包&串口收发文本数据包----USART
    超神之路 数据结构 3 —— Stack栈实现及应用
  • 原文地址:https://blog.csdn.net/qq_22146161/article/details/126968333
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号