AUTOSAR MCAL ADC原理详解和配置应用
作者:互联网
本文从以下角度详细讲解MCAL ADC的原理、配置和使用:
-
基本概念
-
模块依赖
-
功能要求
-
工具配置
-
应用实现
1. 基本概念
ADC,即Analogue Digital Converter缩写。简单来说,它是将输入的模拟信号转换为数字信号输出。
提到转换,里面就会涉及到采样、精度、转换时间等概念或参数。
在AUTOSAR中,关于ADC的概念要先理解下
ADC Module
ADC 基础软件模块 ADC Driver,也缩写为 ADC Driver
ADC Channel
表示绑定到一个端口引脚的逻辑 ADC 实体。
ADC Channel Group
一组 ADC 通道链接到同一个 ADC 硬件单元。整个组的转换由一个触发源触发。
ADC Result Buffer (ADC Streaming Buffer, ADC Stream Buffer)
ADC 驱动程序的用户必须为每个组提供一个缓冲区。 如果选择了流访问模式(streaming access mode),该缓冲区可以保存同一组通道的多个样本。如果选择单一访问模式(single access mode),每个组通道的一个样本将保存在缓冲区中。
Software Trigger
启动一个 ADC 通道组或一系列连续 ADC 通道组转换的软件 API 调用。
Hardware Trigger
ADC 内部触发信号,用于启动 ADC 通道组的一次转换。 ADC 硬件触发在 ADC 硬件内部产生 检测到硬件触发后,无需软件即可启动 ADC 通道组转换。
注意:如果 ADC 硬件不支持硬件触发,可以通过软件触发结合 GPT/ICU 驱动程序实现类似的行为。
Conversion Mode
One-Shot:ADC 通道组的转换在触发后执行一次,并将结果写入分配的结果缓冲区。触发器可以是软件 API 调用或硬件事件。
Continuous:ADC 通道组的转换在软件 API 调用(启动)后连续执行,并将结果写入分配的结果缓冲区。连续转换可以通过软件 API 调用(停止)停止。
Sampling Time/Sample Time
采样模拟信号的时间
Conversion Time
采样模拟信号转换成数字信号的时间
Acquisition Time
Sample Time + Conversion Time.
2. 模块依赖
MCU
ADC会用到MCU的时钟配置。时钟频率会对ADC有以下影响:
- Trigger frequency
- Conversion time
- Sampling time
Port
这个是ADC的Port复选功能配置。
Det
ADC的错误捕获用。
ADC的头文件结构如下:
3. 功能要求
ADC不仅仅只有我们简单理解的采样读取这些功能的,AUTOSAR里面对其有很多要求,ADC模块也实现了很多功能。
下表列出了ADC用户可能需要的功能以及ADC模块以何种方式提供这些功能。
ADC Buffer Access Mode
上文有提到“Buffer Access Mode”的概念,以下通过一个案例来解释:
1. Configuration
示例配置由三个 ADC Group组成。G1包含2个通道,G2和G3各包含一个通道。对于G1 和G2,Group访问模式 配置为ADC_ACCESS_MODE_STREAMING。G3的Group访问模式为ADC_ACCESS_MODE_SINGLE。ADC 驱动程序将Group 1-3 的转换结果存储在三个应用程序缓冲区中,通过三个配置的 ADC_RESULT_POINTER 访问:G1_ResultPtr、G2_ResultPtr 和 G3_ResultPtr。
2. Initialization
用户必须为ADC Group结果提供应用程序结果缓冲区。每组需要一个缓冲区。如果选择了Streaming Access Mode,缓冲区大小取决于组通道数、Group访问模式和Stream采样数。在开始Group转换之前,用户必须使用API函数Adc_SetupResultBuffer初始化Group结果指针,该函数将Group结果指针初始化为指向指定的应用程序结果缓冲区。
3. Adc_GetStreamLastPointer用法
ADC 驱动程序将G1、G2 和 G3组的转换结果存储在相应的结果缓冲区 G1_ResultBuffer[]、G2_ResultBuffer[] 和 G3_ResultBuffer[]中。ADC驱动程序不支持从ADC API函数直接访问ADC硬件结果寄存器。
用户提供三个指针 G1_SamplePtr、G2_SamplePtr 和 G3_SamplePtr调用Adc_GetStreamLastPointer后会指向ADC申请结果缓冲区。精确的指针G1_SamplePtr在调用Adc_GetStreamLastPointer后指向最近完成的转换回合的最新G1_CH0结果(G1_CH0是G1组定义中的第一个通道)。group 1的应用结果缓冲区保存了 G1_CH0 的3份Stream结果,以及G1_CH1的3份Stream结果。了解应用程序结果缓冲区布局,用户可以访问最新一轮转换的所有组通道结果。G2_SamplePtr和G3_SamplePtr也对齐,调用Adc_GetStreamLastPointer后,指向对应组的第一个组通道的最新结果。两组都只有一个频道。G2_SamplePtr 指向G2_CH2结果之一(最新结果)。由于G3配置为Single Access Mode,因此G3_SamplePtr始终指向G3_CH3。
4. Adc_ReadGroup用法
如果启用了可选的API函数Adc_ReadGroup,则用户必须为所选组提供额外的缓冲区,该缓冲区可以保存一轮组转换的结果。调用Adc_ReadGroup将最新的结果从应用程序结果缓冲区复制到应用程序读取组缓冲区。在该示例中,一个应用程序读取缓冲区 (G2_G3_ReadBuffer) 用于组G2和G3。
ADC的转换和交互
上图中
Example 1:包含通道[CH0、CH1、CH2、CH3 和 CH4]的通道组配置为连续转换模式。完成每次扫描后,将调用Notification(如果已启用)。然后自动开始新的扫描。
Example 2:包含通道[CH0、CH1、CH2、CH3 和 CH4]的通道组配置为One-Shot转换模式。完成扫描后,将调用Notification(如果已启用)。
Example 3:包含通道[CH3]的通道组配置为连续转换模式。完成每次扫描后,将调用Notification(如果已启用)。然后自动开始新的扫描。
Example 4:包含通道[CH4]的通道组配置为One-Shot转换模式。完成扫描后,将调用Notification(如果已启用)。
ADC的状态交互
ADC模块有一个状态机。而这状态是特定于组的,而不是特定于模块。以下图表显示了ADC组的可能的配置选项。状态转换取决于ADC组配置。
由于可能的case比较多,以下我仅挑选几种来说明(更多的描述请见官方文档AUTOSAR_SWS_ADCDriver.pdf):
1. ADC State Diagram for One-Shot/Continuous Group Conversion Mode
2. ADC State Diagram for One-Shot Conversion Mode, Software Trigger Source, Single Access Mode
3. ADC State Diagram for Continuous Conversion Mode, Software Trigger Source, Linear and Circular Streaming Access Mode
ADC的时序交互
4. 工具配置
5. 应用实现
略……
请见公众号原文《MCAL ADC Module原理和配置详解》。
关注“嵌入式软件实战派”,回复“AUTOSAR”获得更多实战教程。
标签:AUTOSAR,G3,G1,MCAL,ADC,缓冲区,转换,通道 来源: https://blog.csdn.net/lianyunyouyou/article/details/118944837