Autosar MCAL-ICU输入捕获
创始人
2024-01-17 00:13:31
0

文章目录

  • 前言
  • 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,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~

相关内容

热门资讯

结婚典礼感谢致辞 结婚典礼感谢致辞(通用15篇)  在平平淡淡的学习、工作、生活中,要用到致辞的情况还是蛮多的,致辞要...
大鱼海棠配音台词 大鱼海棠配音台词  蛰伏十二年的动画《大鱼海棠》,终于上映了。虽然剧情被很多人吐槽,但美得不像话的画...
小学毕业典礼主持词 小学毕业典礼主持词实用范文  活动对象的不同,主持词的写作风格也会大不一样。在当今中国社会,司仪等是...
篮球赛闭幕词 篮球赛闭幕词(精选15篇)篮球赛闭幕词1各位来宾、同志们:  为期xx天的xxx第二届职工篮球赛,在...
元旦联欢晚会主持词 元旦联欢晚会主持词范文(精选9篇)  主持词分为会议主持词、晚会主持词、活动主持词、婚庆主持词等。在...
大型文艺演出主持词 大型文艺演出主持词  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。在当今中国社...
开学典礼致辞 开学典礼致辞15篇  在日常生活或是工作学习中,大家都经常接触到致辞吧,致辞具有“礼仪性”或“仪式化...
农村婚礼司仪主持词 农村婚礼司仪主持词15篇  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当今不断发展的世界...
如何主持会议参考 如何主持会议范文参考  1.宣布会议开始。会议时间到后,若全体与会人员都已到位(至少重要的与会人员已...
韩剧漂亮男人经典台词 韩剧漂亮男人经典台词  1、答案都是在当事人手里的,不知道人们为什么,明明是自己非常了解的问题,但是...
外公七十大寿祝寿词 外公七十大寿祝寿词  外公七十大寿祝寿词  尊敬的外公、外婆、各位长辈、各位来宾:    大家好!今...
《香瓜七兄弟》经典台词 《香瓜七兄弟》经典台词  1. 阿丽呀,我哪好,我改还不行吗  2. 记不记得上回你尿炕 阿姨来了你...
孙子满月酒爷爷致辞 孙子满月酒爷爷致辞(通用6篇)  无论是身处学校还是步入社会,大家都不可避免地会接触到致辞吧,致辞具...
国庆文艺汇演主持词 国庆文艺汇演主持词  主持词要注意活动对象,针对活动对象写相应的主持词。在当今社会中,主持人在活动中...
中秋晚会主持词开场 中秋晚会主持词开场  主持词是主持人在台上表演的灵魂之所在。在现在的社会生活中,主持人的需求越来越高...
婚礼现场新郎致辞 婚礼现场新郎致辞各位亲朋好友:  大家好!  人生能有几次最难忘、最幸福的时刻,今天我才真正从内心里...
班会主持稿 班会主持稿(15篇)  在生活中,我们越来越需要主持稿,主持稿是主持人于节目进行过程中串联节目的稿件...
幼儿园开学典礼的主持词 幼儿园开学典礼的主持词范文(精选6篇)  根据活动对象的不同,需要设置不同的主持词。在当下这个社会中...
教师节晚会活动主持词 教师节晚会活动主持词(精选10篇)  主持词是主持人在台上表演的灵魂之所在。在当下的中国社会,很多场...
同学聚会的主持词 同学聚会的主持词3篇  中学时代,是一个人一生中最美好的时光。小编为大家整理了同学聚会的主持词3篇,...