Autosar MCAL-ICU输入捕获
文章目录
- 前言
- 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,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~
Autosar MCAL-ICU输入捕获相关推荐
- Autosar MCAL开发必知的“术语”+“缩写”概念
如何使用该博文? ==>您可以将该篇博文当做"字典",遇到疑惑的Autosar"关键字",使用组合键Ctrl+F,快速查找该关键字. 推荐Autosar培 ...
- AUTOSAR MCAL SPI配置
AUTOSAR MCAL SPI AUTOSAT SPI SPI物理层介绍 SPI 在AUTOSAR的配置主要参数 SPI EB配置参数 AUTOSAT SPI 以下内容基于标准AUTOSAR文档以及 ...
- Autosar MCAL MCU配置时钟-基于cfg
文章目录 前言 MCU时钟配置 cfg配置外部晶振 CCU 时钟源的选择 OSC(Oscillator Circuit) OSC的模式: 外部输入时钟模式: 外部晶体/陶瓷谐振模式 Back up时钟 ...
- GD32定时器输入捕获例程
官方的例程 /**\brief configure the GPIO ports\param[in] none\param[out] none\retval none*/ void gpio_conf ...
- STM32输入捕获模式设置并用DMA接收数据
参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...
- 【STM32】输入捕获实验代码详解
文章目录 main.c timer.c timer.h main.c #include "led.h" #include "delay.h" #include ...
- cc2530定时器和捕获比较_STM32学习日志——输入捕获实验(20.06.26)
今天学习的是通用定时器的第三个功能--输入捕获,它的作用是检测到TIMx_CHx的边沿跳变(上升沿或下降沿),即可将当前定时器的存放在捕获/比较寄存器中. 输入捕获滤波器可以通过TIMx_CCMR1的 ...
- STM32寄存器与输入捕获
以下来至原子教程 输入捕获模式可以用来测量脉冲宽度或者测量频率. STM32 的定时器,除了 TIM6 和 TIM7, 其他定时器都有输入捕获功能.STM32 的输入捕获,简单的说就是通过检测 TIM ...
- stm32 输入捕获学习(二)
(本文参考STM32 开发指南 V1.3 -- ALIENTEK 战舰 STM32 开发板库函数教程 ) 1. 实验设计 我们用 TIM5 的通道 1(PA0)来做输入捕获,捕获 PA0 上高电 ...
最新文章
- mysql的字符串函数大全_MySQL的字符串函数大全
- archlinux mariadb躺坑
- OpenCV学习(12) 图像的腐蚀与膨胀(3)
- 行业短信 运营思路_飞信、易信之后 三大运营商要借5G再战微信
- DOS下操作注册表的部分命令
- MaxCompute产品最新进展 -- 从马力到计算力
- 发现Tensorflow
- tensorflow eager 模式下打印dataset中的数据
- [bzoj3694]最短路
- SpringOne 2017重要公告
- Advanced Javascript outlining插件说明
- Epub电子书格式(四)
- 喝酸奶竟然能预防霉菌性阴道炎
- [EKL-踩坑记] —— ES虚拟内存设置
- fzu 1891 升降序列
- python 画老虎
- CList 简单用法
- 刷脸支付条赛道上支付宝遥遥领先
- Linux 远程连接
- 纯CSS实现目录自动编号
热门文章
- mysql performance tuning_Performance Tuning MySQL
- ES8中对字符串补白的方式
- 画一个椭圆c语言程序,画椭圆 - c代码库 - 云代码
- Ubuntu14.04 下 OpenCV2.4.9 编译
- wyAPP苹果APP 营销
- java中outer:的用法
- 查看nginx是否启动成功
- sendgrid html text,包括里面sendgrid鄂麦邮件的内容我的HTML代码
- provide和inject 用法
- java 推流_使用java执行ffmpeg命令进行推流操作