首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LH32M0G30X ADC API技术规范文档

LH32M0G30X ADC API技术规范文档

作者头像
云深无际
发布2026-01-07 12:55:49
发布2026-01-07 12:55:49
730
举报
文章被收录于专栏:云深之无迹云深之无迹

文档摘要

本文档详细描述了LH32M0G30X微控制器的24位Sigma-Delta ADC模块的完整API接口规范,包括数据结构定义、函数接口、参数配置和使用示例。该ADC模块支持双通道同步采样、可编程增益放大、多种参考电压选择和激励电流源配置。

核心特性

  1. 24位分辨率Sigma-Delta ADC
  2. 双ADC通道同步采样支持
  3. 可编程增益放大器(PGA): 1x~128x
  4. 多种参考电压: 1.25V~4.096V
  5. 激励电流源: 0~1000μA可配置
  6. 采样率: 2.5SPS~7813SPS可调
  7. VBIAS偏置电压输出
  8. 温度传感器集成

1. 术语与定义

术语

英文全称

中文定义

备注

ADC

Analog-to-Digital Converter

模数转换器

24位Sigma-Delta架构

PGA

Programmable Gain Amplifier

可编程增益放大器

1x~128x增益范围

SPS

Samples Per Second

每秒采样数

采样率单位

IEXC

Excitation Current

激励电流源

用于传感器激励

VBIAS

Bias Voltage

偏置电压

提供共模偏置

SIMU

Simultaneous

同步模式

双ADC同步采样

LSB

Least Significant Bit

最低有效位

分辨率单位


2. 系统架构

2.1 ADC子系统架构

代码语言:javascript
复制
                    ADC子系统架构
┌─────────────────────────────────────────────────────┐
│                   AFE模块 (模拟前端)                  │
├─────────────────┬───────────────────┬───────────────┤
│   参考电压源     │    激励电流源      │   VBIAS控制   │
│ ┌─────────────┐ │ ┌───────────────┐ │ ┌───────────┐ │
│ │VREF: 1.25V~ │ │ │IEXC0: 0~1000μA│ │ │AIN0~AIN11 │ │
│ │     4.096V  │ │ │IEXC1: 0~1000μA│ │ │偏置控制   │ │
│ └─────────────┘ │ └───────────────┘ │ └───────────┘ │
└─────────────────┴───────────────────┴───────────────┘
          │                    │                │
          ▼                    ▼                ▼
┌─────────────────────────────────────────────────────┐
│                 ADC双通道控制器                      │
├─────────────────────────┬───────────────────────────┤
│        ADC0             │           ADC1            │
│ ┌─────────────────────┐ │ ┌─────────────────────────┐ │
│ │• AIN0~AIN11输入     │ │ │• AIN0~AIN11输入         │ │
│ │• 24位分辨率         │ │ │• 内部信号监测           │ │
│ │• PGA: 1x~128x      │ │ │• 温度传感器             │ │
│ │• 2.5~7813SPS      │ │ │• 电源监测               │ │
│ │• 主控制器(同步模式) │ │ │• 从控制器(同步模式)     │ │
│ └─────────────────────┘ │ └─────────────────────────┘ │
└─────────────────────────┴───────────────────────────┘

3. 数据结构定义

3.1 ADC初始化结构体

代码语言:javascript
复制
typedef struct
{
    uint32_t ADC_Mode;          // ADC同步模式控制
    uint32_t ADC_ConvMode;      // 转换模式 (连续/单次)
    uint32_t ADC_TrigMode;      // 触发模式 (软件/硬件)
    uint8_t  ADC_INP;           // 正输入通道选择
    uint8_t  ADC_INM;           // 负输入通道选择  
    uint32_t ADC_CODE_MODE;     // 编码模式 (双极性/单极性)
    uint32_t REF_BUFP_MODE;     // 正参考缓冲器控制
    uint32_t REF_BUFN_MODE;     // 负参考缓冲器控制
    uint8_t  ADC_REF_SEL;       // 参考电压源选择
    uint8_t  ADC_PGA;           // PGA增益设置
    uint8_t  ADC_DR;            // 数据输出率设置
    uint8_t  ADC_RDY_INT;       // 数据就绪中断控制
    uint16_t ADC_RDY_CNT;       // 中断计数器
} ADC_InitTypeDef;

3.2 参数详细说明

ADC_Mode (ADC同步模式)

宏定义

数值

功能描述

ADC_SIMU_ENABLE

0x00000400U

使能同步模式(主控制器)

ADC_SIMU_DISABLE

0x00000000U

禁用同步模式(从控制器)

ADC_ConvMode (转换模式)

宏定义

数值

功能描述

ADC_CONT_CONVERT

0x00000004U

连续转换模式

ADC_SINGLE_CONVERT

0x00000008U

单次转换模式

ADC_TrigMode (触发模式)

宏定义

数值

功能描述

ADC_SOFT_TRIG

0x00000000U

软件触发

ADC_HARD_TRIG

0x00000800U

硬件触发


4. 通道配置枚举

4.1 ADC0通道配置

代码语言:javascript
复制
// ADC0正输入通道
typedefenum {
    ADC0_PCHAN_AIN0 = 0,    // 外部输入AIN0
    ADC0_PCHAN_AIN1,        // 外部输入AIN1
    ADC0_PCHAN_AIN2,        // 外部输入AIN2
    ADC0_PCHAN_AIN3,        // 外部输入AIN3
    ADC0_PCHAN_AIN4,        // 外部输入AIN4
    ADC0_PCHAN_AIN5,        // 外部输入AIN5
    ADC0_PCHAN_AIN6,        // 外部输入AIN6
    ADC0_PCHAN_AIN7,        // 外部输入AIN7
    ADC0_PCHAN_AIN8,        // 外部输入AIN8
    ADC0_PCHAN_AIN9,        // 外部输入AIN9
    ADC0_PCHAN_AIN10,       // 外部输入AIN10
    ADC0_PCHAN_AIN11,       // 外部输入AIN11
    ADC0_PCHAN_AVSS = 0x10, // 模拟地
    ADC0_PCHAN_REFP = 0x11, // 参考电压正极
    ADC0_PCHAN_CALIBP = 0x12// 校准正极
} ADC0_POS_CHAN_t;

// ADC0负输入通道
typedefenum {
    ADC0_NCHAN_AIN0 = 0,    // 外部输入AIN0
    ADC0_NCHAN_AIN1,        // 外部输入AIN1
    ADC0_NCHAN_AIN2,        // 外部输入AIN2
    ADC0_NCHAN_AIN3,        // 外部输入AIN3
    ADC0_NCHAN_AIN4,        // 外部输入AIN4
    ADC0_NCHAN_AIN5,        // 外部输入AIN5
    ADC0_NCHAN_AIN6,        // 外部输入AIN6
    ADC0_NCHAN_AIN7,        // 外部输入AIN7
    ADC0_NCHAN_AIN8,        // 外部输入AIN8
    ADC0_NCHAN_AIN9,        // 外部输入AIN9
    ADC0_NCHAN_AIN10,       // 外部输入AIN10
    ADC0_NCHAN_AIN11,       // 外部输入AIN11
    ADC0_NCHAN_AVSS = 0x10, // 模拟地
    ADC0_NCHAN_REFP = 0x11, // 参考电压正极
    ADC0_NCHAN_CALIBN = 0x12// 校准负极
} ADC0_NEG_CHAN_t;

4.2 ADC1通道配置

代码语言:javascript
复制
// ADC1正输入通道
typedefenum {
    ADC1_PCHAN_AIN0 = 0,     // 外部输入AIN0
    ADC1_PCHAN_AIN1,         // 外部输入AIN1
    ADC1_PCHAN_AIN2,         // 外部输入AIN2
    ADC1_PCHAN_AIN3,         // 外部输入AIN3
    ADC1_PCHAN_AIN4,         // 外部输入AIN4
    ADC1_PCHAN_AIN5,         // 外部输入AIN5
    ADC1_PCHAN_AIN6,         // 外部输入AIN6
    ADC1_PCHAN_AIN7,         // 外部输入AIN7
    ADC1_PCHAN_AIN8,         // 外部输入AIN8
    ADC1_PCHAN_AIN9,         // 外部输入AIN9
    ADC1_PCHAN_AIN10,        // 外部输入AIN10
    ADC1_PCHAN_AIN11,        // 外部输入AIN11
    ADC1_PCHAN_TEMPP = 0x10, // 温度传感器正极
    ADC1_PCHAN_AVSS,         // 模拟地
    ADC1_PCHAN_REFP,         // 参考电压正极
    ADC1_PCHAN_DACP,         // DAC输出正极
    ADC1_PCHAN_LOOPP,        // 环路测试正极
    ADC1_PCHAN_AVDDP,        // 模拟电源正极
    ADC1_PCHAN_IOVDDP,       // IO电源正极
    ADC1_PCHAN_CALIBP,       // 校准正极
} ADC1_POS_CHAN_t;

// ADC1负输入通道
typedefenum {
    ADC1_NCHAN_AIN0 = 0,     // 外部输入AIN0
    ADC1_NCHAN_AIN1,         // 外部输入AIN1
    ADC1_NCHAN_AIN2,         // 外部输入AIN2
    ADC1_NCHAN_AIN3,         // 外部输入AIN3
    ADC1_NCHAN_AIN4,         // 外部输入AIN4
    ADC1_NCHAN_AIN5,         // 外部输入AIN5
    ADC1_NCHAN_AIN6,         // 外部输入AIN6
    ADC1_NCHAN_AIN7,         // 外部输入AIN7
    ADC1_NCHAN_AIN8,         // 外部输入AIN8
    ADC1_NCHAN_AIN9,         // 外部输入AIN9
    ADC1_NCHAN_AIN10,        // 外部输入AIN10
    ADC1_NCHAN_AIN11,        // 外部输入AIN11
    ADC1_NCHAN_TEMPN = 0x10, // 温度传感器负极
    ADC1_NCHAN_AVSS,         // 模拟地
    ADC1_NCHAN_REFP,         // 参考电压正极
    ADC1_NCHAN_DACN,         // DAC输出负极
    ADC1_NCHAN_LOOPN,        // 环路测试负极
    ADC1_NCHAN_AVDDN,        // 模拟电源负极
    ADC1_NCHAN_IOVDDN,       // IO电源负极
    ADC1_NCHAN_CALIBN,       // 校准负极
} ADC1_NEG_CHAN_t;

5. 采样率与增益配置

5.1 ADC数据输出率

代码语言:javascript
复制
typedef enum {
    ADC_DR_7813SPS = 0u,    // 7813样本/秒
    ADC_DR_3906SPS,         // 3906样本/秒
    ADC_DR_1953SPS,         // 1953样本/秒
    ADC_DR_977SPS,          // 977样本/秒
    ADC_DR_488SPS,          // 488样本/秒
    ADC_DR_244SPS,          // 244样本/秒
    ADC_DR_122SPS,          // 122样本/秒
    ADC_DR_61SPS,           // 61样本/秒
    ADC_DR_60SPS,           // 60样本/秒
    ADC_DR_30SPS,           // 30样本/秒
    ADC_DR_15SPS,           // 15样本/秒
    ADC_DR_50SPS = 16,      // 50样本/秒
    ADC_DR_25SPS = 17,      // 25样本/秒
    ADC_DR_12P5SPS = 18,    // 12.5样本/秒
    ADC_DR_10SPS = 24,      // 10样本/秒
    ADC_DR_5SPS = 25,       // 5样本/秒
    ADC_DR_2P5SPS = 26,     // 2.5样本/秒
} ADC_DR_t;

5.2 PGA增益配置

代码语言:javascript
复制
typedef enum {
    PGA_GAIN_1 = 0,    // 1倍增益
    PGA_GAIN_2,        // 2倍增益
    PGA_GAIN_4,        // 4倍增益
    PGA_GAIN_8,        // 8倍增益
    PGA_GAIN_16,       // 16倍增益
    PGA_GAIN_32,       // 32倍增益
    PGA_GAIN_64,       // 64倍增益
    PGA_GAIN_128,      // 128倍增益
} PGA_GAIN_t;

5.3 参考电压选择

代码语言:javascript
复制
typedef enum {
    VREF_VREFP_VREFN = 0,   // 外部参考VREFP-VREFN
    VREF_AIN7_AIN8,         // AIN7-AIN8作为参考
    VREF_REFP_AVSS,         // 内部参考-AVSS
    VREF_VDRIVE_AVSS        // VDRIVE-AVSS
} ADC_REF_SEL;

6. 激励电流源配置

6.1 IEXC电流范围

代码语言:javascript
复制
// IEXC0电流范围
typedefenum {
    IEXC0_0UA = 0,     // 0μA (禁用)
    IEXC0_50UA,        // 50μA
    IEXC0_100UA,       // 100μA
    IEXC0_150UA,       // 150μA
    IEXC0_200UA,       // 200μA
    IEXC0_250UA,       // 250μA
    IEXC0_300UA,       // 300μA
    IEXC0_350UA,       // 350μA
    IEXC0_400UA,       // 400μA
    IEXC0_450UA,       // 450μA
    IEXC0_500UA,       // 500μA
    IEXC0_600UA,       // 600μA
    IEXC0_700UA,       // 700μA
    IEXC0_800UA,       // 800μA
    IEXC0_900UA,       // 900μA
    IEXC0_1000UA,      // 1000μA
} IEXC0_RANGE_t;

// IEXC1电流范围 (同IEXC0)
typedefenum {
    IEXC1_0UA = 0,     // 0μA (禁用)
    IEXC1_50UA,        // 50μA
    // ... (其他值同IEXC0)
    IEXC1_1000UA,      // 1000μA
} IEXC1_RANGE_t;

6.2 IEXC输出通道

代码语言:javascript
复制
// IEXC0输出通道
typedefenum {
    IEXC0_CHAN_AIN2 = 2,   // 输出到AIN2
    IEXC0_CHAN_AIN3 = 3,   // 输出到AIN3
    IEXC0_CHAN_AIN4 = 4,   // 输出到AIN4
    IEXC0_CHAN_AIN5 = 5,   // 输出到AIN5
    IEXC0_CHAN_AIN7 = 7,   // 输出到AIN7
    IEXC0_CHAN_AIN8 = 8,   // 输出到AIN8
    IEXC0_CHAN_AIN10 = 10, // 输出到AIN10
    IEXC0_CHAN_AIN11 = 11, // 输出到AIN11
} IEXC0_CHAN_t;

// IEXC1输出通道 (同IEXC0)
typedefenum {
    IEXC1_CHAN_AIN2 = 2,   // 输出到AIN2
    IEXC1_CHAN_AIN3 = 3,   // 输出到AIN3
    // ... (其他值同IEXC0)
    IEXC1_CHAN_AIN11 = 11, // 输出到AIN11
} IEXC1_CHAN_t;

7. 参考电压与偏置配置

7.1 参考电压控制

代码语言:javascript
复制
// VREFP控制
#define VREFP_ENABLE   (0x00000008U)  // 使能内部参考
#define VREFP_DISABLE  (0x00000000U)  // 禁用内部参考
#define VREFP_2V5      (0x00000000U)  // 2.5V参考
#define VREFP_2V048    (0x00000001U)  // 2.048V参考
#define VREFP_1V25     (0x00000002U)  // 1.25V参考
#define VREFP_4V096    (0x00000003U)  // 4.096V参考

// VDRIVE控制
#define VDRIVE_ENABLE  (0x00000040U)  // 使能驱动电压
#define VDRIVE_DISABLE (0x00000000U)  // 禁用驱动电压
#define VDRIVE_2V5     (0x00000000U)  // 2.5V驱动
#define VDRIVE_2V048   (0x00000010U)  // 2.048V驱动
#define VDRIVE_1V25    (0x00000020U)  // 1.25V驱动
#define VDRIVE_4V096   (0x00000030U)  // 4.096V驱动

// 温度传感器控制
#define TEMP_SENSER_EN  (0x00000080U) // 使能温度传感器
#define TEMP_SENSER_DIS (0x00000000U) // 禁用温度传感器

7.2 VBIAS偏置控制

代码语言:javascript
复制
#define VBIAS_ENABLE_AIN0   (0x00000001U) // AIN0偏置使能
#define VBIAS_ENABLE_AIN1   (0x00000002U) // AIN1偏置使能
#define VBIAS_ENABLE_AIN2   (0x00000004U) // AIN2偏置使能
#define VBIAS_ENABLE_AIN3   (0x00000008U) // AIN3偏置使能
#define VBIAS_ENABLE_AIN4   (0x00000010U) // AIN4偏置使能
#define VBIAS_ENABLE_AIN5   (0x00000020U) // AIN5偏置使能
#define VBIAS_ENABLE_AIN6   (0x00000040U) // AIN6偏置使能
#define VBIAS_ENABLE_AIN7   (0x00000080U) // AIN7偏置使能
#define VBIAS_ENABLE_AIN8   (0x00000100U) // AIN8偏置使能
#define VBIAS_ENABLE_AIN9   (0x00000200U) // AIN9偏置使能
#define VBIAS_ENABLE_AIN10  (0x00000400U) // AIN10偏置使能
#define VBIAS_ENABLE_AIN11  (0x00000800U) // AIN11偏置使能

8. 核心API函数

8.1 ADC初始化与控制

代码语言:javascript
复制
/**
 * @brief  ADC初始化函数
 * @param  ADCx_InitStruct: ADC初始化结构体指针
 * @param  ADC_select: ADC选择 (0=ADC0, 1=ADC1)
 * @retval 无
 */
void ADCx_init(ADC_InitTypeDef *ADCx_InitStruct, uint8_t ADC_select);

/**
 * @brief  启动ADC0转换
 * @param  无
 * @retval 无
 */
void ADC0_convert_start(void);

/**
 * @brief  启动ADC1转换
 * @param  无
 * @retval 无
 */
void ADC1_convert_start(void);

8.2 AFE模拟前端控制

代码语言:javascript
复制
/**
 * @brief  配置激励电流源范围
 * @param  IEXC1_range: IEXC1电流范围
 * @param  IEXC0_range: IEXC0电流范围
 * @retval 无
 */
void AFE_IEXC_RANGE(uint8_t IEXC1_range, uint8_t IEXC0_range);

/**
 * @brief  配置激励电流源控制
 * @param  IEXC1_select: IEXC1使能控制
 * @param  IEXC0_select: IEXC0使能控制
 * @param  IEXC1_CHAN: IEXC1输出通道
 * @param  IEXC0_CHAN: IEXC0输出通道
 * @retval 无
 */
void AFE_IEXC_CTRL(uint32_t IEXC1_select, uint32_t IEXC0_select, 
                   uint8_t IEXC1_CHAN, uint8_t IEXC0_CHAN);

/**
 * @brief  配置参考电压控制
 * @param  VREFP_state: VREFP使能状态
 * @param  VREFP_VALUE: VREFP电压值
 * @param  VDRIVE_state: VDRIVE使能状态
 * @param  VDRIVE_VALUE: VDRIVE电压值
 * @param  TEMP_SENSER_state: 温度传感器使能状态
 * @retval 无
 */
void AFE_REF_CTRL(uint32_t VREFP_state, uint32_t VREFP_VALUE,
                  uint32_t VDRIVE_state, uint32_t VDRIVE_VALUE,
                  uint32_t TEMP_SENSER_state);

/**
 * @brief  配置VBIAS偏置通道
 * @param  vbias_ch: VBIAS通道使能位掩码
 * @retval 无
 */
void VABIS_channel_select(uint32_t vbias_ch);

9. API使用示例

9.1 基本ADC初始化示例

代码语言:javascript
复制
void ADC_Basic_Init_Example(void)
{
    ADC_InitTypeDef ADC_InitStruct;
    
    // 使能ADC时钟
    RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC0EN_Msk, ENABLE);
    
    // 配置ADC参数
    ADC_InitStruct.ADC_Mode = ADC_SIMU_DISABLE;      // 独立模式
    ADC_InitStruct.ADC_ConvMode = ADC_CONT_CONVERT;  // 连续转换
    ADC_InitStruct.ADC_TrigMode = ADC_SOFT_TRIG;     // 软件触发
    ADC_InitStruct.ADC_INP = ADC0_PCHAN_AIN0;        // 正输入AIN0
    ADC_InitStruct.ADC_INM = ADC0_NCHAN_AIN1;        // 负输入AIN1
    ADC_InitStruct.ADC_CODE_MODE = ADC_CODE_BIPOLAR; // 双极性编码
    ADC_InitStruct.REF_BUFP_MODE = REF_BUFP_ENABLE;  // 使能正参考缓冲
    ADC_InitStruct.REF_BUFN_MODE = REF_BUFN_ENABLE;  // 使能负参考缓冲
    ADC_InitStruct.ADC_REF_SEL = VREF_REFP_AVSS;     // 参考电压选择
    ADC_InitStruct.ADC_PGA = PGA_GAIN_1;             // 1倍增益
    ADC_InitStruct.ADC_DR = ADC_DR_25SPS;            // 25样本/秒
    ADC_InitStruct.ADC_RDY_INT = ADC_RDY_INT_EN;     // 使能中断
    ADC_InitStruct.ADC_RDY_CNT = 1;                  // 中断计数
    
    // 初始化ADC0
    ADCx_init(&ADC_InitStruct, 0);
    
    // 启动转换
    ADC0_convert_start();
}

9.2 双ADC同步采样示例

代码语言:javascript
复制
void ADC_Dual_Sync_Init_Example(void)
{
    ADC_InitTypeDef ADC_InitStruct;
    
    // 使能时钟
    RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC0EN_Msk, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN_Msk, ENABLE);
    
    // 配置ADC0 (主控制器)
    ADC_InitStruct.ADC_Mode = ADC_SIMU_ENABLE;       // 同步模式主控
    ADC_InitStruct.ADC_ConvMode = ADC_CONT_CONVERT;
    ADC_InitStruct.ADC_TrigMode = ADC_SOFT_TRIG;
    ADC_InitStruct.ADC_INP = ADC0_PCHAN_AIN0;        // 外部信号
    ADC_InitStruct.ADC_INM = ADC0_NCHAN_AIN1;
    ADC_InitStruct.ADC_CODE_MODE = ADC_CODE_BIPOLAR;
    ADC_InitStruct.REF_BUFP_MODE = REF_BUFP_ENABLE;
    ADC_InitStruct.REF_BUFN_MODE = REF_BUFN_ENABLE;
    ADC_InitStruct.ADC_REF_SEL = VREF_REFP_AVSS;
    ADC_InitStruct.ADC_PGA = PGA_GAIN_1;
    ADC_InitStruct.ADC_DR = ADC_DR_2P5SPS;           // 2.5样本/秒
    ADC_InitStruct.ADC_RDY_INT = ADC_RDY_INT_EN;
    ADC_InitStruct.ADC_RDY_CNT = 1;
    
    ADCx_init(&ADC_InitStruct, 0);  // 初始化ADC0
    
    // 配置ADC1 (从控制器)
    ADC_InitStruct.ADC_Mode = ADC_SIMU_DISABLE;      // 同步模式从控
    ADC_InitStruct.ADC_INP = ADC1_PCHAN_AVDDP;       // 内部电源监测
    ADC_InitStruct.ADC_INM = ADC1_NCHAN_AVDDN;
    
    ADCx_init(&ADC_InitStruct, 1);  // 初始化ADC1
    
    // 使能中断
    NVIC_EnableIRQ(ADC0_IRQn);
    
    // 启动同步转换
    ADC0_convert_start();  // ADC0启动,ADC1自动同步
}

9.3 激励电流源配置示例

代码语言:javascript
复制
void IEXC_Config_Example(void)
{
    // 配置激励电流范围
    AFE_IEXC_RANGE(IEXC1_150UA, IEXC0_1000UA);
    
    // 配置激励电流控制
    AFE_IEXC_CTRL(IEXC1_EN,           // 使能IEXC1
                  IEXC0_EN,           // 使能IEXC0
                  IEXC1_CHAN_AIN2,    // IEXC1输出到AIN2
                  IEXC0_CHAN_AIN3);   // IEXC0输出到AIN3
}

9.4 参考电压配置示例

代码语言:javascript
复制
void VREF_Config_Example(void)
{
    // 配置参考电压系统
    AFE_REF_CTRL(VREFP_ENABLE,        // 使能内部参考
                 VREFP_4V096,         // 4.096V参考
                 VDRIVE_ENABLE,       // 使能驱动电压
                 VDRIVE_2V5,          // 2.5V驱动
                 TEMP_SENSER_EN);     // 使能温度传感器
}

9.5 VBIAS偏置配置示例

代码语言:javascript
复制
void VBIAS_Config_Example(void)
{
    // 使能AIN0的VBIAS偏置
    VABIS_channel_select(VBIAS_ENABLE_AIN0);
    
    // 或者使能多个通道的VBIAS
    VABIS_channel_select(VBIAS_ENABLE_AIN0 | 
                        VBIAS_ENABLE_AIN1 |
                        VBIAS_ENABLE_AIN2);
}

10. 寄存器映射详解

10.1 关键寄存器功能

寄存器名称

偏移地址

功能描述

ADC_CONTROL_0

0x00

ADC0控制寄存器

ADC_CONTROL_1

0x04

ADC1控制寄存器

CHANNEL_CFG_0

0x08

ADC0通道配置

CHANNEL_CFG_1

0x0C

ADC1通道配置

CONFIGURATION_0

0x10

ADC0配置寄存器

CONFIGURATION_1

0x14

ADC1配置寄存器

FILTER_0

0x18

ADC0滤波器配置

FILTER_1

0x1C

ADC1滤波器配置

ADC_DATA_0

0x20

ADC0数据寄存器

ADC_DATA_1

0x24

ADC1数据寄存器

ADC_STATUS_0

0x28

ADC0状态寄存器

ADC_STATUS_1

0x2C

ADC1状态寄存器

INTERRUPT_CONTROL_0

0x30

ADC0中断控制

INTERRUPT_CONTROL_1

0x34

ADC1中断控制

10.2 AFE寄存器映射

寄存器名称

偏移地址

功能描述

IEXC_RANGE

0x00

激励电流范围配置

IEXC_CTRL

0x04

激励电流控制

REF_CTRL

0x08

参考电压控制


11. 数据处理算法

11.1 24位数据读取算法

代码语言:javascript
复制
/**
 * @brief  读取并处理24位ADC数据
 * @param  reg_data: 从ADC_DATA寄存器读取的原始数据
 * @retval int32_t: 处理后的32位有符号数据
 */
int32_t Process_ADC_24bit_Data(uint32_t reg_data)
{
    uint8_t adc_code[3];
    int32_t adc_hex;
    
    // 步骤1: 数据字节分离
    adc_code[2] = (reg_data >> 16) & 0xFF;  // 高字节 [23:16]
    adc_code[1] = (reg_data >> 8) & 0xFF;   // 中字节 [15:8]
    adc_code[0] = (reg_data) & 0xFF;        // 低字节 [7:0]
    
    // 步骤2: 24位数据重组与符号扩展
    adc_hex = (int32_t)(
        ((((adc_code[2] & 0x80) ? (0xFF) : (0x00)) ) << 24) |  // 符号扩展
        ((adc_code[2] & 0xFF) << 16) |                          // 高字节
        ((adc_code[1] & 0xFF) << 8) |                           // 中字节
        ((adc_code[0] & 0xFF) << 0)                             // 低字节
    );
    
    return adc_hex;
}

11.2 电压转换算法

代码语言:javascript
复制
/**
 * @brief  将ADC数据转换为电压值(双极性模式)
 * @param  data: 24位有符号ADC数据
 * @param  vref_mv: 参考电压(mV)
 * @retval float: 电压值(mV)
 */
float ADC_Data_To_Voltage_Bipolar(int32_t data, float vref_mv)
{
    float voltage_mv;
    
    // 双极性转换公式: V = data × 2.0 × Vref / (2^24)
    voltage_mv = (float)data * 2.0f * vref_mv / 16777216.0f;
    
    return voltage_mv;
}

/**
 * @brief  将ADC数据转换为电压值(单极性模式)
 * @param  data: 24位无符号ADC数据
 * @param  vref_mv: 参考电压(mV)
 * @retval float: 电压值(mV)
 */
float ADC_Data_To_Voltage_Unipolar(uint32_t data, float vref_mv)
{
    float voltage_mv;
    
    // 单极性转换公式: V = data × Vref / (2^24)
    voltage_mv = (float)data * vref_mv / 16777216.0f;
    
    return voltage_mv;
}

12. 性能参数与特性

12.1 ADC性能规格

参数

规格

单位

备注

分辨率

24

有效位数可能略低

采样率范围

2.5~7813

SPS

可编程配置

输入电压范围

±VREF

V

取决于参考电压

参考电压

1.25~4.096

V

内部/外部可选

PGA增益

1~128

8档可选

输入阻抗

>10

高阻抗输入

噪声性能

<1

LSB

典型值

12.2 激励电流源规格

参数

规格

单位

备注

电流范围

0~1000

μA

16档可调

电流精度

±1

%

典型值

输出通道

8

AIN2~AIN11可选

温度系数

<50

ppm/°C

典型值

12.3 参考电压规格

这里可以不对(按照数据手册为准!)

电压值

精度

温漂

应用场景

1.25V

±0.1%

10ppm/°C

低功耗应用

2.048V

±0.05%

5ppm/°C

标准应用

2.5V

±0.1%

10ppm/°C

通用应用

4.096V

±0.05%

5ppm/°C

高精度应用


13. 应用场景

13.1 典型应用场景

场景1: 高精度传感器测量
代码语言:javascript
复制
void High_Precision_Sensor_Config(void)
{
    ADC_InitTypeDef ADC_Config;
    
    // 配置参数
    ADC_Config.ADC_Mode = ADC_SIMU_DISABLE;
    ADC_Config.ADC_ConvMode = ADC_CONT_CONVERT;
    ADC_Config.ADC_INP = ADC0_PCHAN_AIN0;
    ADC_Config.ADC_INM = ADC0_NCHAN_AIN1;
    ADC_Config.ADC_CODE_MODE = ADC_CODE_BIPOLAR;
    ADC_Config.ADC_REF_SEL = VREF_REFP_AVSS;
    ADC_Config.ADC_PGA = PGA_GAIN_1;
    ADC_Config.ADC_DR = ADC_DR_10SPS;  // 较低采样率提高精度
    
    // 配置4.096V高精度参考
    AFE_REF_CTRL(VREFP_ENABLE, VREFP_4V096, 
                 VDRIVE_DISABLE, VDRIVE_2V5, 
                 TEMP_SENSER_EN);
}
场景2: RTD温度测量
代码语言:javascript
复制
void RTD_Temperature_Config(void)
{
    ADC_InitTypeDef ADC_Config;
    
    // ADC配置
    ADC_Config.ADC_Mode = ADC_SIMU_DISABLE;
    ADC_Config.ADC_ConvMode = ADC_CONT_CONVERT;
    ADC_Config.ADC_INP = ADC0_PCHAN_AIN0;    // RTD+
    ADC_Config.ADC_INM = ADC0_NCHAN_AIN1;    // RTD-
    ADC_Config.ADC_CODE_MODE = ADC_CODE_BIPOLAR;
    ADC_Config.ADC_PGA = PGA_GAIN_32;        // 高增益放大小信号
    ADC_Config.ADC_DR = ADC_DR_5SPS;
    
    // 配置激励电流源(1mA激励RTD)
    AFE_IEXC_RANGE(IEXC1_0UA, IEXC0_1000UA);
    AFE_IEXC_CTRL(0, IEXC0_EN, 0, IEXC0_CHAN_AIN3);
}
场景3: 双通道同步数据采集
代码语言:javascript
复制
void Dual_Channel_Sync_Config(void)
{
    ADC_InitTypeDef ADC_Config;
    
    // 通道1配置(主)
    ADC_Config.ADC_Mode = ADC_SIMU_ENABLE;
    ADC_Config.ADC_ConvMode = ADC_CONT_CONVERT;
    ADC_Config.ADC_INP = ADC0_PCHAN_AIN0;
    ADC_Config.ADC_INM = ADC0_NCHAN_AIN1;
    ADC_Config.ADC_DR = ADC_DR_25SPS;
    ADCx_init(&ADC_Config, 0);
    
    // 通道2配置(从)
    ADC_Config.ADC_Mode = ADC_SIMU_DISABLE;
    ADC_Config.ADC_INP = ADC1_PCHAN_AIN2;
    ADC_Config.ADC_INM = ADC1_NCHAN_AIN3;
    ADCx_init(&ADC_Config, 1);
    
    // 启动同步采样
    ADC0_convert_start();
}

13.2 配置建议总结

应用类型

推荐配置

原因

高精度DC测量

4.096V参考 + 低采样率

最大动态范围和精度

传感器信号

PGA增益 + 双极性

放大小信号

快速采样

高采样率 + 单极性

提高转换速度

RTD测量

激励电流 + 高增益

标准测量方法

电源监测

内部通道 + 连续模式

实时监测


14. 故障诊断与调试

14.1 常见问题诊断

问题现象

可能原因

解决方法

无数据输出

时钟未使能

检查RCC配置

数据异常

参考电压不稳定

检查VREF配置和电源

同步失效

模式配置错误

确认SIMU_ENABLE设置

精度不足

增益设置不当

调整PGA增益

噪声过大

参考缓冲未使能

使能REF_BUF

14.2 调试技巧

代码语言:javascript
复制
void ADC_Debug_Register_Dump(void)
{
    printf("ADC_CONTROL_0: 0x%08X\n", pADC_SUBSYS_USER->ADC_CONTROL_0);
    printf("ADC_CONTROL_1: 0x%08X\n", pADC_SUBSYS_USER->ADC_CONTROL_1);
    printf("CONFIGURATION_0: 0x%08X\n", pADC_SUBSYS_USER->CONFIGURATION_0);
    printf("CONFIGURATION_1: 0x%08X\n", pADC_SUBSYS_USER->CONFIGURATION_1);
    printf("ADC_STATUS_0: 0x%08X\n", pADC_SUBSYS_USER->ADC_STATUS_0);
    printf("ADC_STATUS_1: 0x%08X\n", pADC_SUBSYS_USER->ADC_STATUS_1);
}

A. 快速参考卡

代码语言:javascript
复制
// 最小化配置示例
ADC_InitTypeDef adc;
adc.ADC_Mode = ADC_SIMU_DISABLE;
adc.ADC_ConvMode = ADC_CONT_CONVERT;
adc.ADC_INP = ADC0_PCHAN_AIN0;
adc.ADC_INM = ADC0_NCHAN_AIN1;
ADCx_init(&adc, 0);
ADC0_convert_start();

本文档版权归苏州领慧立芯科技有限公司所有,未经授权不得转载或用于商业用途。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文档摘要
    • 核心特性
    • 1. 术语与定义
    • 2. 系统架构
      • 2.1 ADC子系统架构
    • 3. 数据结构定义
      • 3.1 ADC初始化结构体
      • 3.2 参数详细说明
    • 4. 通道配置枚举
      • 4.1 ADC0通道配置
      • 4.2 ADC1通道配置
    • 5. 采样率与增益配置
      • 5.1 ADC数据输出率
      • 5.2 PGA增益配置
      • 5.3 参考电压选择
    • 6. 激励电流源配置
      • 6.1 IEXC电流范围
      • 6.2 IEXC输出通道
    • 7. 参考电压与偏置配置
      • 7.1 参考电压控制
      • 7.2 VBIAS偏置控制
    • 8. 核心API函数
      • 8.1 ADC初始化与控制
      • 8.2 AFE模拟前端控制
    • 9. API使用示例
      • 9.1 基本ADC初始化示例
      • 9.2 双ADC同步采样示例
      • 9.3 激励电流源配置示例
      • 9.4 参考电压配置示例
      • 9.5 VBIAS偏置配置示例
    • 10. 寄存器映射详解
      • 10.1 关键寄存器功能
      • 10.2 AFE寄存器映射
    • 11. 数据处理算法
      • 11.1 24位数据读取算法
      • 11.2 电压转换算法
    • 12. 性能参数与特性
      • 12.1 ADC性能规格
      • 12.2 激励电流源规格
      • 12.3 参考电压规格
      • 这里可以不对(按照数据手册为准!)
    • 13. 应用场景
      • 13.1 典型应用场景
      • 13.2 配置建议总结
    • 14. 故障诊断与调试
      • 14.1 常见问题诊断
      • 14.2 调试技巧
    • A. 快速参考卡
      • 本文档版权归苏州领慧立芯科技有限公司所有,未经授权不得转载或用于商业用途。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档