SemiDrive E3 MCAL 配置 :PWM 硬件触发 ADC 采样

2024-08-26 11:12

本文主要是介绍SemiDrive E3 MCAL 配置 :PWM 硬件触发 ADC 采样,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

在使用 ADC 进行采样时,ADC 的硬件触发采样是 ADC 的典型应用。

本文将介绍 SemiDrive E3 MCAL 配置 :PWM 硬件触发 ADC 采样。

硬件平台:芯驰 E3640 Gateway 开发板

软件平台:SemiDrive_E3_MCAL_V3.0

二、EB 配置  

2.1 ADC 配置

ADC 的 Hardware 触发对应的是 ADC 中 Group 的触发方式,所以首先对需要作为 HW(下文中 Hardware 以 HW 为简称)触发方式的 Group 进行配置。

将 AdcGroupTriggSrc 设置为 ADC_TRIGG_SRC_HW(注:每个 ADC Unit 可以至多设置 4 个 Group,作为 HW 触发的 Group 必须配置在当前 Unit 中的第 0 个 Group,

并且每个 Unit 下至多只能配置 1 个 HW 触发的 Group)

Group 的转换模式在 HW 触发下,一定要设置为 OneShot 模式。

在 MCAL3.0 及之后的 MCAL 软件版本中,HW 触发的 group 的 AccessMode 如果设置为 ADC_ACCESS_MODE_SINGLE,此时 StreamingBufferMode 的设置并不影响

调用流程如下所述:

1. Adc_EnableHardwareTrigger(),将 Group 的 Status 转换为 ADC_BUSY;

2. 等待该 Group的Status 至 ADC_STREAM_COMPLETED;

3. Adc_ReadGroup();该步会获取采样值,并且自动开启新一轮转换,并将 Group 的 Status 转换为ADC_BUSY;

如果接下来需要重复:转换->读值->转换->读值,那么只要确保 Group 的 Status 至 ADC_STREAM_COMPLETED 后调用 Adc_ReadGroup 就可以。

一般来说,触发信号会源源不断的以一定频率产生,而 ADC 的转换和读值会不断重复进行,如果在此情况下使用 HW 触发的 Group,推荐配置方式如下:

1. AdcGroupConversionMode->ADC_CONV_MODE_ONESHOT

2. AdcGroupAccessMode->ADC_ACCESS_MODE_SINGLE;

需要注意

2.2 PORT 配置

ADC 引脚配置

UART 引脚配置

2.3 PWM 配置

此处采用  etimer1 进行硬件触发 ADC,具体  PWM 模块介绍请参照《SemiDrive_E3_MCAL_User_Guide_Rev03.00》 PWM 章节。
 



2.4 Xtrg 配置
 

TmuxIndir

Xtrg 下,可用于触发 ADC 的 mux 存在 2 种:

  • TmuxDir
  • TmuxIndir

使用 TmuxIndir 的方式触发 ADC 是推荐使用的方法,此方式可满足使用需求,TmuxDir 触发就不再赘述。

1. TmuxIndrtInstanceId:有 TmuxIndrtInstanceId0~TmuxIndrtInstanceId7 八个 mux 控制器,只是 id 值。

2. TriggerSigSel:选择触发源。

3. TidPool0Config 与 TidPool1Config TmuxDir 的触发关系,由 PWM/ETIMER 中的 EID 决定;而 TmuxIndir 中的触发关系,由 xtrg 自己产生的 tid 决定。

此处介绍一下 EID 

  1. EID 为 8 位二进制数,范围在 0~255之 间;
  2. EID 分成两部分,高三位和低五位:xxx | xxxxx;
  1. 高三位(取值范围为 000~111,即 0 到 7),对应前文所述的 TargetLut_x(x 即为此处高三位的值)

      例:如 EID = 001 | xxxxx,那么此时 TmuxDrt 中的 TargetLut_1 就会生效;如 EID = 011 | xxxxx,那么此时 TmuxDrt 中的 TargetLut_3 就会生效,以此类推;

  1. 低五位(取值范围为 00000~11111,即 0~31;但实际使用时,范围为 00000~01111,即0~15),此处的值对应即将触发 ADC 的第 x 个 Channel;

      例:如 EID = xxx | 00011,那么此时即将触发 ADC 中 LogicalId 为 3 的 channel;

综上所述,EID 决定了 Xtrg 的 TmuxDir 中哪一个 TargetLut_x 生效,并且决定了即将触发的 ADC 的通道序号。

而具体是哪个 ADC Unit,就由生效的 TargetLut_x 决定,如下所述:

  • TargetLut_x = 0000 0001->对应触发 ADC1
  • TargetLut_x = 0000 0010->对应触发 ADC2
  • TargetLut_x = 0000 0100->对应触发 ADC3
  • TargetLut_x = 0000 0101->对应同时触发 ADC1、ADC3,具体优先级由 Xtrg决定,不建议如此使用。

      结合上文所叙述内容,具体 TmuxDrt 和 EID 结合使用例子如下:EID = 010 00011,此时 Xtrg 中 TmuxDir 的 TargetLut_2生效,并假设此时 TargetLut_2 = 1,此时 TriggerSigSel = EPWM1_CMP0

  • TargetLut_0 = 1
  • TargetLut_1 = 1
  • TargetLut_2 = 1
  • TargetLut_3 = 1
  • TargetLut_4 = 1
  • TargetLut_5 = 1
  • TargetLut_6 = 1
  • TargetLut_7 = 1

     并且此时EID = 010 | 00011,那么此时通过 EPWM1_CMP0 经过 Xtrg 的 TmuxDir 时,会查找 TargetLut_2  配置的内容(EID 高三位为 2),发现:TargetLut_2 = 1,所以此时将触发 ADC1,而 EID 低 5 位为 00011(数值 3),所以将触

发 ADC1 中,硬件触发的 Group 中 LogicalId 为 3 的channel,我们再回到 TmuxIndir ,TmuxIndir 中 tid 由内部的 tid pool 产生,而具体配置的值就由 TidPool0Config 和 TidPool1Config 确定。

     TidPool0Config 和 TidPool1Config 实际为两个 32 位的寄存器,所以每个选项取值范围是:000...000(32 位)~111...111(32 位),即 0~4294967295;每个 TidPoolConfig 分割为 4 个部分,每个部分 8 位,而这 8 位的功能就替代了

上文所叙述的 EID:例如 TidPool0Config 为  011 00001 010 00001 001 00001 000 00000,实际上代表了 4 个 TID 值(此处 TID 和上文的 EID 对应),每个 8 位也是由高 3 位和低 5 位组成,功能和前文所述的 EID 一致。

4. TermValConfig和TermTidConfig

     将两个配置项进行合并叙述,现在已知 TidPool0Config 和 TidPool1Config 产生了确定触发关系的 TID,那么如何确定当前选择哪个具体的 TID 就由 TermValConfig 或者 TermTidConfig 决定。

首先,TidPool0Config 和 TidPool1Config 中取 TID 的方式是在 tidpool 中,存在一个不断循环的指针,当这个指针指向哪个 TID,就会选择当前的 TID 值,这个指针的轮询速度不能控制,具体工作方式如下:

TIDpool 中指针从 TID0 开始轮询。

TermValConfig:取值范围是 0~7,已知 TidPool0Config 为 4 个TID,TidPool1Config 为 4 个 TID,而 TermValConfig 决定了从第 0 个 TID 轮询到第几个 TID 结束,具体含义:

例如:

TermValConfig = 4

此时 tidpool 中的指针会从 TidPool0Config 中的 TID0 直至 TidPool1Config 的 TID4 结束并开始重复;

而 TermTidConfig 是一个 8 位配置项,取值范围为 0~255,它也可以用来决定 Tidpool 指针到哪个 TID 结束轮询并开始下一轮循环。

例如:

TermTidConfig = 255

在 TID0~TID7 中,其中一个 TID 的取值为 11111111(255),那么就会到达终点开始下一轮。

TermValConfig 和 TermTidConfig 是共同生效的,但是建议使用 TermValConfig,这样比较直观,TermTidConfig 可以配一个无法匹配的值,比如 11111111。

TargetLut:用于确定触发具体哪个ADC Unit。

配置完上述内容后,代入 sdrv_xtrg_tmux0_drt_config 接口

sdrv_xtrg_tmux0_indrt_config(&xtrg_dev, &TmuxIndrtConfig_0);

此类配置可以满足某个 ADC Unit 下,一个 Hw Group 可以至多配置 8 个 channel。

三、 函数部分

3.1 中断函数

3.2 主函数

四、总结

     将 ADC 触发模式设置为硬件触发,通过 PWM 设置触发频率,通过 XTRG 模块链接到 ADC 上,此 Demo 通过延时 100us,打印 ADC 的触发次数来验证 ADC 可以在 100us 被多次触发,且频率可调。

五、 参考文档

   《SemiDrive_E3_MCAL_User_Guide_Rev03.00》

欢迎大家登录大大通,可以了解更多精彩内容哦!

这篇关于SemiDrive E3 MCAL 配置 :PWM 硬件触发 ADC 采样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108400

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如