Autosar MCAL-ICU输入捕获

前言

在上一篇文章中介绍了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,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~

  • 11
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
AutoSARAutomotive Open System Architecture)是一种开放式的汽车电子系统架构标准,用于汽车电子控制单元(ECU)软件开发和架构。AutoSAR Update-Bits是AutoSAR架构中用于更新ECU软件的概念。 AutoSAR Update-Bits主要用于在现有的ECU中对软件进行更新和修改。它允许汽车制造商或ECU供应商通过向ECU发送更新数据包来提供新的功能、修复错误或改进现有的软件。这些更新数据包通过AutoSAR Update-Bits的通信机制传输到ECU,并被ECU上的更新管理模块接收和解析。 AutoSAR Update-Bits的更新过程包括以下步骤: 1. 更新数据包准备:汽车制造商或ECU供应商准备包含更新的数据包,并使用AutoSAR的标准规范对其进行打包和编码。 2. 更新数据包传输:更新数据包通过车辆网络,如CAN(Controller Area Network)或FlexRay,传输到目标ECU。 3. 更新管理模块接收:目标ECU上的更新管理模块接收并验证更新数据包的完整性和正确性。 4. 更新数据包解析:更新管理模块将更新数据包解析为可执行代码,并将其存储在ECU的闪存中。 5. 系统重启:ECU完成更新后,它可能需要进行系统重启以使更新生效。 通过使用AutoSAR Update-Bits,汽车制造商和ECU供应商可以在车辆的整个生命周期中对软件进行更新和改进,而无需更换整个ECU。这不仅提供了更灵活和可持续的软件开发和维护方式,还可以显著降低生产成本和减少故障修复时间。 总之,AutoSAR Update-Bits是AutoSAR架构中用于更新ECU软件的机制,它使汽车制造商和ECU供应商能够通过传输和解析更新数据包来增强车辆的功能和安全性,提高软件的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值