前言:之前的文章中也有关于使用I2C器件进行温度的采集的文章

采集温度的方式不止使用传感器,也可以使用NTC温敏电阻进行采集,此方法的外围电路较为简单切成本较低,代码也较为容易实现。

实现原理:先通过差分采样电路进行采集,采集之后可以获取NTC或者定值电阻的电压;已知这些信息可以通过欧姆定律得到当前电路的电流,根据串联电路电流处处相等的特性可再通过欧姆定律获取当前NTC的阻值。(温度越高NTC阻值越小,温度越低NTC阻值越大)

获取到了当前NTC的阻值可以通过查表得到一个粗略的温度,也可以通过公式获得当前的温度较为准确一些。

NTC 热敏电阻温度计算公式:Rt = R*EXP(B(1/T1-1/T2))

其中,T1和T2指的是K度,即开尔文温度。

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

R是热敏电阻在T2常温下的标称阻值。100K的热敏电阻25℃的值为10K(即R=10K)。T2=(273.15+25)

EXP是e的n次方

通过此公式可以得到温度转换的公式:T1 =1/(ln(Rt/R)/B+1/T2)-273.15+0.5;

这里+0.5的误差矫正。

1、NTC电阻的选型:

NTC实际的选型B值是一个很关键的参数,同时也要考虑自己的实际应用去选择合适阻值的电阻;笔者这里为了简便计算选择了10k的定值电阻与B值为3950的10k的NTC;

硬件设计:

2、代码实现:

#include "CH59x_common.h"
#include "math.h"
uint16_t adcBuff[40];
float sum=0;//多次采样和
float averagevalue =0;//平均值
volatile uint8_t adclen;
volatile uint8_t DMA_end = 0;
float basicvalue = 3.3;//输入电压
float Difference=0;//压差
float currentvalue=0;//电流
float NTC=0;//NTC阻值
float temp=0;//温度
int main()
{ uint8_t i;
SetSysClock(CLK_SOURCE_PLL_60MHz); /* 配置串口调试 */
DebugInit();
PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
PRINT("\n4.Diff channel sampling...\n");
GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_12, GPIO_ModeIN_Floating);
ADC_ExtDiffChSampInit(SampleFreq_3_2, ADC_PGA_1_4);
ADC_ChannelCfg(0);
R8_ADC_CFG|= RB_ADC_BUF_EN; while(1)
{
for(i = 0; i < 10; i++)
{
adcBuff[i] = ADC_ExcutSingleConver(); // 连续采样20次
}
for(i = 0; i < 10; i++)
{
PRINT("%d \n", adcBuff[i]);
sum+= adcBuff[i]; }
PRINT("sum %f\n",sum);
averagevalue = (((sum/10)/512)-4)*1.05; PRINT("average:%f V\n", averagevalue); Difference = basicvalue-averagevalue;
PRINT("Difference:%f V\n", Difference);
currentvalue = Difference/10000;
NTC=averagevalue/currentvalue;
PRINT("NTC:%f Ω\n",NTC);
// T1 =1/(ln(Rt/R)/B+1/T2)-273.15
temp=1/((log(NTC/10000)/3950)+(1/(273.15+25)))-273.15+0.5;
PRINT("temp:%f ℃\n",temp);
sum = 0;
DelayMs(1000);
}
}

3、验证现象:

代码打印温度:

实际温度:

4:注意事项:

再使用的时候需要使用精度较高的定制电阻,MCU的供电电压与参考电压稳定,同时NTC的供电要稳定。

常用温度阻值对照表:

仅用于个人学习分享;

如有错漏请指正。

ch58x/ch59xADC差分采样NTC电阻获取当前温度的更多相关文章

  1. NTC电阻Rt与温度T关系

    NTC电阻Rt与温度T公式如下: Rt=10000*exp(3950*(1/(273.15+T)-1/(273.15+25))). 例:0摄氏度时,电阻为33620.6037214357 欧姆 Rt= ...

  2. 调试备忘录-NTC电阻的使用(教程 + 代码)

    软件环境:CodeWarrior 11.1 硬件环境:NXP S9KEAZ64A 传感器参数:NTC热敏电阻(R25 = 50k,B25-50 3950) 写在前面 最近做小项目需要用到NTC电阻,因 ...

  3. Linux系统获取CPU温度

    Linux系统获取CPU温度 摘自:https://jingyan.baidu.com/article/cbf0e500407d072eab289343.html 各位好,本篇将简单介绍如何在不同系列 ...

  4. 转载:c# 获取CPU温度(非WMI,直接读取硬件)

    c#获取cpu温度 很早一个项目做远控,所以需要用到获取cpu温度,但是就是不知从何下手,无意中发现了Open Hardware Monitor,令我的项目成功完成 亲测20台清装xp sp2的机器, ...

  5. Beaglebone Black–I2C 接 BMP280 获取当前温度

    我有两个含温度传感的模块,一个是AOSONG 奥松电子的 AM2320 温度湿度,另一个是九轴里面的 Bosch BMP280.由于 AM2320 用 I2C MODBUS,直接用 I2C Tools ...

  6. 2022年写的香橙派 OrangePi Zero 用python获取dht11温度和湿度

    感谢网上资料和个人的不放弃,终于方便的解决了香橙派 OrangePi Zero用python获取dht11温湿度的问题. 网上关于香橙派的资料比起树莓派真是少之又少,现在香橙派zero能干的活暂时也只 ...

  7. linux获取CPU温度

    Centos系列 1 yum install lm_sensors 2 sensors-detect 3 sensors Ubuntu系列(多了service module-init-tools st ...

  8. 使用树莓派3获取CPU温度

    一.命令: cat /sys/class/thermal/thermal_zone0/temp 二.上图:

  9. orangepi获取cpu温度

    cat /sys/devices/virtual/hwmon/hwmon1/temp1_input

  10. FOC 电流采样方案对比(单电阻/双电阻/三电阻)

    如果本文帮到了你,帮忙点个赞: 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你,帮忙点个赞: 创作不易 谢谢支持 文章目录 1 电流采样的作用 2 硬件架构 3 采样关键 4 采样方案 5 三电阻采 ...

随机推荐

  1. python 虚拟环境篇

    前言 这个倒是非常之重要. 首先我们知道python通过pip安装,那么我们安装的所有东西都会在我们pip下的配置目录下,这会显得非常臃肿,同样也让我们部署艰难. python虚拟环境,他是这样做的, ...

  2. MVC 下拉选项实现的几种方式

    主要介绍4种方式 硬编码方式: ViewBag.hard_value = new List<SelectListItem>() { new SelectListItem(){Value=& ...

  3. 力扣1075(MySQL)-项目员工Ⅰ(简单)

    题目: 项目表 Project: 员工表 Employee: 请写一个 SQL 语句,查询每一个项目中员工的 平均 工作年限,精确到小数点后两位. 查询结果的格式如下:    解题思路: 建表语句: ...

  4. 力扣525(java&python)-连续数组(中等)

    题目: 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度. 示例 1: 输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相 ...

  5. 基于Confluent+Flink的实时数据分析最佳实践

    简介:在实际业务使用中,需要经常实时做一些数据分析,包括实时PV和UV展示,实时销售数据,实时店铺UV以及实时推荐系统等,基于此类需求,Confluent+实时计算Flink版是一个高效的方案. 业务 ...

  6. [FAQ] IDE: Goland or PHPStorm 分屏操作

    如图所示,文件上面点击右键,选择 Split Right 就可以在右侧分屏出编辑区. Refer:Goland下载 PHPStorm下载 Link:https://www.cnblogs.com/fa ...

  7. WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中

    本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着 ...

  8. 2018-11-14-git无法pull仓库refusing-to-merge-unrelated-histories

    title author date CreateTime categories git无法pull仓库refusing to merge unrelated histories lindexi 201 ...

  9. Nginx 简单应用(Windows os)

    实际问题如下: 我的电脑上有vm虚拟机,我有两个网络,一个叫137,一个叫102 ,我现在vm的网络是102的网络(137不允许被vm使用),但是别人都是137的网络,如何让137的局域网访问我的vm ...

  10. Solution Set - 贪心和数据结构

    感觉自己好菜啊,这个专题真的不太会. CF1439C Greedy Shopping Link&Submission. 容易发现,当此人连续买了一段物品之后,他的钱数至少减半.所以他最多只会买 ...