当前位置:   article > 正文

树莓派 Pico ADC温度测量_树莓派pico 温度计

树莓派pico 温度计

1 工作原理

1.1 ADC基础原理介绍

树莓派Pico内置5个ADC引脚,其中4引脚接入了内置的温度传感器

在这里插入图片描述

ADC(analogue-digital converter) 也即模拟数字转换器,也就是把模拟信号转换为数字信号。

  • RP2040芯片上搭载的ADC能够支持12比特的数模转换: 0 0 0~ 2 12 2^{12} 212
  • RP2040工作电压范围为: 0~3.3V。

可以得到电压与ADC采集参数的换算关系如下:

f a c t o r = 3.3 2 12 factor = \frac {3.3}{ 2^{12}} \qquad factor=2123.3

设ADC读数为 n n n ,那么电压 v v v为:

v = n ∗ 3.3 2 12 v = n * \frac {3.3}{ 2^{12}} \qquad v=n2123.3

详见 [1] 4.9. ADC and Temperature Sensor

1.2 温度传感器

由于ADC直连温度传感器,温度传感器将会把温度以电压的形式反馈输出到ADC中,由ADC转换为数值。

在这里插入图片描述

根据官方给出的物理参数可知:

  • ADC 4通道接入温度传感器,见ADC图电路图。
  • 温度27°C时,电压为 0.706V
  • 温度与电压变换的函数的斜率为 -1.721mV/°C,翻译一下就是每增加1°C那么电压下降0.001721V

设温度为 T T T,当前温度传感器的电压为 v v v,可得到如下关系:

T = 27 − ( v − 0.706 ) 0.001721 T = 27 - \frac {(v - 0.706)}{0.001721} \qquad T=270.001721(v0.706)

电压 v v v可以通过ADC的读数 n n n通过转换公式得到,这样我们就可以通过ADC读数计算出当前温度:

T = 27 − ( n ∗ 3.3 2 12 − 0.706 ) 0.001721 T = 27 - \frac {(n * \frac {3.3}{ 2^{12}} \qquad - 0.706)}{0.001721} \qquad T=270.001721(n2123.30.706)

详见 [1] 4.9.4

2. 开发

  1. 为了能够直观看到温度,我们需要通过串口将温度打印出来需要启用USB UART。
  2. 由于这次还需要使用ADC硬件外设,因此还需需要链接hardware_adc库。

Makefile.txt关键内容如下:

add_executable(adc_temp main.c)
target_link_libraries(adc_temp pico_stdlib hardware_adc)

pico_enable_stdio_usb(adc_temp 1)
pico_enable_stdio_uart(adc_temp 0)

pico_add_extra_outputs(adc_temp)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

程序方面:

  1. 初始化IO。
  2. 初始化ADC
  3. 启用温度传感器。
  4. ADC选择4号引脚读取。
  5. 循环读取计算温度。
#include "pico/stdio.h"
#include "hardware/adc.h"
#include "pico/stdlib.h"
#include <stdio.h>

// 数模转换器为 0~3.3v 最大值为 12bit
const float conversion_factor = 3.3f / (1 << 12);

int main() {
    float v;
    float t;
    stdio_init_all();
    printf("Use adc channel 4, measuring temptutre\n");
    // ADC初始化
    adc_init();
    adc_set_temp_sensor_enabled(true);
    adc_select_input(4);

    while (true) {
        // 数字转换为电压
        v = adc_read() * conversion_factor;
        t = 27 - (v - 0.706) / 0.001721;
        printf("%.2f\n", t);
        sleep_ms(1000);
    }
    return 0;
}
  • 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

程序烧录后读数如下:
在这里插入图片描述

可以发现读数并不准确,根据官方说法根据设备情况的不同,温度随电压的斜率可能会不一致,需要用户校准,才可以获得较为准确的读数。

在这里插入图片描述

参考文献

[1]. raspberrypi . rp2040 datasheet . 2021.11. https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf
[2]. raspberrypi . pico-examples . hello_adc . https://github.com/raspberrypi/pico-examples/blob/master/adc/hello_adc/hello_adc.c

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/468147
推荐阅读
相关标签
  

闽ICP备14008679号