ADC基准电压与参考电压详细解读:以STM32和28335为例

ADC的参考电压和基准电压

ADC(模数转换器)是将模拟信号转换为数字信号的设备。转换过程中,需要一个参考电压(Vref)作为转换的基准。这个参考电压决定了ADC的输入范围,通常ADC输出的数字值表示输入电压相对于参考电压的比例。

1. ADC基准电压和参考电压是什么?

1.1 参考电压(ADC Reference Voltage, Vref)

  • 参考电压定义ADC转换时实际使用的电压基准 ,通常称为Vref决定了ADC能容忍的输入电压范围 ,即定义了ADC的满量程输入电压。例如,对于一个12位ADC,如果Vref=3.3V,那么输入电压0V对应数字输出03.3V对应4095即(2^12-1)

  • 数学关系数字输出 = (Vin / Vref) × (2^N - 1)

    • • Vin:输入电压

    • • Vref:参考电压

    • • N:ADC分辨率(位数)

关键结论:参考电压直接决定了ADC的测量范围,但并非完全等于测量范围。

  • • 对于单端输入的ADC:

    • • 当输入电压为0V时,ADC输出码 = 0

    • • 当输入电压 = Vref(参考电压)时,ADC输出码 = 满量程码

    • 测量范围 = 0, Vref

  • • 对于差分输入的ADC:

    • • 当输入电压差 = -Vref/2 时,ADC输出码 = 0

    • • 当输入电压差 = +Vref/2 时,ADC输出码 = 满量程码

    • 测量范围 = -Vref/2, +Vref/2

1.2 基准电压(Voltage Reference)

  • 基准电压定义 :通常指一个高精度、高稳定性的电压源,用于提供参考电压(可以不局限于为ADC提供参考电压)。基准电压源可以是内部的(芯片内置)或外部的(外部电路提供)。内部基准电压通常由带隙基准(Bandgap)电路产生,外部基准则可以使用专门的基准电压芯片(如TL431、REF系列等)。

  • 特性

    • • 低温度系数(通常<50ppm/℃)

    • • 低噪声(微伏级别)

    • • 长期稳定性好

    • • 可以是内部电路或外部专用芯片

1.3 基准电压与参考电压的关系

  • 基准电压 :是一个高精度、高稳定度的电压源,它可以是ADC参考电压的来源,也可以用于系统其他部分(如DAC、比较器等)。基准电压可以是内部的(如芯片内置的带隙基准)或外部的(如专用基准芯片)。

  • 参考电压是ADC转换时使用的实际参考电压,它可以直接来自于基准电压,也可以来自电源电压或其他电压

基准电压既可以作为参考电压直接使用,也可以用于校准和修正。

  • • 情况一:基准电压作为参考电压

    • • 当ADC的参考电压选择为内部基准或外部基准时,这个基准电压就是参考电压,直接决定ADC的测量范围。例如,STM32的ADC可以选择内部基准VREFINT(约1.2V)作为参考电压,此时ADC的测量范围就是0~1.2V。
cpp 复制代码
// STM32L4内部基准作为参考电压的配置
void ADC_UseInternalRefAsVref(void) 
{
    // 1. 使能内部基准电压(VREFINT)
    ADC->CCR |= ADC_CCR_VREFEN;
    
    // 2. 配置ADC使用内部基准作为参考电压
    ADC->CCR |= ADC_CCR_VSEL_0;// 选择2.5V内部基准
    
    // 3. 此时ADC的测量范围变为0~2.5V
    //而不是默认的0~VDDA
    
    // 优势:提高低电压测量精度
    // 例如:测量0~1V的传感器信号
    // 使用VDDA(3.3V):分辨率为3.3V/4096 ≈ 0.8mV
    // 使用内部基准(2.5V):分辨率为2.5V/4096 ≈ 0.61mV
    // 分辨率提升了约30%
}
  • • 情况二:基准电压用于修正

    • 当ADC使用其他参考电压(如VDDA)时,内部基准电压(VREFINT)可以用来校准VDDA的实际值,从而修正ADC的测量结果。这种情况下,内部基准电压并不直接作为参考电压,而是作为一个已知的、稳定的电压来测量VDDA的波动,从而计算出实际的参考电压值。
cpp 复制代码
// 当使用VDDA作为参考电压时,用内部基准校准
void ADC_CalibrateWithInternalRef(void) 
{
    // 情况:ADC使用VDDA作为参考电压
    // 但VDDA的实际值可能不是精确的3.3V
    
    // 1. 测量内部基准电压通道
    uint16_t vrefint_raw = ADC_ReadChannel(ADC_CHANNEL_VREFINT);
    
    // 2. 读取出厂校准值(在3.3V VDDA下测量的VREFINT值)
    uint16_t vrefint_cal = *(uint16_t*)0x1FFF75AA;
    
    // 3. 计算实际VDDA
    // 已知:出厂时VDDA=3.3V,VREFINT典型值=1.2V
    // 公式:实际VDDA = (3.3V × vrefint_cal) / vrefint_raw
    float vdda_actual = (3.3f * vrefint_cal) / vrefint_raw;
    
    // 4. 用实际VDDA校准所有测量值
    // 原来:电压 = (ADC码/4095) × 3.3V(假设值)
    // 现在:电压 = (ADC码/4095) × vdda_actual(实际值)
}
cpp 复制代码
基准电压(Voltage Reference)
↓(可以作为)
参考电压(ADC Reference, Vref)
↓(决定)
ADC测量范围
↓(影响)
ADC分辨率(LSB = Vref / (2^N - 1))

1.4 ADC参考电压的来源

  • • 内部基准电压(如带隙基准,1.2V、2.5V等)

  • • 外部基准电压引脚接入的电压(通过VREF+引脚接入)

  • • 电源电压(如VDD)等

来源类型 优点 缺点 适用场景
内部基准 集成度高、成本低、简单 精度较低(±1-2%)、温漂大、噪声较高 一般精度要求、消费电子
外部基准 精度高(±0.1%以下)、温漂小、噪声低 增加成本、占用PCB面积、设计复杂 精密测量、工业控制
电源电压 无需额外电路、成本最低 精度最差、随电源波动 低成本应用、比例测量
  • 参考电压决定了ADC的测量范围,参考电压是多少,ADC的输入范围就是0到该电压(单端情况下)。

  • 基准电压可以是参考电压的来源,也可以仅用于校准

  • 内部基准电压既可以直接作为参考电压使用,也可以用来校准其他参考电压(如VDDA)

2. 实际工程中的三种场景

场景一:内部基准直接作为参考电压

适用于:需要固定、稳定的测量范围

  • • 优点:不依赖外部电源质量

  • • 缺点:基准电压值固定,可能不满足所有需求

例如:使用STM32内部1.2V基准

  • • ADC测量范围:0~1.2V

  • • 分辨率:1.2V/4096 ≈ 0.29mV(12位ADC)

  • 适合测量小信号传感器

场景二:外部基准作为参考电压

适用于:高精度测量

  • • 优点:精度高、温漂小、噪声低

  • • 缺点:增加成本和PCB面积

例如:使用外部REF5025基准芯片

  • • 基准电压:2.500V ± 0.05%

  • • ADC测量范围:0~2.500V

  • • 精度:主要取决于基准精度

场景三:电源作为参考电压,内部基准用于校准

适用于:低成本、中等精度应用

  • • 优点:节省成本

  • • 缺点:精度受电源影响

流程:

  • • ADC使用VDDA(3.3V)作为参考

  • • 定期测量内部基准电压通道

  • • 计算VDDA实际值

  • • 用实际VDDA校准所有测量

3. 不同MCU的片上ADC参考电压

不同MCU的ADC参考电压来源可能不同,通常可以通过寄存器配置选择。

3.1 STM32F1

STM32的ADC参考电压来源取决于具体型号。对于有Vref+和Vref-引脚的型号,参考电压可以由外部提供;对于没有这些引脚的型号,参考电压通常来自电源电压(VDDA和VSSA)。

参考电压来源
  • • 外部参考电压:通过Vref+和Vref-引脚接入。Vref+接正参考电压,Vref-接负参考电压(通常是地)。

  • • 内部参考电压:STM32内部有一个内置的参考电压(VREFINT),但这个电压并不是直接作为ADC的参考电压,而是用于校准或测量内部参考电压值 ,以便进行更精确的转换。实际上,ADC的参考电压仍然是VDDA(模拟电源电压)或外部Vref+。注意:有些STM32型号内部有可选的参考电压源,但通常还是需要外部参考电压来获得高精度。

  • • 在STM32中,ADC的参考电压默认是VDDA(模拟电源电压)。如果使用外部参考电压,需要将Vref+连接到外部基准电压源电路,并且VDDA也必须供电(通常VDDA和Vref+可以连接在一起,但为了精度,有时会分开)。

  • • 内部参考电压(VREFINT):STM32内部有一个带隙基准电压,大约1.2V(具体值见数据手册),它连接到ADC的一个内部通道(通常为通道17)。用户可以通过读取这个通道的值来反推VDDA的电压,从而校准ADC的测量。但注意,这个内部参考电压并不是直接作为ADC的参考电压(即ADC的参考电压仍然是VDDA或外部Vref+),它只是用于校准。

  • • 配置:在STM32中,ADC的参考电压来源通常由硬件电路决定,软件上不能随意选择参考电压来源(除了少数系列,如STM32L0,可以通过配置选择内部参考电压作为ADC的参考电压)。对于大多数STM32,参考电压是固定的(VDDA或外部Vref+),软件只能选择是否使用内部参考电压通道进行校准。

  • • 例如,在STM32F1中,ADC的参考电压就是VDDA和VSSA。没有寄存器可以选择其他参考电压。而在STM32L系列中,ADC支持可编程的参考电压,可以选择内部参考电压(VREFINT)作为参考电压,但需要注意内部参考电压的精度和温度漂移。

3.2 ARM类型

  • • 可以控制内部基准电压值,但是AD只能使用1.45V的基准电压作为内部参考电压

  • • AD可通过配置选择参考电压来源:常见的选择VDD即MCU供电电源或者片上AD的单独供电电源。如果需要更高精度,则需要搭建外部基准源电路;如果需要简单,可以选择内部基准作为AD的参考电压,但导致AD的输入采集范围受限制。

内部基准(VREFINT)的双重作用
    1. 校准用途(主要功能)
cpp 复制代码
// 读取内部基准通道值来校准VDDA
float VDDA_actual = 3.3; // 假设标称值
uint16_t VREFINT_CAL = *((uint16_t*)0x1FFF7A2A); // 出厂校准值@3.3V
uint16_t VREFINT_DATA = ADC_ReadChannel(ADC_CHANNEL_VREFINT);
float VREFINT_VOLT = 1.20; // 典型值1.20V

// 计算实际VDDA
VDDA_actual = (VREFINT_CAL * VREFINT_VOLT) / VREFINT_DATA;

// 校准其他通道测量值
float voltage_measured = (adc_raw * VDDA_actual) / 4095.0f;
    1. 直接作为参考电压(部分型号支持)
cpp 复制代码
// STM32L等支持内部基准作为ADC参考
// 设置ADC参考电压为内部基准
ADC1->CCR |= ADC_CCR_VREFEN; // 使能内部基准
ADC1->CCR |= ADC_CCR_VSEL_0; // 选择VREFINT作为参考
// 注意:内部基准电压通常较低(1.2V或2.5V)
// 会减小ADC输入范围,但提高低电压测量精度
  • • 会减小ADC输入范围,但提高低电压测量精度
配置经验
cpp 复制代码
// 高精度配置示例(使用外部基准)
void ADC_Config_HighPrecision(void) 
{
    // 硬件:VREF+连接外部2.5V基准(如REF5025)
    // VDDA必须≥VREF+ + 0.2V
    
    // 软件配置
    ADC->CCR &= ~ADC_CCR_VREFEN; // 禁用内部基准输出
    // 无需特殊配置,ADC自动使用VREF+引脚电压
    
    // 注意:ADC参考电压范围需符合芯片规格
    // STM32F4:2.4V ≤ VREF+ ≤ VDDA
}

3.3 DSP28335(TI C2000系列)

参考电压
  • • 根据TI的官方文档,DSP28335的ADC模块有一个内部参考电压源,它产生两个电压:REFHI和REFLO。这两个电压是内部带隙基准产生的,典型值为REFHI = 2.048V,REFLO = 1.248V,因此内部参考电压差为0.8V(2.048V - 1.248V = 0.8V)。但是,ADC的输入范围并不是由这个0.8V直接决定的,因为内部有一个放大器,可以将输入信号进行缩放。

  • • 实际上,ADC的模拟输入电压范围是由内部参考电压和外部电路共同决定的。DSP28335的ADC模块可以工作在两种模式:单端模式和差分模式。在单端模式下,ADC的输入电压范围是0到3V(相对于地)。在差分模式下,输入电压范围是-0.5V到3.5V(差分对的两个引脚之间的电压差)。

  • • 那么,为什么内部参考电压是2.048V和1.248V这样的特殊值呢?这主要是为了满足ADC的输入范围要求,同时提供稳定的参考。内部参考电压源产生的0.8V差分参考电压,经过内部放大电路,可以使得ADC的输入范围达到0-3V(单端)。具体来说,内部放大器将输入信号放大(或衰减)到0.8V的参考电压范围内,然后进行转换

cpp 复制代码
输入信号范围 (0~3V)
│
↓ 除以3.75(实际上是电平移位+缩放)
│
ADC核心输入 (0~0.8V)
│
↓ 与0.8V参考比较
│
数字输出 (0~4095)
  • • 关键点:输入放大器/衰减器的作用

    • • 不是简单的增益为1的放大器

    • • 而是将0-3V映射到0~0.8V的线性转换器

    • • 这种设计允许使用低电压、高精度的ADC核心

  • • 外部参考电压引脚(ADCREFP和ADCREFM)是用来接收外部参考电压的,但通常不推荐直接使用外部参考电压,因为内部参考电压已经足够稳定 。如果需要使用外部参考,那么需要将外部参考电压连接到这两个引脚,并且外部参考电压的值必须满足一定的要求(具体见数据手册)。但是,请注意,即使使用外部参考,ADC的输入范围也不是直接由外部参考电压决定的,因为内部放大器的增益是固定的,所以外部参考电压必须与内部电路匹配。

  • • 根据数据手册,外部参考电压必须满足:ADCREFP - ADCREFM = 1V(典型值),并且ADCREFM通常接1V,ADCREFP接2V。但是,为什么在数据手册中又提到内部参考是2.048V和1.248V呢?这里有一个关键点:内部参考电压和外部参考电压是两套不同的系统。内部参考电压是芯片自带的,而外部参考电压是用户提供的。当使用内部参考时,芯片内部会将REFHI和REFLO连接到ADCREFP和ADCREFM引脚,并且需要在ADCREFP和ADCREFM引脚上连接外部电容(通常为10µF和0.1µF)来稳定参考电压。当使用外部参考时,用户需要提供稳定的1V差分参考电压(即ADCREFP比ADCREFM高1V),并且ADCREFM通常为1V,ADCREFP为2V。

  • • 那么,为什么参考电压是2.048V和1.248V这样的特殊值呢?实际上,外部参考电压并不一定是2.048V和1.248V,而是要求ADCREFP比ADCREFM高1V。但是,内部参考电压源产生的电压是2.048V和1.248V,所以当使用内部参考时,ADCREFP和ADCREFM引脚上的电压就是这两个值 。因此,2.048V和1.248V是内部参考电压源的输出电压,而外部参考电压要求是1V的电压差,但电压值可以不同(例如ADCREFM=1V,ADCREFP=2V)。

  • • 为什么外部参考电压不决定ADC输入电压范围?因为ADC的输入电压范围是由内部放大器的增益和参考电压差共同决定的。内部参考电压差是0.8V(2.048V-1.248V),而外部参考电压差要求是1V。但是,无论使用内部参考还是外部参考,ADC的输入范围都是0-3V(单端)。这是因为内部放大器的增益是固定的,它将输入信号调整到参考电压的范围内。具体来说,对于单端输入,ADC的转换公式为:

    • • 数字输出 = (输入电压 - 地) / (3V) * 4095
  • • 这里的3V是ADC的满量程输入电压,而不是参考电压。参考电压(无论是内部0.8v还是外部1v)是用来产生内部比较器的参考电平的,但是通过内部放大器的增益,使得输入电压范围被映射到0-0.8V从而能够和AD的参考电压进行比较得到AD码值。

  • • 因此,我们可以这样理解:DSP28335的ADC模块内部有一个固定的增益,使得在单端模式下,0-3V的输入电压被转换到内部ADC核心的0-0.8V(或0-1V,取决于参考电压差)范围内。然后,内部ADC核心(12位)将这个0-0.8V(或0-1V)的电压转换为数字量

总结一下
  • • DSP28335的ADC内部参考电压源产生REFHI=2.048V,REFLO=1.248V,差值为0.8V。

  • • 当使用内部参考时,需要在ADCREFP和ADCREFM引脚上连接电容,此时这两个引脚上的电压就是2.048V和1.248V。

  • • 当使用外部参考时,需要提供1V的差分电压(例如ADCREFM=1V,ADCREFP=2V)。

  • • ADC的输入电压范围(单端0-3V)是由内部放大器的增益和参考电压差共同决定的,而不是直接由参考电压值决定。

cpp 复制代码
DSP28335 ADC参考电压系统三要点:

1. 双参考电压架构
- REFHI和REFLO提供差分参考
- 典型值:2.048V和1.248V(差0.8V)
- 这个0.8V是ADC核心的基准

2. 输入范围固定
- 前端模拟电路固定输入为0~3V
- 与参考电压值无关
- 这是硬件设计决定的

3. 参考电压作用
- 只影响ADC核心的转换精度
- 不决定输入信号范围
- 提供稳定的转换基准

为什么DSP28335的参考电压不决定输入范围?

  • • 因为TI采用了输入范围固定的架构设计。前端模拟电路将0-3V输入信号线性映射到ADC核心的0~0.8V范围,参考电压只提供这个0.8V基准的精度。这种设计简化了用户接口,保证了系统稳定性,是TI DSP的经典设计之一。

  • 精度与范围分离:参考电压影响精度,前端电路决定范围

2.048V等特殊电压的来源?

  • • 来自内部带隙基准和缓冲放大器的组合,选择这些值是为了二进制计算的便利性和历史兼容性。它们不是ADC工作的必要条件,但提供了良好的系统兼容性和计算便利性。
参考电压配置寄存器
cpp 复制代码
// ADC参考电压选择(AdcRegs.ADCCTL1)
#define ADC_REF_SEL_INTERNAL 0x0000
#define ADC_REF_SEL_EXTERNAL 0x0020

// 配置示例
void ConfigureADC28335(void) 
{
    // 选择内部参考电压
    AdcRegs.ADCCTL1.bit.REF_SEL = ADC_REF_SEL_INTERNAL;
    
    // 使能内部参考电压电路
    AdcRegs.ADCCTL1.bit.REF_ENA = 1;
    
    // 等待参考电压稳定(数据手册要求)
    DELAY_US(100);// 至少50µs
    
    // 注意:使用内部参考时,REFHI/REFLO引脚
    // 必须连接推荐的外部电容网络
}
  • • 使用内部参考时,REFHI/REFLO引脚必须连接推荐的外部电容网络
外部基准连接方式
cpp 复制代码
// 使用外部基准时的配置
void ADC_ExternalRef_Config(void) 
{
    // 1. 禁用内部基准
    AdcRegs.ADCCTL1.bit.REF_ENA = 0;
    
    // 2. 选择外部参考
    AdcRegs.ADCCTL1.bit.REF_SEL = ADC_REF_SEL_EXTERNAL;
    
    // 3. 硬件连接:
    //REFHI引脚 ← 外部基准芯片(如REF3030)
    //REFLO引脚 ← 外部基准芯片地或偏置电压
    //注意:外部基准电压必须在规定范围内 REFHI-REFLO
}

3.4 MPC5xxx(PowerPC架构)

  • • ADC是12位逐次逼近型(SAR)ADC。

  • • 参考电压可以选择内部参考电压(内部带隙基准)或外部参考电压(通过VREFH和VREFL引脚)。

  • • 内部参考电压有两种选择:1.5V或2.5V(通过配置选择)。

  • • 外部参考电压通过VREFH和VREFL引脚提供,VREFH是正参考电压,VREFL是负参考电压(通常是地)。

ADC的输入电压范围由参考电压决定。对于MPC5xxx,ADC的模拟输入电压范围是VREFL到VREFH。也就是说,当使用内部参考电压时,输入电压范围是0V到内部参考电压(1.5V或2.5V)。当使用外部参考电压时,输入电压范围是外部VREFL到VREFH。

但是,这里有一个重要的点:MPC5xxx的ADC输入通道可以配置为单端输入或差分输入。在单端输入模式下,输入电压范围是VREFL到VREFH。在差分输入模式下,输入电压范围是-(VREFH-VREFL)/2到+(VREFH-VREFL)/2,即正负一半的参考电压差。

因此,MPC5xxx的ADC参考电压(无论是内部还是外部)确实决定了ADC的输入电压范围。这与DSP28335不同,DSP28335的输入电压范围是固定的0~3V,与参考电压无关。

参考电压来源
  • 内部参考电压:由芯片内部的带隙基准电路产生,可以选择1.5V或2.5V。这个电压通过内部缓冲器连接到ADC的参考电压输入。

  • 外部参考电压:通过VREFH和VREFL引脚从外部提供。外部参考电压必须满足一定的条件,例如VREFH必须大于VREFL,且电压差在规定的范围内(具体见数据手册)。

  • ADC的输入电压范围由参考电压决定。对于MPC5554,ADC的模拟输入电压范围是VREFL到VREFH。也就是说,当使用内部参考电压时,输入电压范围是0V到内部参考电压(1.5V或2.5V)。当使用外部参考电压时,输入电压范围是外部VREFL到VREFH。

  • • 因此,MPC5554的ADC参考电压(无论是内部还是外部)确实决定了ADC的输入电压范围。这与DSP28335不同,DSP28335的输入电压范围是固定的0~3V,与参考电压无关

参考电压配置
  • • MPC5554的ADC参考电压配置通过ADC模块的配置寄存器完成。具体来说,需要配置ADC的CR0寄存器中的REF_SEL位和REF_VOLT位。

  • • 例如,选择内部参考电压2.5V:

    • • REF_SEL = 0 (内部参考)

    • • REF_VOLT = 1 (2.5V)

  • • 选择外部参考电压:

    • • REF_SEL = 1 (外部参考)
输入电压范围与参考电压的关系
对于单端输入
  • • V_in 的范围是 VREFL 到 VREFH。

  • • 当使用内部参考电压时,VREFL通常接地(0V),VREFH为内部参考电压(1.5V或2.5V)。

  • • 因此,输入电压范围是0V到1.5V或0V到2.5V。

对于差分输入
  • • 正输入和负输入之间的电压差 V_diff = V_in+ - V_in-。

  • • V_diff 的范围是 -(VREFH-VREFL)/2 到 +(VREFH-VREFL)/2。

  • • 例如,如果使用内部2.5V参考,则VREFH=2.5V,VREFL=0V,那么差分输入范围是-1.25V到+1.25V。

4. 内部基准电压是否可以直接给AD用?

内部参考电压通常可以直接作为ADC的参考电压使用,但需要注意以下几点:

  • 精度:内部参考电压的精度通常不如外部专用基准电压芯片。内部基准电压一般初始精度在±1%左右,且受温度影响较大。外部基准电压芯片的精度可以达到±0.1%甚至更高。

  • 稳定性:内部基准电压的温漂和长期稳定性可能较差,而外部基准电压芯片通常具有更好的温度系数和长期稳定性。

  • 噪声:内部基准电压可能受到芯片内部数字电路的噪声干扰,外部基准电压通常噪声较低。

  • 灵活性内部参考电压的电压值通常是固定的(如1.2V、2.5V等),而外部基准电压可以选择不同的电压值,以适应不同的输入范围

因此,内部参考电压可以直接用作ADC的参考电压,但一般用于对精度要求不高的场合。对于高精度测量,建议使用外部基准电压。

另外,内部参考电压也常用于校准。例如,在STM32中,内部参考电压(VREFINT)连接到ADC的一个通道,通过测量这个固定电压,可以推算出实际VDDA的电压,从而校准其他通道的测量值。这种方法可以提高ADC的测量精度,尤其是在VDDA波动或未知的情况下。

复制代码
开始
↓
测量精度要求?
├─ 要求<0.1% → 必须使用外部基准
├─ 要求0.1-1% → 评估温度和成本
│  ├─ 温度变化大 → 外部基准
│  └─ 温度稳定 → 可考虑内部基准
└─ 要求>1% → 优先使用内部基准
↓
电源稳定性?
├─ 电源噪声大/波动大 → 外部基准或加强滤波
└─ 电源稳定 → 内部基准可行
↓
成本与空间限制?
└─ 严格限制 → 内部基准
└─ 不严格 → 根据精度决定

5. 软硬件设计要点

5.1 去耦电容选择原则

  • 大容量电容:10-100µF,提供储能,应对低频波动

  • 小容量电容:0.1µF,滤除高频噪声,尽可能靠近MCU引脚

  • 材质选择:X7R或X5R陶瓷电容,避免使用Y5V

5.2 软件配置

cpp 复制代码
void ADC_Reference_Init_Sequence(ADC_RefConfig_t *cfg) 
{
    // 1. 上电延时,等待电源稳定
    delay_ms(10);
    
    // 2. 配置GPIO(如果需要)
    if(cfg->source == REF_EXTERNAL) 
    {
        configure_ref_pins_as_analog();
    }
    
    // 3. 使能基准电压电路
    enable_reference_circuit(cfg);
    
    // 4. 等待基准稳定(关键!)
    // 内部基准:50µs - 10ms(数据手册查具体值)
    // 外部基准:看基准芯片手册,通常1-10ms
    delay_ms(cfg->settling_time_ms);
    
    // 5. 执行校准(如果支持)
    if(cfg->auto_calibrate) 
    {
        adc_calibrate();
    }
    
    // 6. 验证基准电压(可选但推荐)
    if(validate_reference_voltage() == FAIL) 
    {
        handle_error();
    }
}

5.3 常见问题

问题现象 可能原因 解决方案
ADC读数不稳定 基准噪声大 增加去耦电容、远离噪声源
读数随温度漂移 基准温漂大 使用外部低温漂基准、软件温度补偿
读数整体偏差 基准电压不准 外部基准或软件校准
小信号分辨率差 基准电压过高 使用更低的基准电压(如2.5V代替3.3V)
基准无法启动 负载电容太大 减少电容值、增加串联电阻

5.4 检查清单

在ADC设计时,依次检查:

  1. 1.确定精度和温度要求

  2. 2.选择基准类型(内/外)

  3. 3.设计基准电路(含去耦)

  4. 4.配置MCU寄存器

  5. 5.添加足够稳定时间

  6. 6.实现校准机制

  7. 7.验证基准电压实际值

  8. 8.测试全温度范围性能

6. 总结与经验

  • "基准定精度,参考定范围":基准电压决定测量精度,参考电压决定输入范围

  • "内部方便外部准":内部基准使用方便,外部基准精度更高

  • "三要三不要"

    • • 要高精度→要外部基准

    • • 要低温漂→要外部基准

    • • 要低成本→要内部基准

    • • 不要忽略基准的稳定时间

    • • 不要忘记基准的去耦电容

    • • 不要混用数字地和模拟地

  • "STM32看VDDA,28335配电容,5xxx灵活选"

    • • STM32:关注VDDA质量,VREF+可外接。大多数系列的参考电压由VDDA或外部Vref+提供,内部VREFINT用于校准。少数系列(如STM32L0、F3)可以选择内部参考电压作为ADC参考电压。

    • • DSP28335:内部基准必须配外部电容。可以通过软件配置选择内部或外部参考电压。内部参考电压需要外部电容滤波。建议在高精度应用中使用外部基准。

    • • MPC5xxx:软件可选择内外基准,电压可调。可以配置内部参考电压(1.5V或2.5V)或外部参考电压。内部参考电压可以直接使用,但外部基准能提供更好的性能。

相关推荐
徽京人2 小时前
VS Code 接入Esp 32步骤
vscode·单片机·嵌入式硬件
QH139292318803 小时前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
笨笨饿4 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
捷瑞电子工坊4 小时前
FreeRTOS事件组:多任务同步的利器
stm32·嵌入式·freertos·实时操作系统·标准外设库·事件组·任务同步
千秋岁rr6 小时前
5.0 TIM
单片机·嵌入式硬件
小僧景贤6 小时前
STM32 startup.s 启动文件与 .map 映射文件深度技术解析(md/hd 版本差异化对比)
stm32·内存映射·startup.s·map 文件·单片机启动流程
zcmodeltech8 小时前
水利水电沙盘模型控制系统设计与实现:多场景多工况联动方案
网络·stm32·嵌入式硬件·制造·多分类
2601_966799048 小时前
CH398 技术解析:USB 3.0转千兆以太网单芯片方案与内置电源设计要点
单片机·嵌入式硬件
zlinear数据采集卡9 小时前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview