SemiDrive E3 MCAL 开发系列(8)– Adc 模块的使用

一、概述

本文将会介绍 SemiDrive E3 MCAL Adc 模块的简介以及基本配置。此外会结合实际操作的介绍,帮助新手快速了解并掌握这个模块的使用,文中的 MCAL 是基于 PTG3.0 的版本,开发板是官方的 E3640 网关板。

二、Adc 模块简介

首先了解下 Autosar 中关于 Adc 模块的一些概念,以下结合图 2.1 进行说明。

图 2.1 Autosar Adc 模块

  • ADC Channel:表示绑定到一个端口引脚的 ADC 实体。
  • ADC Channel Group:一组 ADC 通道链接到同一个 ADC 硬件单元,整个组的转换由一个触发源触发。
  • ADC Result Buffer: ADC 驱动程序中用户必须为每一个组提供一个缓冲区,如果选择了流访问模式,该缓冲区可以保存同一组通道的多个样本,如果选择单一访问模式,每个组通道的一个样本将保存在缓冲区中。
  • Conversion Mode:包括两种转换模式:① One-Shot 模式:ADC 通道组的转换在触发后执行一次,并将结果写入分配的结果缓冲区,可以是软件触发或硬件事件触发。② ADC 通道组的转换在软件 API 调用后连续执行,并将结果写入分配的结果缓冲区,连续转换可以通过软件 API 调用停止。
  • Sampling Time/Sample Time:采样模拟信号的时间,可以在 EB 中进行配置。
  • Conversion Time:采样模拟信号转换成数字信号的时间。
  • Acquisition Time:等于 Sampling time 加上 Conversion time。

从图 2.1 可以看出,ADC Group 下必须要绑定 Channel,不然没有意义,Group 下的 Channel 必须属于同一个 ADC 硬件单元。另外同一个 Channel 可以绑定到不同的 Group 中。

三、Adc 模块的主要配置

下面介绍 Adc 模块的配置,这里会以 GPIO_B5和 GPIO_B6 两个引脚为例子介绍,首先需要再 Mcu 模块中使能 Adc 模块。具体操作如图 3.1 所示。

3.1 Mcu 模块配置

接着在 Port 模块中配置 Adc 引脚,如图 3.2 所示。

图 3.2 模块配置

然后开始配置 Adc 模块,首先添加 ADC 模块,E3 最多可以添加 3 个 ADC 模块,如图 3.3 所示。

图 3.3 添加新的 Adc 模块

接着配置 ADC 的 Channel,Channel 配置中 AdcChannelId 和 AdcLogicalChannelId 这两项都按照默认的连续值即可,AdcChannelMux 和 AdcPhysicalChannelId 需要根据实际使用的 ADC 引脚进行配置,下面参照图 3.5 举例进行说明。

比如我们使用的 ADC 引脚是 GPIO_B6,使用的 ADC 模块是 ADC1,通过查看数据手册可以知道该引脚连接到 ADC 的 CH3_N 通道,从图中可以看出 ADC1 的 N3 通道只有 GPIO_B6 一个引脚输入,因此 AdcChannelMux 配置为 0,对于 N5 通道则有多个 GPIO 引脚输入,其对应的 AdcChannelMux 分别为 0~7,AdcChannelMux 的计算则按照图中所示公式计算:3 x 2 = 6

图 3.4 配置 ADC Channel

图 3.5 AdcChannelMux 和 AdcPhysicalChannelId 计算方法

接着配置 ADC 模块的 Group 参数,具体各参数的说明如下图所示。需要注意的是 Group 最多可以配置 4 组。

图 3.6 ADC Group 参数配置

最后配置 ADC Group 组别内部的 Channel,每个 Group 最多可以添加 16 个 Channel,并且这些 Channel 都是属于同一个 ADC 硬件单元的,具体配置如图 3.7 所示。

图 3.7 配置每个 Group 中的 Channel

四、实际操作

完成以上的配置后,接着使用测试代码进行验证,测试代码如图 4.1所示。

图 4.1 ADC 测试代码

配置完以后编译生成配置文件,然后重新编译工程,调试运行,按照图 4.2 输入相关命令进行测试,测试前我们将 GPIO_B5 和 GPIO_B6 两个引脚都接到 3.3V。可以看到 ADC 转换的结果为 3.294V,跟实际电压一致。

图 4.2 串口打印信息

五、使用注意事项

对于 ADC 模块的使用需要注意以下事项:

  • 每一个 ADC 单元,只允许同时一个 Group 正常进行转换。
  • 如果是硬件触发 Group,需要配置在每个 ADC 单元的第 0 个 Group。
  • DMA 模式只支持软件触发,并且如果当一个 ADC 单元已经有一个 DMA Group,那么该单元无法配置其他的 Group。另外需要注意的是 DMA 模式下提供 Group 存放数据的 Buffer 需要 32 字节对齐。
  • 对于 CIRCULAR 模式下跟 AUTOSAR 规范不完全适配:在调用 Adc_ReadGroup 之前,如果 group 达到 ADC_STREAM_COMPLETED 状态,不调用 Adc_ReadGroup 接口,那么不会开启下一轮采样,也不会覆盖 Buffer 中的采样数据。
  • 建议在硬件触发模式下,如果完成转换后,关闭触发源或者 Xtrg 的 Tmux。
  • 如果需要做通道的过压测试(比如某个通道短路超过 9V,查看其他通道的采样值是否准确),需要打开 Adc_Channel_Detect 的宏,并且根据硬件电路进行验证以找到合适的电压阈值进行屏蔽。此功能只支持软件采样、中断模式的 Group;使用此功能时,第一轮采样的数据会用作检测过压的通道,第二轮以后得数据才会返回上层调用者。

六、参考资料

1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08

点击此处阅读更多系列文章吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值