1 ICU原理
ICU模块,即Input Capture Unit(输入捕获单元),在汽车电子控制系统中扮演着重要角色。以下是关于ICU模块的详细解析:
一、ICU模块的功能
ICU模块主要用于以下功能:
信号时间测量:能够精确测量输入信号的时间,如PWM(脉冲宽度调制)信号的周期和占空比。
信号边沿检测:检测输入信号的上升沿或下降沿,并可用于触发中断或事件。
边沿/脉冲计数:对信号的边沿或脉冲进行计数,常用于频率测量或计数应用。
时间戳捕获:在信号边沿发生时捕获时间戳,用于精确的时间同步或分析。
唤醒功能:在某些模式下,ICU可以作为唤醒源,当检测到特定信号时唤醒系统。
autosar中对应的功能选项
边沿/脉冲计数:ICU_MODE_EDGE_COUNTER
信号边沿检测:ICU_MODE_SIGNAL_EDGE_DETECT
信号时间测量:ICU_MODE_SIGNAL_MEASUREMENT
时间戳捕获:ICU_MODE_TIMESTAMP
递增接口:ICU_MODE_INCREMENTAL_INTERFACE
二、ICU模块的配置与应用
在AutoSAR或类似架构中,ICU模块的配置通常涉及以下几个方面:
通道配置:为ICU模块分配特定的输入通道,这些通道可以连接到MCU(微控制器)的引脚或内部信号源。
模式选择:根据应用需求选择适当的模式,如信号测量、边沿检测、边沿/脉冲计数或时间戳捕获。
参数设置:设置相关的参数,如分频器、计数器长度、触发条件等,以确保ICU能够正确捕获和处理信号。
中断配置:根据需要配置中断,以便在信号事件发生时能够及时处理。
三、ICU模块的工作原理
ICU模块的工作原理基于精确的时间测量和事件捕获。当输入信号满足特定条件时(如达到某个阈值、发生边沿变化等),ICU会触发相应的操作,如更新计数器、生成中断等。这些操作允许系统对输入信号进行实时分析和处理。
四、ICU模块的应用场景
ICU模块在汽车电子控制系统中有着广泛的应用场景,如:
发动机控制:用于测量点火信号、燃油喷射信号等的周期和占空比,以优化发动机性能。
变速箱控制:用于捕获换挡信号、转速信号等,以实现精确的换挡控制。
车身控制:用于检测各种传感器信号,如车门开关、安全带状态等,以提高车辆安全性和舒适性。
电源管理:用于监控电池电压、电流等参数,以优化电源分配和使用效率。
2 EB配置以及接口应用
EB配置
配置目标
将P22.11配置为TIM5_CH3占空比捕获
EB配置步骤
1.配置GTM时钟
2.ICU通用配置
3.ICU通道配置
4.TIM_Chanel配置
5.Port配置
1.配置GTM时钟
确认GTM模块输入时钟
配置Cluster0时钟分频以得到输入CMU的时钟源
配置CMU时钟分频(详细内容参考PWM配置章节)
CMU输出CMU_CLK时钟分频,保持默认即可
2.ICU通用配置
3.ICU通道配置
4.TIM_Chanel配置
5.Port配置
API接口
接口函数调用步骤:
信号测量
- 1.Icu_17_TimerIp_Init(&Icu_17_TimerIp_Config);//ICU初始化 Icu_17_TimerIp_Config为EB生成配置结构体
- 2.Icu_17_TimerIp_StartSignalMeasurement();//启动对应ICU通道信号测量功能 其他模式省略此步骤
- 3.Icu_17_TimerIp_GetDutyCycleValues();//获取通道计数值
边沿计数
- 1.Icu_17_TimerIp_Init(&Icu_17_TimerIp_Config);//ICU初始化
- 2.Icu_17_TimerIp_EnableEdgeCount();//启动边沿计数功能
- 3.Icu_17_TimerIp_GetEdgeNumbers()//获取边沿计数值 Icu_17_TimerIp_ResetEdgeCount()//清楚边沿计数值
边沿检测
- 1.Icu_17_TimerIp_Init(&Icu_17_TimerIp_Config);//ICU初始化
- 2.Icu_17_TimerIp_EnableEdgeDetection();//启动边沿检测功能
- 3.SRC_GTMTIM05.B.SRE = 1;//开启对应通道中断
- Icu_17_TimerIp_EnableNotification();//开启中断通知函数
时间戳
- 1.Icu_17_TimerIp_Init(&Icu_17_TimerIp_Config);//ICU初始化
- 2.SRC_GTMTIM05.B.SRE = 1;//开启对应通道中断
- 3.Icu_17_TimerIp_StartTimestamp()//启动时间戳功能
- 4.Icu_17_TimerIp_EnableNotification()//使能中断通知函数
接口名 | 传入参数 | 说明 | 返回参数 | 说明 |
---|---|---|---|---|
Icu_17_TimerIp_GetDutyCycleValues() | uint8 Channel;Icu_17_TimerIp_DutyCycleType *const DutyCycleValues | ICU通道ID;计数buffer(占空比计数值,周期计数值) | void | - |
Icu_17_TimerIp_GetEdgeNumbers() | uint8 Channel | ICU 通道 | Icu_17_TimerIp_EdgeNumberType | 边沿计数值 |
Icu_17_TimerIp_ResetEdgeCount() | uint8 Channel | ICU 通道 | void | - |
3 总结
本文为博主个人学习总结记录,如有不正,欢迎指正