news 2026/2/2 11:12:29

学习笔记——ADC(模数转换器)技术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习笔记——ADC(模数转换器)技术

ADC(模数转换器)技术详解

1. 什么是ADC?

ADC(Analog-to-Digital Converter)即模拟-数字转换器,是一种将连续变化的模拟信号转换为离散数字信号的电子设备或模块。

特性:

  • 输入:连续模拟信号(通常是电压信号)

  • 输出:离散数字信号(二进制代码)

  • 作用:作为物理世界与数字系统(如微处理器、微控制器)之间的桥梁

典型应用场景:

  • 传感器信号采集(温度、光照、压力等)

  • 音频信号处理

  • 工业测量与控制

  • 医疗电子设备

2. 什么是ADC的基准电压?

基准电压是ADC进行转换的参考标准,决定了ADC的测量范围和精度。

关键概念:

  • ADC_VREFH:参考电压高电平(如i.MX6ULL中的ADC_VREFH引脚)

  • ADC_VREFL:参考电压低电平(通常接地)

  • 测量范围:输入模拟电压必须在VREFL和VREFH之间

i.MX6ULL ADC参考电压配置:

[REFSEL] b12-b11:电压参考源选择 00 = 使用VREFH/VREFL引脚的外部参考电压
  • 通常VREFH接3.3V,VREFL接GND(0V)

  • 输入电压超过基准电压范围会导致结果饱和(全0或全1)

3. ADC的工作原理

基本转换过程(以逐次逼近型ADC为例):

模拟信号 → 采样保持 → 量化 → 编码 → 数字输出
(1)采样(Sampling)
  • 以固定时间间隔采集模拟信号的瞬时值

  • 奈奎斯特采样定理:采样频率必须大于信号最高频率的2倍

(2)保持(Hold)
  • 保持采样值稳定,便于ADC进行转换

  • i.MX6ULL配置选项:

    [ADLSMP] b4:长采样时间配置 [ADSTS] b9-b8:采样时间选择
(3)量化(Quantization)
  • 将连续幅度离散化

  • 将采样值映射到最接近的离散电平

  • 量化误差 = ±1/2 LSB

(4)编码(Encoding)
  • 将量化后的电平转换为二进制代码

  • i.MX6ULL支持多种分辨率:

    [MODE] b3-b2:转换模式选择(分辨率) 00 = 8位单端 01 = 10位单端 10 = 12位单端(常用) 11 = 10位差分

4. 什么是ADC的分辨率?

定义:

分辨率表示ADC能够区分的最小输入电压变化,通常用位数表示。

常见分辨率:

位数量化级数理论精度应用场景
8位2560.39%简单控制
10位10240.098%一般测量
12位40960.024%精密测量(i.MX6ULL支持)
14位163840.0061%高精度测量
16位655360.0015%专业仪器
24位16.7M0.000006%高精度传感器

i.MX6ULL ADC分辨率配置:

// 配置为12位分辨率 ADCx_CFG |= (0x2 << 2); // MODE[3:2] = 10

5. 电压计算公式(12位分辨率,3.3V基准)

基本公式:

𝑉𝑎𝑐𝑡𝑢𝑎𝑙=𝑛212×𝑉𝑟𝑒𝑓=𝑛4096×3.3𝑉Vactual​=212n​×Vref​=4096n​×3.3V

推导过程:

  1. 分辨率:12位 → 2¹² = 4096个量化级

  2. 每个LSB代表的电压

    𝐿𝑆𝐵=𝑉𝑟𝑒𝑓4096=3.3𝑉4096≈0.0008057𝑉≈0.806𝑚𝑉LSB=4096Vref​​=40963.3V​≈0.0008057V≈0.806mV
  3. 实际电压计算

    𝑉𝑎𝑐𝑡𝑢𝑎𝑙=𝑛×𝐿𝑆𝐵=𝑛×3.3𝑉4096Vactual​=n×LSB=n×40963.3V​

计算示例:

量化结果n实际电压计算电压值
00/4096 × 3.3V0V
20482048/4096 × 3.3V1.65V
40954095/4096 × 3.3V≈3.2992V

代码实现:

// 将ADC原始值转换为电压值(12位分辨率,3.3V基准) float adc_to_voltage(uint16_t adc_value) { // 确保值在有效范围内 if (adc_value > 4095) adc_value = 4095; // 计算电压值 float voltage = (float)adc_value * 3.3f / 4096.0f; return voltage; } // 示例:ADC读取值为2048时 uint16_t raw_value = 2048; // ADC原始数据 float voltage = adc_to_voltage(raw_value); // voltage ≈ 1.65V

i.MX6ULL ADC数据读取:

// 读取ADC转换结果(12位数据在低12位) uint16_t read_adc_value(void) { // 等待转换完成 while (!(ADC1_HS & 0x01)) { // 等待COCO0标志置位 } // 读取转换结果 uint16_t result = ADC1_R0 & 0x0FFF; // 取低12位 return result; }

总结要点

  1. ADC是模拟与数字世界的桥梁,实现连续信号到离散信号的转换

  2. 基准电压决定测量范围和精度,必须稳定准确

  3. 工作原理包括采样、保持、量化、编码四个关键步骤

  4. 分辨率表示精度,位数越高,量化误差越小

  5. 电压计算遵循线性关系:V_actual = (n / 2^N) × V_ref

实际应用注意事项

  1. 输入阻抗匹配:确保信号源阻抗与ADC输入阻抗匹配

  2. 噪声抑制:在ADC输入前添加RC滤波电路

  3. 采样速率选择:根据信号频率选择合适采样率

  4. 校准使用:定期进行ADC校准以提高精度

  5. 参考电压稳定性:使用稳定、低噪声的参考电压源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/1 3:18:03

Sealos 私有化 vs 公有云:什么场景该选哪个

说实话&#xff0c;这个问题我被问了不下一百遍。每次我都想反问一句&#xff1a;你到底在纠结什么&#xff1f;先说结论&#xff1a;大部分人不需要私有化我见过太多这样的场景&#xff1a;一个三五人的小团队&#xff0c;项目刚起步&#xff0c;用户量还没破万&#xff0c;上…

作者头像 李华
网站建设 2026/1/30 14:27:46

2026年度热门盘点原创音乐人首选的5款AI编曲软件

在当今音乐创作的浪潮中&#xff0c;AI编曲软件正逐渐成为原创音乐人的得力助手。它们凭借强大的技术能力&#xff0c;不仅能大幅提升创作效率&#xff0c;还能为音乐带来更多新颖的元素和风格。这些软件打破了传统创作的时间和空间限制&#xff0c;让音乐人可以更自由地发挥创…

作者头像 李华
网站建设 2026/1/31 2:28:42

怎么快速完成编曲?盘点原创音乐人常用的5款AI编曲软件

在音乐创作的领域里&#xff0c;时间和效率往往是原创音乐人面临的一大挑战。传统的编曲过程&#xff0c;从灵感捕捉到旋律构建&#xff0c;再到和声编排和节奏设计&#xff0c;每一个环节都需要耗费大量的时间和精力。而如今&#xff0c;AI编曲软件的出现为音乐人带来了新的曙…

作者头像 李华
网站建设 2026/2/1 22:05:27

人群仿真软件:Vadere_(15).社区与支持资源

社区与支持资源 在进行人群仿真软件的二次开发过程中&#xff0c;社区和支持资源是不可或缺的一部分。这些资源提供了丰富的文档、教程、示例代码和用户反馈&#xff0c;帮助开发者更好地理解和使用软件。本节将详细介绍如何利用这些资源&#xff0c;包括官方文档、用户论坛、…

作者头像 李华
网站建设 2026/2/2 1:28:54

【ShardingJDBC 】【实战】----- SpringBoot3 整合 ShardingJDBC 做分库分表

文章目录 Spring Boot 3 整合 Sharding-JDBC 分库分表实现Nacos配置中心配置Sharding-JDBC 配置类SysMessage 实体类mapper类服务接口类服务接口实现说明 基于spring boot3 lombok 1.18.30 mybatis plus 3.5.5 nacos Spring Boot 3 整合 Sharding-JDBC 分库分表实现 根据需求…

作者头像 李华
网站建设 2026/2/2 7:02:32

【MyCat】第4章 ----垂直拆分——分库

文章目录 4.1 如何划分表4.2 实现分库1、 修改 schema 配置文件2、 新增两个空白库3、 启动 Mycat4、 访问 Mycat 进行分库 一个数据库由很多表的构成&#xff0c;每个表对应着不同的业务&#xff0c;垂直切分是指按照业务将表进行分类&#xff0c;分布到不同 的数据库上面&…

作者头像 李华