英飞凌TC23x–MCAL配置之 ADC
1 ADC基础知识
1.1 介绍:
AUTOSAR(Automotive Open System Architecture)中的ADC(Analog-to-Digital Converter)模块用于从外部传感器或设备获取模拟信号,并将其转换为MCU能够处理的数字信号。
1.2 ADC原理:
-
基本原理:ADC模块通过采样输入的模拟信号,将其转换为相应的数字值。转换精度通常以位数(如10位、12位)表示,位数越高,转换的精度越高。
-
采样率:ADC的采样率决定了每秒可以采样多少个信号点。采样率越高,信号捕获的精度越高。
-
转换过程:通常分为三个步骤:采样、量化和编码。首先采样输入的模拟电压,然后将其量化为离散的数字值,最后编码成二进制格式供MCU使用。
1.3 功能:
- 多通道支持:MCAL ADC模块通常支持多通道输入,可以同时采集多个模拟信号。
- 分辨率配置:ADC的分辨率通常可以配置,根据应用需求选择不同的分辨率。
- 触发机制:可以通过定时器或外部事件触发ADC采样,支持自动或手动触发模式。
- 数据缓冲:采集到的数据可以存储在缓冲区中,等待MCU读取处理。
1.4 依赖模块:
- MCU模块
- PORT模块
- Irq模块
1.5 重要API:
- **AdcEnableStartStopGroupApi **
- **AdcHwTriggerApi **
1.6 应用场景:
传感器数据采集:用于读取各种模拟传感器(如温度传感器、光传感器、压力传感器等)的信号。
电池电压监测:通过ADC模块监测电池电压,确保设备的供电稳定。
信号处理:在音频处理、无线电信号接收等场景中,ADC模块用于将模拟信号转换为可处理的数字信号。
闭环控制系统:在电机控制等应用中,ADC模块用于反馈采集,实现闭环控制。
2 ADC解析
2.1 ADC Group/Channel/Hardware关系
- 每个Group下面可以挂一个或多个Channel,但至少有一个Channel。
- 一个Group如果挂了多个Channel,则这些Channel必须属于同一硬件单元。不能跨多个物理单元。
- 一个Channel可以同时属于多个Group,如上CH0,CH1。但这种情况需要用户自己合理管控转换顺序。否则可能会出现冲突。
2.2 转换模式和触发方式
2.2.1 转换模式
- One-shot :触发一次即停止,将结果直接写入缓冲区。
- Continuous:持续触发,一直循环,直到调用停止采样函数(Adc_StopGroupConversion)。
2.2.2 触发方式
触发方式 | 启动/使能API | 停止/关闭API |
---|---|---|
软件触发 | Adc_StartGroupConversion | Adc_StopGroupConversion |
硬件触发 | Adc_EnableHardwareTrigger | Adc_DisableHardwareTrigger |
- One-shot 模式既支持软件触发,也支持硬件触发。
- Continuous 模式仅支持软件触发,不支持硬件触发。
2.3 Buffer访问模式
2.3.1 Single模式
- 采样数只能为1,不同的转换模式(One-shot模式和Continuous模式)下无区别。
2.3.2 Streaming模式
- Linear(线性模式)下,如果采样数配置为1,那么效果和Single模式是一样的,转换一次就停止。如果采样数大于1,则转换次数等于采样数,当设置的采样数的次数完成后自动停止。
- Circular(循环模式)下,会持续采样,知道主动调用停止函数。
2.4 可能的组合方式
2.5 ADC硬件资源分布
- 查看硬件手册(Aurix_MC-ISAR_UM_ADCDriver.pdf)
3 框图
4 ADC模块的配置
4.1 Adc\ AdcConfigSet\ General
**AdcAnalogClockDivider **
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GlobalCfgType | 设置模拟时钟分频器 |
- 该值决定了ADC模块的模拟部分的时钟频率,选择范围在0到31之间。选择时需要考虑ADC的采样率要求和系统时钟频率。
**AdcDigitalArbiterClockDivider **
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GlobalCfgType | 设置数字仲裁器的时钟分频器 |
- 该项控制ADC的数字部分时钟的分频比,选择范围为0到3。此配置影响到数字处理的速度,与ADC的转换时间和整体性能有关。
AdcLowPowerSupplyVoltage
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GlobalCfgType | 配置ADC模块的低功耗模式下的电源电压 |
- 设置影响ADC在低功耗模式下的工作电压。
AdcRefPrechargeControl
配置项 | 配置位置 | 说明 |
---|---|---|
USE_VDDM_PRECH_VAREF_ADJ | Adc_GlobalCfgType | VDDM电压 |
USE_VAREF_CONVERSION | Adc_GlobalCfgType | VAREF电压 |
- 用于控制ADC参考电压的预充电设置。影响到参考电压的稳定性和ADC的精度,通常在初始化过程中进行设置,以确保ADC的准确性。
- 使用VDDM电压作为参考电压来进行预充电。这种配置通常用于需要较高精度的模拟信号处理,VDDM电压在系统中更为稳定。
- 使用VAREF电压进行转换,这通常是在系统中需要使用外部参考电压来提高ADC的转换精度时使用的配置。
AdcSleepMode
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_ConfigType | 启用或禁用ADC的睡眠模式 |
- 启用后,ADC可以在不使用时进入低功耗状态,以节省电能。
AdcSystemClock
配置 | 说明 |
---|---|
影响 | 设置ADC系统时钟的频率 |
- 配置项直接影响到ADC的转换速率和采样速率。
4.2 Adc\ AdcConfigSet\ AdcGlobInputClass
AdcGlobChSampleTime
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GlobalCfgType | 设置全局通道的采样时间 |
- 采样时间越长,ADC采集的信号精度越高,但转换速度会降低。
AdcGlobChResolution
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GlobalCfgType | 设置全局通道的分辨率 |
- 分辨率决定了ADC输出的位数(8位、10位、12位),分辨率越高,精度越高。
4.3 Adc\ AdcConfigSet\ AdcHwUnit\General
AdcArbitrationRoundLength
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_HwUnitCfgType | 设置ADC硬件单元在仲裁过程中的轮询长度 |
- 在多个ADC通道争夺硬件资源时,定义了仲裁过程中每个通道允许的最大轮询次数。如果轮询时间设置得太短,可能会导致一些通道无法在仲裁期间获得资源。
- 较短的轮询时间有助于提高系统响应速度,但可能会牺牲部分通道的采样频率。
AdcHwUnitId
配置 | 配置位置 | 说明 |
---|---|---|
HWUNIT_ADC0 | Adc_PBCfg.c | 标识硬件资源ADC0 |
HWUNIT_ADC1 | Adc_PBCfg.c | 标识硬件资源ADC1 |
|配置|Configurator选项|说明||----------- |------------------ |---------------- ||HWUNIT_ADC0|A|标识硬件资源ADC0|HWUNIT_ADC1||标识硬件资源ADC1|
- 用于区分系统中存在的多个ADC硬件单元,并确保配置的相关参数能够正确应用于目标硬件单元。每个ADC硬件单元会有一个独立的ID,可以被映射到不同的硬件资源上。
AdcPostCal
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GlobalCfgType | 配置是否在每次ADC采样后进行校准 |
- 在对ADC精度要求高的场合启用此功能,虽然会略微降低采样速率,但可以保证更高的采样精度。对于对时间要求较高、精度要求一般的场合,可以选择禁用。
4.4 Adc\ AdcConfigSet\ AdcHwUnit\AdcChannel
AdcAnChannelNum
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Icu_17_GtmCcu6_Cfg.h | ADC模拟输入通道编号 |
- 根据2.4 ADC硬件资源分布配置对应的ADC通道
AdcChannelRefVoltsrcHigh
配置 | 配置位置 | 说明 |
---|---|---|
REF_VOLTAGE_VAREF | Adc_ChannelCfgType | 为整个ADC模块设置外部参考电压 |
REF_VOLTAGE_CH0 | Adc_ChannelCfgType | 为特定通道(通道0)设置参考电压 |
- REF_VOLTAGE_VAREF 适合全局高精度需求。REF_VOLTAGE_CH0 适用于特定应用的场景。
AdcInputClassSelection
配置 | 说明 |
---|---|
影响 | 选择ADC输入通道的类 |
- 与 Adc\ AdcConfigSet\ AdcGlobInputClass 绑定(包含采样时间、分辨率等配置)
4.5 Adc\ AdcConfigSet\ AdcHwUnit\AdcGroup
AdcGroupAccessMode
配置 | 配置位置 | 说明 |
---|---|---|
ADC_ACCESS_MODE_SINGLE | Adc_GroupCfgType | 单次访问 |
ADC_ACCESS_MODE_STREAMING | Adc_GroupCfgType | 连续访问 |
- 配置ADC组的访问模式。根据配置需求,参照原理2.3Buffer访问模式。
AdcGroupConversionMode
配置 | 配置位置 | 说明 |
---|---|---|
ADC_CONV_MODE_ONESHOT | Adc_GroupCfgType | 一次采样 |
ADC_CONV_MODE_CONTINUOUS | Adc_GroupCfgType | 持续采样 |
- 定义ADC组的转换模式。根据配置需求,参照原理2.2.1转换模式。
AdcGroupRequestSource
配置 | 配置位置 | 说明 |
---|---|---|
REQSRC0_8STG_QUE | Adc_GroupCfgType | 8阶段队列(8-Stage Queue)作为请求源 |
REQSRC1_NCH_SCAN | Adc_GroupCfgType | 非连续扫描(Non-Continuous Scan)模式作为请求源 |
REQSRC2_BGND_SCAN | Adc_GroupCfgType | 背景扫描(Background Scan)模式作为请求源 |
REQSRC3_8STG_QUE | Adc_GroupCfgType | 8阶段队列(不同场景)作为请求源 |
- 配置ADC组的请求源,比如软件触发、中断触发等。
- 使用8阶段队列(8-Stage Queue)作为请求源。这种配置适用于需要顺序处理多个ADC通道的场景,可以对最多8个通道进行排队转换。
- 使用非连续扫描(Non-Continuous Scan)模式作为请求源。在这个模式下,ADC在每次触发时,只会扫描预定的ADC通道集合一次,适用于不需要持续扫描的场景。
- 使用背景扫描(Background Scan)模式作为请求源。背景扫描模式适合在系统空闲时持续进行ADC转换,并且扫描所有配置的通道集合。
AdcGroupTriggSrc
配置 | 配置位置 | 说明 |
---|---|---|
ADC_TRIGG_SRC_SW | Adc_GroupCfgType | 软件触发 |
ADC_TRIGG_SRC_HW | Adc_GroupCfgType | 硬件触发 |
- 选择ADC组的触发源。根据配置需求,参照原理2.2.2触发方式。
AdcStreamingBufferMode
配置 | 配置位置 | 说明 |
---|---|---|
ADC_STREAM_BUFFER_LINEAR | Adc_GroupCfgType | 线性模式 |
ADC_STREAM_BUFFER_CIRCULAR | Adc_GroupCfgType | 循环模式 |
- 配置ADC组的流缓冲模式,当需要处理连续的数据流时配置这个选项。根据配置需求,参照原理2.3.2 Streaming模式。
AdcStreamingNumSamples
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GroupCfgType | 设置流模式下采样的次数 |
- 根据缓冲区能容纳的样本数量和数据处理能力来设置。
AdcGroupDefinition
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_GroupDefType | 为一组绑定多个ADC通道 |
4.6 Adc\ AdcConfigSet\ AdcHwUnit\AdcKernelInputClass
AdcKernelChSampleTime
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_HwUnitCfgType | 通道采样时间 |
- 采样时间是指ADC采集一个输入信号所花费的时间。采样时间越长,转换精度越高,但也会增加整体转换时间。
AdcKernelChResolution
配置 | 配置位置 | 说明 |
---|---|---|
影响 | Adc_HwUnitCfgType | 通道分辨率 |
- 定义了ADC通道的分辨率,即ADC转换结果的精度。分辨率通常以位(bits)为单位,如10位、12位等。分辨率越高,转换结果越精确。