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

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令