ADC简单介绍

本文详细介绍了ADC(模拟数字转换器)的工作原理,包括其电压输入范围、分辨率、触发方式和转换时间。ADC将模拟信号转换为数字信号,其18个通道中16个为外部通道,支持10位和12位分辨率,影响精度。转换模式包括单次和连续,外部触发则允许根据特定事件启动转换。数据对齐确保12位精度的数值能正确存储在16位数据寄存器中。此外,还讨论了如何通过配置ADC初始化结构体来设定工作模式和通道数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ADC模拟数字转换,电压的输入范围为 [ VREF-, VREF+ ]。分别和VSSA与VDDA相连也就是能测量 [ 0, 3.3V ]之间的电压,连接着地和电源,单片机能处理的信号是数字量。如果说模拟电压不在0到3.3之间,需要一个电路转换调整,输入电压的范围一定时,输出总是在需要的范围内。

在这里插入图片描述
根据基尔霍夫定律,电路某一点流入的电流 = 流出的电流
在这里插入图片描述

正题

ADC的输入通道,每个ADC有18个通道,外部通道有16个(对于144个脚的芯片)
ADC的分辨率有10位的和12位的,这里的位指的是二进制的位数,位数越高精度越高。

电压输入范围

ADC是将连续的模拟量转换成数字量,电压的输入来源是VREF- 和 VREF+ 他们分别和VSSA、VDDA相连
在这里插入图片描述

ADC的触发方式:软件触发和外部事件触发
在这里插入图片描述

转换时间

在这里插入图片描述
在这里插入图片描述

计算转换是否准确

外部的模拟量可以用电压表量出来
在这里插入图片描述

ADC初始化结构体讲解

在这里插入图片描述

1、ADC模式:由ADC控制寄存器1的四个位决定
在这里插入图片描述
2、ADC扫描模式
扫描模式如果开启 如果ADC采用了三个通道,则采集完通道1之后采集通道2,在采集通道3,然后在采集通道1,循环采集
3、连续转换模式
如果只有一个通道采集一次之后就停止了,若打开连续采集开关,则会一直采集一直重复,
4、外部触发转换模式
分为规则通道和注入通道两种,左侧的 EXTSEL为选择模式开关
在这里插入图片描述
5、数据对齐
ADC精度12位,数据寄存器是16位的,直接放肯定是不行的,由ADC数据寄存器2的ALIGN为设置左右对齐
在这里插入图片描述
6、表示要使用通道的个数
以规则通道为例,通过配置寄存器1的L为设置使用的通道个数,注入通道类似
在这里插入图片描述

### 关于ADC032时序图及工作原理的说明 ADC032是一种8位模数转换器(Analog-to-Digital Converter, ADC),通常用于将模拟信号转换为数字信号。其工作原理基于逐次逼近寄存器(SAR)技术,这种技术的转换时间通常在微秒级[^2]。以下是关于ADC032时序图及工作原理的详细说明: #### 1. ADC032的工作原理 ADC032通过逐次逼近的方式进行模数转换。具体来说,它使用一个比较器和一个DAC(数字-模拟转换器)来逐步逼近输入的模拟电压值。每次比较后,SAR会调整其输出值,直到找到最接近输入电压的数字值为止。这一过程通常需要8个时钟周期完成一次完整的8位转换。 #### 2. ADC032时序图的关键要素 ADC032的时序图描述了启动转换、等待转换完成以及读取数据的过程。以下是时序图中的关键信号和阶段: - **START信号**:用于启动一次A/D转换。当START信号变为高电平时,ADC032开始执行转换操作。 - **BUSY信号**:表示当前转换是否正在进行。在转换过程中,BUSY信号保持高电平;转换完成后,BUSY信号变为低电平。 - **CLK信号**:提供时钟脉冲以控制转换过程。每个时钟周期对应一次逐次逼近操作。 - **DATA OUT信号**:在转换完成后,该信号输出对应的数字值。通常需要等待BUSY信号变为低电平后再读取数据。 #### 3. 时序图的典型流程 根据类似ADC0804的时序图[^1],ADC032的时序图可以概括为以下流程: - 当START信号被触发时,ADC032进入转换状态。 - 在转换期间,BUSY信号保持高电平,同时内部电路通过逐次逼近算法确定最终的数字值。 - 转换完成后,BUSY信号变为低电平,此时可以通过读取DATA OUT引脚获取转换结果。 #### 4. 示例代码 以下是一个简单的示例代码,展示如何通过软件控制ADC032进行A/D转换并读取结果: ```c #include <stdio.h> #include <stdint.h> #define START_PIN (1 << 0) // 假设START信号连接到P0.0 #define BUSY_PIN (1 << 1) // 假设BUSY信号连接到P0.1 #define DATA_OUT_PIN (1 << 2) // 假设DATA OUT信号连接到P0.2 void adc_start_conversion() { // 设置START信号为高电平以启动转换 PORT0 |= START_PIN; } uint8_t adc_read_data() { while (PORT0 & BUSY_PIN); // 等待BUSY信号变为低电平 return PORT0 & DATA_OUT_PIN; // 读取DATA OUT引脚的数据 } int main() { adc_start_conversion(); // 启动一次A/D转换 uint8_t result = adc_read_data(); // 读取转换结果 printf("A/D Conversion Result: %d\n", result); return 0; } ``` #### 5. 注意事项 - 转换时间取决于时钟频率和ADC的类型。对于ADC032,其转换时间通常小于10μs[^2]。 - 在实际应用中,可能需要添加适当的延迟以确保转换完成后再读取数据[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值