ADC入门

目录

1、ADC简介

2、常见的ADC类型

3、ADC的主要参数

4、怎么计算ADC的值


1、ADC简介

ADC全称是Analog-to-Digital Converter模数转换器。

ADC作用:将时间连续,幅值也连续的模拟信号转换为时间离散,幅值也离散的数字信号

作为硬件工程师,日常用到ADC的需求其实很多,例如制作一个数字电源,单片机需要采样电流电压值来作为反馈,进行PID控制。大部分的嵌入式MCU都集成了ADC,位数有12位,16位不等。但是对于一些对于采样精度还有速度要求比较高的场合,需要用到外置的高速ADC。
 

基本原理:把输入的模拟信号按规定的时间间隔进行采样,并与一系列标准的电压进行比较,使其对应的二进制数值逐次收敛,直至输入电压与内部比较电压一致时为止,然后输出代表该电压的二进制值。

奈奎斯特(Nyquist)采样定理:采样率fs必须大于被测信号感兴趣最高频率分量的两倍,该频率通常被称为奈奎斯特频率fN。用公式显示就是fs>2*fN

ADC学习系列(一):ADC基础概念_幻化由心的博客-优快云博客_奈奎斯特adc本章主要是进行ADC的基础概念学习,从模拟和数字信号进行入手,分析各自的优缺点和应用场合,从而引出数模转换的重要性。紧接着提到了ADC部分最重要的奈奎斯特采样定理,了解采样频率和被测信号频率之间的关系。最后介绍了ADC的采样保持放大电路,作为ADC部分的输入级,该电路对于采样结果有着至关重要的影响。https://blog.youkuaiyun.com/weixin_44786363/article/details/127382567

将模拟转换成数字的形式有两个步骤:采样和量化MCU是无法直接读取模拟量的,所以需要通过“ADC”进行转换,采集模拟量并将模拟量转换成数字量,这样MCU才能获取这个数据。一般ADC是这样进行工作的:举个例子,例如温度,不同温度下温度传感器的材料会有不同的表现,例如热敏电阻,随着温度的改变电阻值会产生变化,那么电阻两端的电压值就会发生变化,“模数传感器”就是将采集到的电压值按照比例转换成对应的二进制数,这样MCU就可以读取这个二进制数,然后再根据比例计算出当前的温度。

微雪树莓派PICO笔记——4. ADC(模拟数字转换器)_wu~~的博客-优快云博客_树莓派adc模块微雪PICO笔记https://blog.youkuaiyun.com/weixin_51684355/article/details/127033226

采样保持放大器(Sample-And-Hold Amplifier)

2、常见的ADC类型

 还有一种积分型,速度最慢

缺点:积分时间决定转换精度,因此牺牲转换速度可以提升精度,在早期的一些仪表转换精度要求不高的场合应用,后来的ADC很少采用这种架构了。

优点:抗噪声能力强。对于零点正负的白噪声,积分时可以消除。

积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。

 

3、ADC的主要参数

(1)  工作电压,基准电压、参考电压(内外部)

参考电压:adc的参考电压决定能测多高的电压,如adc参考基准为1.2v,精度为12位,则在adc测量时是将1.2v的电压分为(2的12次方)4096个等份,每份0.00029V。在adc输入电压超过1.2v时,adc值还在4096。

adc位数adc位数越高,精度越高,如adc精度为12位则可将电压分为4096份。adc精度为10位则可将电压分为1024份

(2) 分辨率Resolution:ADC的位数(或1/2n)

分辨率是ADC最基本的参数,可以用表示每个模拟信号值的位数(二进制)来表示。一个12位ADC能表示2的16次方不同的模拟信号值,位数越多,转换的精度越高,分辨率也就越大。注意,ADC的精度并不仅仅取决于分辨率(3)最小分辨率One least significant bit, LSB

又称最小分辨率,要记住这个参数的英文LSB,满量程值除以ADC的分辨率就是LSB,分辨率是最小能够分辨的模拟电压值,就比如说一个4位的ADC,数字量最高可以表示2的4次方也就是16,满量程5V,那么最小的分辨率就是5/16=0.31V,也就是说这个ADC最小辨认的电压是0.31V,可以用数字量0001表示0.31V这个模拟量。LSB越小表明ADC的精度越高。

(4) 转换时间Conversion Time

因为将一个模拟信号值转换成一个数字量不能瞬间完成,这个过程需要一定的时间转换时间的导数就是转换速率指完成一次从模拟转换到数字的AD转换所需的时间的倒数(频率)转换时间是衡量一个ADC是不是高速的主要指标。高速ADC转换时间小于1us,低俗ADC转换时间大于300us。常用单位是ksps和Msps,表示每秒采样千/百 万次(kilo / Million Samples per Second)。 

积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。

(5) 采样速率Sampling Time

这里说的采样速率就是我们最高的ADC采样频率,也就是数据手册中的Maximum Sampling Frequency。ADC的采样速率必须小于转换速率,常用单位是 ksps 和 Msps,表示每秒 采样千/百万次

(6) 量程 full-scale range, FSR

作为测量元件,量程一定是需要关注的,指的是允许输入的模拟信号范围。

ADC学习系列(二):ADC参数详解_幻化由心的博客-优快云博客_adc静态参数本章节主要讲解ADC的主要参数,部分类似于某些电压电流参数就不提及了,从ADC的基本参数,静态参数,动态参数三大分类来进行讲解。用ADI的高速ADC LTC2380的datasheet部分参数来进行举例。https://blog.youkuaiyun.com/weixin_44786363/article/details/127425612?ops_request_misc=&request_id=&biz_id=102&utm_term=adcFSR&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-127425612.142%5Ev67%5Ejs_top,201%5Ev3%5Econtrol_2,213%5Ev2%5Et3_esquery_v1&spm=1018.2226.3001.4187

(7) 精度:绝对精度和相对精度(受INL和DNL的影响)

ADC的精度自然是相对参考电压而言的,那么基准电压就要稳,电源要稳,

作为时钟的晶振要稳,PCB设计中地要处理好,

高速信号要匹配好,干扰要隔离开,还有软件上的N多配置选择要恰当

3.1 静态参数

1)微分非线性Differential nonlinearity,DNL

用通俗易懂的语言来描述这个DNL特性就是说,理论上我们用数字量的台阶去给模拟电压值进行编码的时候,台阶的宽度应该都是一样的,也就是说当ADC输入和输出是呈线性关系的时候,每次模拟输入按照最小分辨率LSB进行步进的时候,数字输出就增加1,也就是0000变成0001的一个过程。但是由于DNL,导致可能当数字输出由1000变成1001的时候,模拟值的变化却不是按照LSB进行增长的,可能会多一点也可能少一点,我们来假设一下最坏的情况,就是某一时刻由于DNL误差导致正向多了0.5LSB,下一个时刻负向少了0.5LSB,可能会导致编码时丢码,如下图所示。

那么很多的ADC都会有一个NMC参数(No Missing Codes)就是不丢码的范围,保证不会出现DNL这种导致丢码的极限情况。如下图所示:

2) 积分非线性(Integral nonlinearity,INL)

积分大多跟累计误差有关,根据实际的模拟出一条曲线。INL是指ADC器件在所有的数值点上对应的模拟值和真实值之间误差最大的那一点的误差值,表示测量值的绝对误差。下图绿色虚线所示用的表示理想曲线方法是两点法,就是把头和尾用直线连起来。红色虚线是根据实际的情况模拟出的曲线,找到两个曲线纵坐标差距最大的点。
我博主个人的理解INL和ADC累计的误差有关,DNL和ADC单次步进的误差有关,正好对应了微分(瞬时)和积分(累计)的特点

3.2 动态参数

动态参数指的是以下的参数会在ADC实际运行中会不断产生变化。

1)信纳比(SINAD)

信纳比指的是信号+噪声+谐波的功率与谐波+噪声的功率比值 。

计算公式:SINAD=(S+N+D)/(D+N),即输出信号功率与其余所有非输出信号功率之比SINAD很好地反映了ADC的整体动态性能,因为它包括所有构成噪声和失真的成分。

2)信噪比(SNR)

信号与噪声的比值,计算公式如下所示,需要根据FFT进行计算。

理想状态下只考虑ADC的量化噪声,可以推导出SNR理想值

3)有效位数(ENOB)

4) 总谐波失真(THD)

 英文全名是Total Harmonic Distortion,这个参数比较常见,输入信号与系统所有谐波的总功率比。指输出信号比输入信号多出的谐波成分。谐波失真是系统不完全线性造成的。所有附加谐波电平之和称为总谐波失真。总谐波失真与频率有关。一般说来,1000Hz频率处的总谐波失真最小。ADC输出中的谐波失真是由ADC特性中存在的任何非线性引起的。每个实用的ADC都具有非线性特性。结果,每个实际ADC的输出中都存在谐波。DNL和INL是ADC特性非线性的量度,而THD是ADC输出中产生的谐波失真的量度。

5) 无杂散动态范围(SFDR)

英文全称是 Spurious-Free Dynamic range,意为无杂散动态范围,反映了FFT分析频谱中信号幅值与最大谐波的距离关系。所以SFDR值越大则说明系统的噪声水平越低,ADC的动态性能越好。单位dBc是相对于载波频率幅度,dBFS是相对于ADC满量程范围。

对于高速ADC,若要最大程度地提高SFDR,存在两个基本限制:第一是前端放大器和采样保持电路产生的失真;第二是ADC编码器部分的实际传递函数的非线性所导致的失真。提高SFDR的关键是尽可能降低以上两种非线性。

4、怎么计算ADC的值

1、首先确定ADC用几位表示,最大数值是多少;

比如一个8位的ADC,最大值是0xFF,就是255。

2、然后确定最大值时对应的参考电压值;

一般而言最大值对应3.3V。这个你需要看这个芯片ADC模块的说明。寄存器中有对于输入信号参考电压的设置。有些是电压输入的1/3。

3、要计算电压,就把你的ADC数值除以刚才确定的最大数值再乘以参考电压值;

比如你ADC值为0x80份数,那么实际值就是0x80/(0xFF+1)*3.3V = 1.65V。

4、计算出来的电压值只是ADC管脚处的电压值;

你可以用电压表量一下,计算值和实际值是否一样。至于放大器等等,都是芯片外部的事情。外部电路怎么接,和芯片ADC的采样值无关。

5、如果你想知道芯片外部某处的电压,你需要从得出的ADC管脚处的电压(比如刚才的1.65V),再根据电路图进行计算

### PCF8591 的功能与用途 #### 功能概述 PCF8591 是一种集成了模数转换器(ADC)和数模转换器(DAC)的集成电路芯片。它支持通过 I²C 总线接口进行通信,能够实现模拟信号到数字信号的转换以及数字信号到模拟信号的反向转换[^2]。以下是其核心功能: - **模数转换(ADC)**:用于将来自传感器或其他设备的连续模拟信号转变为离散的数字形式以便微处理器处理。例如,它可以用来测量由光敏电阻或热电偶产生的电压变化并将其量化为数值表示[^3]。 - **数模转换(DAC)**:允许将数字编码还原成相应的模拟输出水平。这通常应用于音频合成、电机控制以及其他需要平滑调节输出的任务中[^3]。 #### 主要特点 除了基本的 ADC 和 DAC 功能外,PCF8591 还具备以下显著优点: - **低功耗设计**:由于采用了 CMOS 技术制造工艺,在正常运行模式下消耗较少电力,并且当进入休眠状态时电流降至极低水平,非常适合便携式电子产品的开发项目[^2]; - **宽泛的操作电源范围**:兼容不同规格电池供电方案的同时保持稳定表现,适应性强; - **多路输入选择能力**:内置四个独立通道供用户灵活配置使用,便于构建复杂的传感网络系统; - **易于集成扩展性好**:借助标准 I²C 协议连接主控单元简化布板布局难度,理论上最多可以串联八颗相同型号器件共享单一总线资源而不增加额外连线复杂度。 --- ### 应用场景举例 鉴于以上提到的各项优异属性组合在一起赋予了这款产品广泛的适用领域,下面列举几个典型例子加以说明: #### 家庭自动化控制系统中的环境监测部分 利用安装在家里的各类探测仪器比如温湿度计或者烟雾报警装置所反馈回来的信息经由 PCF8591 处理之后传递给中央服务器做进一步判断决策动作执行情况报告等等一系列操作流程得以顺利完成[^1]。 #### 工业现场仪表校准维护辅助工具制作 针对某些特定类型的机械设备定期开展预防性的保养检修作业期间需要用到精密等级较高的测试手段来验证实际性能参数是否偏离设定阈值区间之外。此时如果采用配备有 PCF8591 构件的小型手持终端就能够快速便捷地完成相应任务目标达成预期效果[^2]。 #### 可穿戴健康追踪配件研发原型搭建阶段选材考量因素之一 考虑到最终成品体积重量限制条件较为苛刻再加上续航时间长短直接影响用户体验满意度高低因此选用像 PCF8591 这样的微型化组件显得尤为重要因为它不仅能满足基础功能性需求而且还能兼顾能耗方面的平衡点找到最佳匹配选项。 ```c // 示例代码片段演示如何初始化并读取 PCF8591 上的一个 ADC 通道 #include <linux/i2c-dev.h> #include <fcntl.h> #include <unistd.h> int main(){ int file; char buf[1]; // 打开 i2c 设备文件 if ((file = open("/dev/i2c-1", O_RDWR)) < 0){ perror("Failed to open the bus."); return -1; } // 设置从机地址为 PCF8591 默认地址 (假设为 0x48) if(ioctl(file, I2C_SLAVE, 0x48) < 0){ perror("Failed to acquire bus access and/or talk to slave."); return -1; } // 向寄存器写入命令字节以激活某个 ADC 输入端口... } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值