首页 > 其他分享 >ch58x/ch59xADC差分采样NTC电阻获取当前温度

ch58x/ch59xADC差分采样NTC电阻获取当前温度

时间:2024-06-01 18:22:19浏览次数:16  
标签:float 阻值 ch58x ch59xADC ADC PRINT NTC 温度

前言:之前的文章中也有关于使用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的供电要稳定。

常用温度阻值对照表:

 

仅用于个人学习分享;

如有错漏请指正。

标签:float,阻值,ch58x,ch59xADC,ADC,PRINT,NTC,温度
From: https://www.cnblogs.com/frontier/p/18225714

相关文章

  • CH57x/CH58x/CH59x获取从机广播信息
    有时需要通过主机设备(MCU非手机)获取从设备的广播信息例如广播包,MAC地址,扫描应答包等以下的程序片段及功能实现是在WCH的CH59X的observer例程上实现的;1、获取广播包所有的函数在库函数中都可以找到,具体实现函数如下:caseGAP_DEVICE_INFO_EVENT:{Observ......
  • @Pointcut 的常用方式:execution,within,this,target,args,@within,@target,@args,@annotation
    @Pointcut的常用方式先了解几个概念文中会涉及几个概念,先了解一下。target用来表示目标对象,即需要通过aop来增强的对象。proxy代理对象,target通过aop增强之后生成的代理对象。AspectJAspectJ是什么?AspectJ是一个面向切面的框架,是目前最好用,最方便的AOP框架,和spring中的......
  • kubernetes DeploymentController 源码解析
    DeploymentController对象从 NewDeploymentController方法开始创建,我们首先看这个方法1//NewDeploymentControllercreatesanewDeploymentController.2funcNewDeploymentController(ctxcontext.Context,dInformerappsinformers.DeploymentInformer,rsInformer......
  • C# CultureInfo中常用的InvariantCulture
    1、CultureInfo的InvariantCulture的作用(1)、CultureInfo使整个.NETFramework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“机器”看,这样的多文化处理反而不妥,造......
  • CH57x/CH58X/CH59X/CH32F/V208OTA使用说明
    目前提供了两种OTA升级方式,方式一:带库升级;每次升级可以带着库一起进行升级(带库升级适用于flash较大的芯片)方式二:固定库升级;升级时库不会随着升级而升级(适用于flash不够用时)方式一:升级时需要同时烧录这三个固件:(可以使用isp工具同时烧录也可以使用合并工具将三个工程合并后再烧......
  • C#获取计算机唯一标识组装GUID ,延伸ManagementClass、WIN32_类库名
    usingSystem.Management;usingSystem.Security.Cryptography;usingSystem.Text;namespaceSWin{publicclassComGUID{privatestaticstringcomputerGUID=string.Empty;publicstaticstringValue(){if(str......
  • 介绍一下opentcs
    OpenTCS是一个开源的自动运载系统(AutomatedGuidedVehicle,AGV)控制系统。它旨在管理和控制自动化运输车辆,例如AGV或自动搬运车(AMR),在工业和商业环境中执行各种任务。下面是一些关键特性和组件:任务调度和优化:OpenTCS能够规划和优化AGV的任务执行顺序,以最大程度地提高效率和资源......
  • CH58x芯片Hardfault问题排查
    前言:针对RISC-V芯片进入HardFault_Handler函数的问题排查提供讲解。一、HardFault函数添加PC指针打印在公共文件的sys.c函数中找到函数并修改如下:__INTERRUPT__HIGH_CODE__attribute__((weak))voidHardFault_Handler(void){uint32_tv_mepc,v_mcause,v_mtval;p......
  • WPF 触摸下如何给 StylusPointCollection 添加点
    本文告诉大家如何在触摸下给WPF的StylusPointCollection添加新的点在自己默认创建的StylusPointCollection里面添加点是十分简单的,如以下代码,可以非常简单添加到集合StylusPointCollectionstylusPointCollection=newStylusPointCollection();stylus......
  • 【转】[C#][WPF] ContentControl 和 ContentPresenter 的区别
    转自:阿里的通义灵码在 https://blog.csdn.net/yao_hou/article/details/134431366需要付费阅读,所以从阿里的通义灵码来寻找答案:WPF中的 ContentControl 和 ContentPresenter 虽然都涉及内容展示,但它们扮演着不同的角色,具有各自的特性和用途。以下是两者之间的主要区......