RTT-ADC

1. ADC 是什么?

ADC(Analog-to-Digital Converter,模数转换器)的作用是:把连续变化的模拟电压转换成 MCU 能处理的数字值。

常见应用:读取电位器、光敏电阻、热敏电阻、电池电压等模拟信号。

2. ADC 转换过程

一次模数转换通常包括:

复制代码
采样 → 保持 → 量化 → 编码 → 数字值
  • 采样:在某个时刻获取模拟电压。

  • 保持:在转换期间让电压保持稳定。

  • 量化:把连续电压映射到有限个等级。

  • 编码:输出对应的二进制数字。

3. 三个关键参数

参数 含义
分辨率 ADC 可区分的最小电压变化。12 位 ADC 有 2^12 = 4096 个等级。
参考电压 ADC 的测量基准。例如参考电压为 3.3V,通常可测量 0V 到 3.3V。
转换速率 每秒可完成的转换次数,单位常为 SPS。

以 12 位、3.3V 参考电压为例,每个等级约为:

复制代码
3.3V / 4096 ≈ 0.806mV

注意:分辨率不等于精度。分辨率表示划分得有多细,精度表示测量值离真实值有多近。

4. RT-Thread ADC 设备模型

RT-Thread 使用统一接口屏蔽不同芯片 ADC 寄存器和驱动的差异:

复制代码
应用程序
   ↓
ADC 设备管理接口
   ↓
ADC 设备驱动框架
   ↓
芯片 ADC 驱动
   ↓
硬件 ADC

驱动层需要适配 ADC 的使能、转换、获取分辨率和参考电压等操作,并注册为 adc0adc1 等设备。

5. 常用 API

接口 作用
rt_device_find() 根据名称查找 ADC 设备
rt_adc_enable() 使能指定 ADC 通道
rt_adc_read() 读取指定通道的原始采样值
rt_adc_disable() 关闭指定 ADC 通道

6. 标准使用流程

复制代码
查找 ADC 设备 → 使能通道 → 读取采样值 → 换算电压 → 关闭通道

示例:读取 adc1 的第 5 通道,并换算为毫伏。

复制代码
#define ADC_DEV_NAME     "adc1"
#define ADC_CHANNEL      5
#define ADC_BITS          12
#define VREF_MV           3300
​
rt_adc_device_t adc_dev;
rt_uint32_t raw_value;
rt_uint32_t voltage_mv;
​
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (adc_dev != RT_NULL)
{
    rt_adc_enable(adc_dev, ADC_CHANNEL);
​
    raw_value = rt_adc_read(adc_dev, ADC_CHANNEL);
    voltage_mv = raw_value * VREF_MV / (1U << ADC_BITS);
​
    rt_kprintf("voltage: %d mV\n", voltage_mv);
​
    rt_adc_disable(adc_dev, ADC_CHANNEL);
}

代码解析: rt_device_find() 查找名为 adc1 的 ADC 控制器,返回 RT_NULL 说明设备不存在;rt_adc_enable() 打开第 5 通道;rt_adc_read() 得到原始转换值。示例假设 ADC 为 12 位、参考电压为 3300mV,因此用 raw_value * 3300 / 4096 换算为毫伏。读取结束后调用 rt_adc_disable() 关闭通道。实际项目中应根据芯片和板卡的真实分辨率、参考电压修改宏定义。

电压换算公式:

复制代码
实际电压 = 采样值 × 参考电压 / 2^分辨率位数

总结

ADC 用于把"电压"变成"数字"。在 RT-Thread 中,应用层只需掌握:

复制代码
find → enable → read → convert → disable

这种统一的 ADC 设备接口,使同一套应用代码更容易迁移到不同的 MCU 平台。

相关推荐
y = xⁿ3 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
AOI小白新手上路3 小时前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
oshan20125 小时前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
记帖6 小时前
STM32C5A3R开发(7)----ADC电压采集
嵌入式硬件·adc·dac·stm32cubeide·stm32c5·stm32cubemx2·stm32c5a3rgt6
HugoStudio_SWAN6 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
sakiko_8 小时前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
自小吃多8 小时前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件
jianqiang.xue9 小时前
智能体整体架构设计:四大模块与目录组织
单片机·嵌入式硬件·物联网·架构·esp32
存在morning9 小时前
【Paimon 学习笔记 三】工作流程:Paimon 的批写、流写、批读与流读
笔记·学习
Messy create11 小时前
【BMS-AFE-温度检测】
stm32·单片机·能源