Autosar MCAL-ICU输入捕获

article/2025/10/11 8:42:41

文章目录

  • 前言
  • ICU
    • IcuChannel
      • IcuChannelId
      • IcuDefaultStartEdge
      • IcuMeasurementMode
      • IcuSignalType
      • IcuWakeupCapability
      • 子配置项
        • IcuSignalMeasurement
          • IcuSignalMeasurementProperty
          • IcuDutycycleBufferMarker
    • IcuOptionalApis
      • IcuGetDutyCycleValuesApi
      • IcuSetModeApi
      • IcuSignalMeasurementApi
    • PWM采集使用示例
  • 总结

前言

在上一篇文章中介绍了GTM中TIM的配置使用Autosar MCAL-GTM之定时输入TIM,本节继续介绍PWM输入信号采集的最上层模块ICU。

ICU

ICU(Input Capture Unit)输入捕获模块,一个功能为采集PWM信号(占空比和频率)

ICU属于Autosar标准中的模块,规范中定义了其必须的一些配置项。

IcuChannel

IcuChannelId


cfg中配置Channel id:
Channel ICU通道Id。此值将分配给IcuChannel short name.

cfg中配置short name:

IcuDefaultStartEdge

如果没有通过调用服务Icu_SetActivationCondition()配置的激活边缘,则为该通道配置默认激活边缘

当测量模式为“IcuSignalMeasurement”且设置了“DutyCycle”或“Period”属性时,此处配置的边缘将被用作默认周期起始边缘。

三个选项:

ICU_RISING_EDGE:上升沿

ICU_FALLING_EDGE:下降沿

ICU_BOTH_EDGES:上升沿和下降沿

cfg中配置:

IcuMeasurementMode

该配置项也是Autosar中的标准配置项


ICU_MODE_EDGE_COUNTER:该通道用于计算通过调用服务Icu_SetActivationCondition()配置的边沿。

以下API服务支持该模式:

  • Icu_EnableEdgeCount()

    Icu_DisableEdgeCount()
  • Icu_GetEdgeNumbers()
  • Icu_ResetEdgeCount()

    该模式只能在IcuEdgeVountApi打开的情况下配置

    ICU_MODE_SIGNAL_EDGE_DETECT:通道用于检测通过调用服务Icu_SetActivationCondition()配置的边沿。

    以下API服务支持此模式:
    * Icu_EnableNotification()
    * Icu_DisableNotification()
    * Icu_GetInputState()
    ICU_MODE_SIGNAL_MEASUREMENT:通道用于测量各种可配置边之间的不同时间。

    周期开始边缘的配置由配置完成,不能在运行时更改

    以下API服务支持此模式:
    * Icu_GetTimeElapsed()
    * Icu_GetDutyCycleValues()
    * Icu_GetInputState()
    此模式只能在以下情况下配置以下开关之一设置为“true”:
    * IcuGetDutyCycleValuesApi
    * IcuGetTimeElapsedApi

    此处通过Icu_GetDutyCycleValues函数来获取测量PWM的占空比信息

    ICU_MODE_TIMESTAMP:通道用于捕获边缘上的计时器值,这些值是通过调用服务Icu_SetActivationCondition()配置的。

    以下API服务支持这种模式:
    * Icu_StartTimestamp()
    * Icu_StopTimestamp ()
    * Icu_GetTimestampIndex()
    这种模式只能在配置IcuTimeStampApi开启后才有效

    cfg中配置:

IcuSignalType

信号安全等级QM or ASIL

cfg中配置:

IcuWakeupCapability


关于该通道的唤醒能力的信息。

true:通道能够唤醒。

false:通道不具备唤醒能力

cfg中配置:

子配置项


IcuSignalEdgeDetection:
如果测量模式是“IcuSignalEdgeDetection”,则此容器包含配置(参数)

IcuSignalMeasurement:如果测量模式为“IcuSignalMeasurement”,则此容器包含配置(参数)

IcuTimestampMeasurement:如果测量模式是“IcuTimestamp”,则此容器包含配置(参数)。

IcuWakeup:此容器包含配置支持唤醒通道所需的配置(参数)

本次MeasurementMode配置的为ICU_MODE_SIGNAL_MEASUREMENT,所以需要配置一个子配置项IcuSignalMeasurement

IcuSignalMeasurement

IcuSignalMeasurementProperty


配置在模式为“IcuSignalMeasurement”的情况下可以测量的属性
ICU_DUTY_CYCLE:通道被配置为读取计算占空比(激活时间和周期时间)所需的值。

ICU_HIGH_TIME:通道被配置为读取经过的信号高时间

ICU_LOW_TIME:配置的通道用于读取运行信号低时间

ICU_PERIOD_TIME:通道被配置为读取经过的信号周期时间

cfg中配置ICU_DUTY_CYCLE对应ICU_ACTIVE_TIME:

IcuDutycycleBufferMarker

该配置项不是Autosar的标准配置,目前没有用到。

以上关于通道的配置就完了。下面需要配置可选的API函数

IcuOptionalApis

API函数在Autosar规范文档中显示的很清楚,本文只介绍和PWM采集相关的函数

IcuGetDutyCycleValuesApi


通过Icu_GetDutyCycleValues() 函数来获取占空比和频率
如果IcuSignalMeasurementApi==false,此开关也应设置为false。
cfg配置:

IcuSetModeApi


通过Icu_SetMode() 函数设置ICU模式
cfg配置:

IcuSignalMeasurementApi


通过Icu_StartSignalMeasurement()开始信号测量,通过Icu_StopSignalMeasurement()停止信号测量。
cfg配置:

其他配置项对于PWM测量没有太大影响,不再介绍。

PWM采集使用示例

初始化时使用SetMode函数设置模式为Normal,并对需要测量的通道设置为开始测量

	Icu_17_GtmCcu6_SetMode(ICU_MODE_NORMAL);Icu_17_GtmCcu6_StartSignalMeasurement(IcuConf_IcuChannel_IcuChannel_1);

周期运行函数中使用GetDutyCycleValues获取结果

  Icu_17_GtmCcu6_GetDutyCycleValues(IcuConf_IcuChannel_IcuChannel_1,&PWM_Data);

返回的结果PWM_Data为一个结构体:

typedef struct
{/* To store ActiveTime for GetDutyCycles API.*/Icu_17_GtmCcu6_ValueType  ActiveTime;/* To store PeriodTime for GetDutyCycles API.*/Icu_17_GtmCcu6_ValueType  PeriodTime;/* Buffer marker value */ Icu_17_GtmCcu6_ValueType BufferMarker; 
}Icu_17_GtmCcu6_DutyCycleType;

第一个参数为有效电平时间,第二个参数为周期,由这两个参数即可计算出占空比duty= ActiveTime/PeriodTime
同时,可以得到PWM频率f=1/PeriodTime
PeriodTime并非真实时间,而是一个计数,需要转化为真实时间,例如我们在之前设置的PWM采集的频率为10MHz,PeriodTime计数为12500,则实际的周期为12500/10000000=0.00125,则测量的PWM频率f=1/0.00125=800Hz.

总结

以上,关于PWM采集频率和占空比的部分就介绍完了。若想得到精度高的占空比,需要尽可能的提高采集的频率,或者测量的频率比较低,这样得到的占空比的精度也是比较高的。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~
你的鼓励是对小弟的最大支持~~~
建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~


http://chatgpt.dhexx.cn/article/yKfXYD7Q.shtml

相关文章

Autosar MCAL-SPI配置及使用

文章目录 前言SPI协议基础Autosar SPI专有名词SpiDriverSpiChannelSpiChannelIdSpiChannelTypeSpiDataWidthSpiDefaultDataSpiEbMaxLengthSpiIbNBuffersSpiTransferStart SpiExternalDeviceSpiBaudrateSpiAutoCalcBaudParamsSpiCsIdentifierSpiCsPolaritySpiCsSelectionSpiData…

【AUTOSAR】 MCAL配置说明(二)----MCAL CAN模块配置

CAN CAN 通讯模块配置 主要的配置内容如下: can 模块的时钟源 can busoff, rx, tx的处理方式 映射pin 脚选择 波特率,采样点设置 邮箱配置,接收、发送报文邮箱,标准帧/扩展帧 CanClockConfiguration 配置CAN 模…

Autosar MCAL-ADC详解(二)-基于Tc27x的cfg软件

文章目录 前言AdcHwUnitAdcGroupChannel Emux SelectGroup Access Mode配置结果指针初始化结果访问读取buffer中的结果 Group Buffer MarkerGroup Conversion ModeGroup IdGroup PriorityGroup ReplacementGroup Request SourceAdcGroupTriggSrcAdcHwTrigSignalHw Gate SignalA…

TC397 EB MCAL开发从0开始系列 之 [1.0]-MCAL结构及Demo介绍

MCAL结构介绍MCAL结构MCAL模块 MCAL安装包说明DemoWorkspaceMclsar EB 环境配置EB环境安装EB新建工程 ->返回总目录-< MCAL结构介绍 MCAL结构 MCAL是 Microcontroller Abstraction Layer&#xff08;微控制器抽象层)的简写&#xff0c;是AuoSar架构中的概念&#xff0…

MCAL中ADC的配置

根据硬件资源分配以及各信号的应用对ADC模块进行配置,使能正确采集信号,并提供转换结果。 1. ADC模块接口配置 使能AdcHwTriggerApi:硬件触发ADC转换,根据硬件需求,部分Channel的转换是通过硬件信号触发转换,因此需要使能该API。 使能AdcEnableStartStopGroupApi:软件…

AurixDevStudio集成MCAL

这是Tricore MCAL安装路径 打开ADS新建一个AURIX Project 我手上的是龙邱的TC377最小系统, 就这样选 理解下第一个选项 新建好的基础工程是这个样子 删除掉Library文件夹, 因为我们这里要使用的MCAL而不是iLLD库(虽然它们实现的功能大体相同) 在工程里新建一个文件夹为Mca…

AUTOSAR 学习笔记(一):NXP S32K14X AUTOSAR MCAL 软件下载及安装

AUTOSAR学习笔记(一)&#xff1a;NXP S32K14X AUTOSAR MCAL 软件下载及安装 目录 AUTOSAR学习笔记(一)&#xff1a;NXP S32K14X AUTOSAR MCAL 软件下载及安装1.下载MCAL 软件2、下载 AUTOSAR EB tresos 软件3、下载AUTOSAR 4.0 OS4、安装 EB tresos5、安装 MCAL6、安装 AUTOSAR…

[ 搞一点AutoSar ]基于EB的MCAL-GPT全模块配置与解析

笔者搞了快一个星期的GPT的测试了&#xff0c;从配置到代码一遍又一遍的操作和阅读。觉得有必要把学习成功稍微总结一下了&#xff1b;学AUTOSAR最后还是得熟悉代码&#xff0c;毕竟AUTOSAR只是目的&#xff0c;而代码才是实现的手段。中间的逻辑关系看代码一目了然&#xff1b…

【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 什么是FullCAN和BasicCAN 1.1 FullCAN / Basic CAN HRH区别 1.2 FullCAN / Basic CAN HTH区别 1.3 FullCAN和Basic CAN存在的原因 1.4 FullCAN/Basic CAN HRH/HTH如何选择 2 如何配置FullCAN和BasicCAN 3 来自CAN Dr…

MCAL MCU Module详解和配置说明

关注“嵌入式软件实战派”回复“AUTOSAR”获得更多实战教程。 以下内容包含&#xff1a;基本概念、模块依赖、应用时序、参数配置实践讲解&#xff0c;以及ECUM对其引用等。 1. 基本概念 描述了MCU&#xff08;Microcontroller Unit&#xff09; 驱动程序的功能和 API。 MCU 驱…

搞一点AutoSar--MCAL SPI-1

整理了一点SPI的资料 目录 1、SPI模块简介2、SPI驱动模块API的使用方法3、SPI通信主要概念4、选择SPI通道缓存&#xff08;Buffer&#xff09;位置5、SPI驱动模块API调用流程 1、SPI模块简介 图1 MCAL 4个驱动组与微控制器内核和外设的映射关系SPI属于MCAL模块中的通信驱动组&…

【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 关键字定义 2 Maibox与Hardware Object之间的关系 2.1 接收L-PDU 2.2 发送L-PDU 3 HOH&#xff0c;HRH&#xff0c;HTH&#xff0c;Hardware Object之间的关系 4 Message buffer(MB)结构 5 结尾 1 关键字定义 Mailb…

图解AUTOSAR(五)——微控制器抽象层(MCAL)

微控制器抽象层位于AUTOSAR分层模型中BSW最底层&#xff0c;包含内部驱动&#xff0c;可以直接访问微控制器和片内外设。更进一步地&#xff0c;MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分&#xff0c;各部分又由具体的与微控制器硬件相对应的驱动模块…

MCAL架构

MCAL位于AUTOSAR软件架构中基本软件&#xff08;BSW&#xff09;的底层&#xff0c;是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件&#xff08;如ECU抽象层、系统服务层等&#xff09;独立于MCU硬件平台&#xff0c;保证上层软件的标准化和通用性。…

AutoSar之微控制器抽象层MCAL

微控制器抽象层位于AUTOSAR BSW的最底层&#xff0c;包含内部驱动&#xff0c;可直接访问微控制器和外设芯片。从具体应用来看&#xff0c;MCAL主要包括微控制器驱动、存储器驱动、通信驱动和输入输出驱动四个部分&#xff0c;各部分又由具体的与微控制器硬件相对应的驱动模块组…

MCAL介绍及Module Plugin开发流程总结

Mcal–微控制器抽象层位于AUTOSAR分层模型中BSW最底层&#xff0c;包含内部驱动&#xff0c;可以直接访问微控制器和片内外设。 MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分&#xff0c;各部分又由具体的与微控制器硬件相对应的驱动模块组成。如图所示…

Autosar MCAL软件架构基本概念

MCAL架构介绍 Autosar整体架构图如下所示&#xff1a; MCAL是MicroController Abstraction Layer&#xff08;微控制器抽象层&#xff09;的缩写。如下图所示&#xff0c;MCAL位于AUTOSAR软件架构中基本软件&#xff08;Basic Software&#xff0c;BSW&#xff09;的底层&…

【Autosar】学习总结-MCAL

一、简介 MCAL&#xff1a;微控制器抽象层&#xff1b;位于BSW层中的最下层&#xff1b; MCAL细分&#xff0c;可将驱动分为&#xff1a;微控制器驱动、存储器驱动、通信驱动、IO驱动&#xff1a; 二、MCAL的配置&#xff08;EB-Tresos&#xff09; 1.PORT 我理解的PORT&…

Object数据转map类型

最近 因为调用接口 返回数据 原本项目中是用List<Map<String, Object>> a 接收的 等于说我只能获取到 Map m1 a.get(0); 到第一层的数据 m1.get(“HttpCode”)的数据 然后就是objcet的数据了 无法直接获取到 之前在网上找了好多 什么直接转成jsonObject因为格式的…

Javascript Object和Map之间的转换

简单的区分Map和Object Map是ES6退出的一个类型&#xff0c;特点&#xff1a;任何值都可作为属性名 Object特点&#xff1a;属性名只能是字符串(一开始我也不信&#xff0c;测试后才发现的) 代码图片 创建一个map类型 new Map([[key, value],[key1, value1] ])简单的介绍下面…