求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
AUTOSAR实战教程
1.AUTOSAR相关知识
1. 老板说项目要上AUTOSAR,我慌得一批
2. 我淡定地撸了一遍AUTOSAR的基本概念
3. AUTOSAR初学者最想搞懂的东西
2.AUTOSAR理论基础
AUTOSAR架构
1. AUTOSAR架构的故事(干货)
2. AUTOSAR架构之通信服务(干货)
3. 这次我通过Interface来贯穿整个AUTOSAR架构
AUTOSAR启动与初始化
1. 解析AUTOSAR Startup
2.AUTOSAR架构中的配置文件
3.SWC详解与配置实现
1.AUTOSAR Port原理概念详解
4.BSW原理和实战演练
1. AUTOSAR折磨,从新建工程开始
2. AUTOSAR的BswM模块详解
3. 图解AUTOSAR NVM模块
4. AUTOSAR架构的 Pdu Router
5. AUTOSAR中的vLinkGen可以干嘛
6. MCAL Wdg模块解析
7. MCAL PWM Module详解
8. AUTOSAR的Memory是如何设计的?
9. AUTOSAR NvM Block的Native、Redundant和Dataset有什么区别?
10. AutoSAR,在多核汽车MCU中如何运行
11. AUTOSAR架构中的Configurator
12. AUTOSAR中的Fee
5.MCAL应用配置
1.ADC模块的配置
2.MCU模块的配置
3.PWM模块的配置
 
 
MCAL ADC Module原理和配置详解
 来源: 嵌入式软件实战派
1436 次浏览
6次  

本文从以下角度详细讲解MCAL ADC的原理、配置和使用:

1.基本概念

2.模块依赖

3.功能要求

4.工具配置

5.应用实现

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. 工具配置

这个是ADC模块的内容条目

ADC Channel配置

接下来,看看具体 Channel 里面的配置内容

解释下上面几个参数的含义:

Channel Conv Time

如果硬件支持,转换时间的配置,即每个通道的模拟值转换为数字表示的时间(以时钟周期为单位)。

该参数没有用,因为硬件不支持每个通道的转换时间。

Channel High Limit

Channel的最大值,用于limit检查

Channel Limit Check

即Enable/Disable ADC Channel的Limit检查

Channel Low Limit

Channel的最小值,用于limit检查

Channel Range Select

在Eanble限制检查的情况下:定义与使用 AdcChannelLowLimit 和 AdcChannelHighLimit 定义的边界相关的转换值。类型是Adc_ChannelRangeSelectType

ADC 驱动的最大有效范围由 AdcHwUnitResolution 定义,

如果 ADC 驱动器分辨率为 12 位,则最大值 = 4095。

如果 ADC 驱动器分辨率为 10 位,则最大值 = 1023。

这个 Adc_ChannelRangeSelectType 有以下定义:

举个例子 ADC_RANGE_BETWEEN ,其有效范围是 between low limit and high limit 。即

valid: [low,high]

invalid: [0,low] and [high,max]

Channel Ref Voltsrc High

Channel Ref Voltsrc Low

每个通道的参考电压源。

这两个参数没有用,因为硬件不提供选择参考电压的灵活性,用户需要注意设置参考电压。

Channel Resolution

以位为单位的通道分辨率。

该参数没有用,因为 ADC 分辨率基于硬件单元。

Channel Sample Time

如果硬件支持,采样时间的配置,即每个通道的值被采样的时间(以时钟周期为单位)。

该参数没有用,因为硬件不支持每个通道的采样时间。

Channel Track Hold

指定为跟踪和保持操作启用的通道。 只有 0-5 的通道才能启用跟踪和保持操作。

ADC_TH_GROUPA :启用跟踪和保持并映射到Group A。

ADC_TH_GROUPB :启用跟踪和保持并映射到Group B。

ADC_TH_DISABLED :跟踪和保持禁用。

ADC Group配置

接下来看看ADC的Group配置

Group Access Mode

这个就是上面已经提到过的Access Mode概念,对转换结果进行分组的访问模式类型。

Group Conversion Mode

这个上面也提过了,是驱动程序支持的转换模式类型。

实现类型: Adc_GroupConvModeType

ADC_CONV_MODE_CONTINUOUS :如果通道组映射到 TG0 ,则 ADC 通道组的转换在软件 API 调用(启动)或硬件 API 调用(启动)后连续执行。转换本身自动运行(不需要额外的软件或硬件触发器)。

ADC_CONV_MODE_ONESHOT : ADC 通道组的转换在触发后执行一次。

Group Replacement

替换机制,用于 ADC 组级别,如果组转换被具有更高优先级的组中断。

实现类型: Adc_GroupReplacementType

Group Trigg Src

启动组转换的源事件类型。

实现类型: Adc_TriggerSourceType

Result Access Mode

这个也在上文提到过,此参数指定是否应使用 DMA 或 ISR 将转换结果从相应的寄存器传输到软件缓冲区。

ADC_DMA_ACCESS : DMA 用于将转换结果从相应的寄存器传送到软件缓冲区。

ADC_ISR_ACCESS : ISR 用于将转换结果从相应寄存器传送到软件缓冲区。

ADC_POLLING_ACCESS : POLLING 用于将转换结果从相应寄存器传送到软件缓冲区。 ISR 不适用于 PWM 诊断组。

Self Diag Mode 驱动程序支持的自诊断类型。

ADC_SELF_DIAG_OFF :正常组。

ADC_SELF_DIAG_CONV_CKT : A/D 转换电路的自诊断。

ADC_SELF_DIAG_CH_MUX :通道复用器的自诊断。

ADC_SELF_DIAG_OPEN_PIN :开路引脚诊断。

另外其他几个参数比较简单,就不一一介绍了。

5. 应用实现

应用根据实际需要,用起来是非常方便的。

第一种方法,可以看上面的“ ADC的时序交互 ”,参考其API调用即可。

第二种方法,使用Group的方式(按上面截图配置成 ADC_CONV_MODE_CONTINUOUS ),也是比较简单的:

1. 初始化 Adc_Init()

2. 启动Conversion

Adc_SetupResultBuffer();

Adc_StartGroupConversion();

3. 获得结果

Adc_ReadGroup();

搞定!

 


 



您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1436 次浏览
6次