• STM32F4 ADC之内部温度传感器【库函数操作】


    测量芯片周围的环境温度用。这个温度传感器输出的电压与温度成一定比例,获取温度基本就是用ADC测量这个电压。

    在芯片内部,温度传感器与ADC1的CH16相连。当不使用改传感器时,可将其设置为PowerDown模式以省电。

    主要特性:

    测温范围:-45~+125摄氏度

    测温精度:±1.5摄氏度

    使用步骤:

    1、选择ADC1 CH16作为ADC的输入

    2、设置采样时间

    3、设置ADC1寄存器ADC_CCR的TSVREFE位,将温度传感器从PowerDown模式唤醒。

    4、开始ADC转换

    5、读取转换值Value并换算成电压Vsense,Vsense = Value×3300/4096  (mV)

    6、计算温度。

    温度计算公式:Temp = ((Vsense - V25)/Avg_Slope)+25

    V25是Vsense 在25度时候的值,Avg_Slope 是温度转换率。这两个值可在datasheet里边查到。

    V25 = 0.76V   Avg_Slope = 2.5 mV/°C

    Temp = (Vsense– 760)/2500 + 25;

    【代码实现】

    首先,唤醒温度传感器:

    ADC_TempSensorVrefintCmd(ENABLE);

    将上一程序的4通道,改为16通道:

    ADC_RegularChannelConfig(ADC1,ADC_Channel_16,4,ADC_SampleTime_144Cycles);

    读取这个转换的值,用上边公式计算即可:

    aa = adcvalue[i]-760;
    printf("当前温度是: %f摄氏度\r\n",(aa)/2.5+25);
    printf("%d\r\n",adcvalue[i]);

    这里要注意数据类型,adcvalue定义的是uint16_t的,是无符号数。

    这里能读出温度了,但是还有点问题:温度不准,夜里读出的温度竟然有68度,我乖乖还活不了。不知道是片子工作久了内部温度高还是我的计算有错误。

    但是这个温度确实是随着温度的变化而变化的,板子断电一会温度就下降了,但还是不准

    Technorati 标记: STM32F4,ADC,温度传感器
  • 相关阅读:
    skywalking服务端部署的一些坑
    升级jenkins war包后的问题处理
    无法从cdn上下载节目表问题处理
    jenkins构建状态及参数传递
    vSphereClient克隆虚拟机后网络设置
    升级jenkins war包后的一些想法
    Redis模糊删除Key
    php 0531
    php 0530
    php 0520
  • 原文地址:https://www.cnblogs.com/zyqgold/p/3096013.html
Copyright © 2020-2023  润新知