【IF-14】CCU6与GPT12 - AURIX TC3xx定时器模块深度解析
系列导航
| 序号 | 标题 | 状态 |
|---|---|---|
| IF-01 | AURIX TC3xx开篇 - 汽车MCU的终极形态 | ✅ 已发布 |
| IF-02 | TriCore内核架构 - 编程模型与寄存器体系 | ✅ 已发布 |
| IF-03 | TriCore任务切换 - CSA机制深度解析 | ✅ 已发布 |
| IF-04 | TriCore中断系统 - 从硬件到AUTOSAR OS的完整桥梁 | ✅ 已发布 |
| IF-05 | 总线互连与桥接 - SRI/FPI体系 | ✅ 已发布 |
| IF-06 | 存储映射与Memory Map | ✅ 已发布 |
| IF-07 | Flash与NVM子系统 | ✅ 已发布 |
| IF-08 | 时钟系统 | ✅ 已发布 |
| IF-09 | DMA直接内存访问 | ✅ 已发布 |
| IF-10 | SCU系统控制 | ✅ 已发布 |
| IF-11 | 电源管理PMS | ✅ 已发布 |
| IF-12 | 外设桥与端口 | ✅ 已发布 |
| IF-13 | GTM通用定时器 | ✅ 已发布 |
| IF-14 | CCU6与GPT12 | 📍本文 |
| AP-11 | OTA更新机制 | ⏳ 待发布 |
一、引言
在AURIX TC3xx系列微控制器的外设生态中,定时器模块是实现实时控制的核心基石。前文我们详细剖析了GTM(通用定时器模块),了解到它是一个高度专业化的定时器阵列,适合复杂的多通道PWM生成和时序控制场景。然而,GTM的复杂性也意味着较高的学习成本和配置开销。
本文将聚焦于AURIX提供的另外两个定时器模块:CCU6(Capture/Compare Unit 6)和GPT12(General Purpose Timer 12)。这两个模块虽然不如GTM那样功能强大,但胜在简单实用,在电机控制、位置传感、通信时序等典型应用场景中扮演着不可替代的角色。
CCU6专为电机控制应用设计,提供了4个独立的16位捕获/比较通道,配合死区插入和故障快速关断机制,是BLDC和PMSM电机驱动的理想选择。而GPT12则是一个更加通用的定时器模块,6个16位定时器单元可以灵活组合,支持定时、计数、脉冲测量等多种工作模式,是实现通用时序控制的首选。
通过本文的系统学习,你将掌握这两个定时器模块的架构原理、寄存器配置和编程方法,为后续的电机控制开发和时序系统设计打下坚实基础。
二、CCU6模块架构深度解析
2.1 模块概述与定位
Figure 155 CCU6 Block Diagram
CCU6(Capture/Compare Unit 6)是英飞凌为AURIX系列芯片设计的高性能捕获比较单元,主要面向交流电机驱动控制应用。与GTM相比,CCU6的定位更加专注于单芯片多通道PWM生成和故障快速响应两个核心能力。
CCU6的核心特性包括:
| 特性 | 说明 |
|---|---|
| 定时基准 | 16位定时器T12和T13,可独立或联动工作 |
| 捕获/比较通道 | T12包含3个通道(CC0/CC1/CC2),T13包含1个通道(CC3) |
| PWM模式 | 支持中心对齐和边缘对齐PWM |
| 分辨率 | 最高可达15ns的占空比分辨率(@80MHz) |
| 故障输入 | 多路故障输入,支持单周期关断 |
| 死区插入 | 硬件级死区生成,防止功率器件短路 |
从应用角度看,CCU6最适合以下场景: -无刷直流电机(BLDC)控制:霍尔传感器或反电动势(BEMF)检测换向 -永磁同步电机(PMSM)控制:FOC磁场定向控制 -功率转换:DC-DC变换器、逆变器 -多轴伺服驱动:多CCU6核同步触发
2.2 T12定时器块详解
Figure 163 T12 Channel Comparators
Figure 157 Timer T12 Block Overview
T12是CCU6的核心定时基准,为3个捕获/比较通道提供计数服务。
2.2.1 定时器结构
┌─────────────────────────────────────────────────────────────────┐ │ T12 定时器块 │ ├─────────────────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ CC0 │ │ CC1 │ │ CC2 │ │ │ │ 捕获/比较 │ │ 捕获/比较 │ │ 捕获/比较 │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ └──────────────────┼──────────────────┘ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 比较单元 │ │ │ │ CM0/CM1/CM2 │ │ │ └────────┬────────┘ │ │ │ │ │ ┌──────────────────┼──────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ 周期寄存器 │ │ 周期寄存器 │ │ 周期寄存器 │ │ │ │ T12PR │ │ T12PR │ │ T12PR │ │ │ └────────────┘ └────────────┘ └────────────┘ │ │ ▲ │ │ │ │ │ ┌────────┴────────┐ │ │ │ 16位计数器 │ │ │ │ T12 │ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘2.2.2 计数模式
T12支持三种基本的计数模式:
连续模式(Continuous Mode)- 计数器从0向上计数到周期值,然后自动重装载继续计数 - 适合产生周期性PWM波形 - 计数器溢出时可触发中断
单次模式(Single Shot Mode)- 计数器从0计数到周期值后停止 - 需要软件重新触发启动 - 适合产生单脉冲或测量外部信号
捕获模式(Capture Mode)- 外部触发事件(上升沿/下降沿)将当前计数值捕获到专用寄存器 - 用于测量脉冲宽度或周期
// T12计数模式配置示例 void CCU6_T12_Config(void) { // 选择计数模式 CCU6_MODULE.T12CON.B.T12CLK = 0x02; // f_T12 = f_CCU6 / 4 // 连续计数模式 CCU6_MODULE.T12CON.B.T12SEL = 0; // 使用内部时钟 // 设置周期值 (16位分辨率) CCU6_MODULE.T12PR.B.T12PV = 20000; // 20ms周期 @1MHz // 使能周期中断 CCU6_MODULE.T12IEN.B.ENT12PM = 1; // Period match interrupt enable // 启动定时器 CCU6_MODULE.T12CON.B.T12R = 1; // T12 run bit }2.3 T13定时器块
Figure 183 T13 Compare Operation
Figure 178 T13 Counter Logic
T13是CCU6的辅助定时器,主要功能包括:
- 为T12提供同步触发信号
- 独立的比较通道(CC3)
- 死区时钟基准
T13的工作原理与T12类似,但通道数量减少为1个。T13的一个独特应用是作为T12的触发源,实现多相PWM的相位同步。
┌─────────────────────────────────────────────────────────────────┐ │ T13 定时器块 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────┐ ┌────────────┐ │ │ │ CC3 │ │ T12 │ │ │ │ 比较输出 │───触发──────────▶│ 同步启动 │ │ │ └────────────┘ └────────────┘ │ │ │ │ ┌────────────────────────────────────────┐ │ │ │ 16位计数器 T13 │ │ │ └────────────────────────────────────────┘ │ │ │ │ 用途: │ │ - 生成辅助PWM通道 │ │ - 为T12提供同步触发 │ │ - 死区时间基准 │ └─────────────────────────────────────────────────────────────────┘2.4 PWM生成机制
Figure 173 Capture Mode 1
Figure 170 Dead-Time Generation
CCU6的PWM生成能力是其最核心的应用场景,支持两种PWM对齐方式:
2.4.1 边缘对齐PWM(Edge-Aligned PWM)
边缘对齐PWM的计数器从0向上计数到周期值,在比较匹配点翻转输出电平:
周期(Period) ◀─────────────────▶ ┌─────────────────┐ │ │ ────┘ └──── ▲ ▲ │ │ 比较值(CMP) 比较值(CMP) 特点: - 配置简单,计算直观 - 频率恒定,占空比可变 - 适合单极性控制2.4.2 中心对齐PWM(Center-Aligned PWM)
中心对齐PWM的计数器从0向上计数到周期值,然后反向递减计数,形成对称波形:
周期(Period) ◀─────────────────▶ ┌─┐ ┌─┐ │ │ │ │ ───────────┘ └───────┘ └───────── ▲ │ │ ▲ │ └───────┘ │ 比较值 比较值 特点: - 谐波含量低,电磁干扰小 - 抗干扰能力强 - 适合电机驱动等高精度应用// CCU6 PWM配置完整示例 void CCU6_PWM_Init(void) { // ==================== 模块使能 ==================== CCU6_MODULE.CC6MC.B.MCM = 0x01; // 通道0,1为比较模式 // ==================== T12配置 ==================== CCU6_MODULE.T12.B.T12CV = 0; // 清零计数器 // 周期配置 - 20kHz PWM @100MHz f_CCU6 CCU6_MODULE.T12PR.B.T12PV = 5000; // 100MHz / 8分频 / 5000 = 2.5kHz? // 实际: 100MHz / 8 = 12.5MHz, 12.5MHz / 5000 = 2.5kHz PWM频率 // ==================== 通道配置 ==================== // 通道0 - PWM输出 CCU6_MODULE.CH.CC0 = 2500; // 50%占空比 // 通道1 - PWM输出 CCU6_MODULE.CH.CC1 = 1250; // 25%占空比 // ==================== PWM模式选择 ==================== // 中心对齐模式 CCU6_MODULE.T12CON.B.T12预分频 = 3; // 8分频 CCU6_MODULE.T12CON.B.T12DIR = 0; // 向上计数 // 使能中心对齐模式 CCU6_MODULE.T12CON.B.T12预分频 = 1; // 需要根据实际寄存器配置 // ==================== 输出使能 ==================== CCU6_MODULE.MODCTR.B.STE12 = 1; // 启动T12 }2.5 故障处理机制
Figure 188 Trap Logic Block Diagram
CCU6的故障处理机制是其区别于普通定时器的重要特性,也是汽车功能安全应用的关键保障。
2.5.1 故障输入路径
CCU6支持多个故障输入引脚,可以接收来自系统各个角落的安全信号:
| 故障输入 | 典型来源 | 响应时间 |
|---|---|---|
| CTRAP0 | 过流检测比较器 | <1个时钟周期 |
| CTRAP1 | 过温保护 | <1个时钟周期 |
| CTRAP2 | 硬件看门狗 | <1个时钟周期 |
| CTRAP3 | 软件触发 | <1个时钟周期 |
2.5.2 快速关断时序
当检测到故障信号时,CCU6可以在单时钟周期内将PWM输出切换到安全状态:
正常状态: ┌─────────────┐ │ │ PWM_OUT ┘ └──────────── ▲ │ 故障信号 │ ▼ ┌──────┐ 安全状态: │ SAFE │ (强制关断/强制低) └──────┘2.5.3 死区插入
死区插入是防止功率器件短路的必要措施。CCU6提供硬件级死区生成:
// 死区配置 void CCU6_DeadTime_Init(void) { // 使能死区功能 CCU6_MODULE.DTC.B.DTE0 = 1; // 通道0死区使能 CCU6_MODULE.DTC.B.DTE1 = 1; // 通道1死区使能 CCU6_MODULE.DTC.B.DTE2 = 1; // 通道2死区使能 // 配置死区时间 // 死区时钟周期数 CCU6_MODULE.DTC.B.DT = 100; // 100 * T_deadtime_clock // 死区时钟选择 CCU6_MODULE.DTC.B.DTS = 0; // 使用CCU6时钟 } // 死区时序示意图 // ┌──────────────────────────────────────┐ // PWM_H │ │▲ // └──────────────────────────────────────┘ // ▲死区时间▲ // ┌──────────────────────────────────────┘ // PWM_L │ │▼ // └──────────────────────────────────────┘2.6 BLDC电机控制应用
Figure 195 BLDC Motor Control
Figure 191 Hall Pattern Evaluation
CCU6最典型的应用场景是无刷直流电机(BLDC)控制。BLDC需要6步换向控制,CCU6的多通道正好可以生成所需的换向序列。
// BLDC霍尔传感器换向控制 void CCU6_BLDC_Commutation(void) { uint8_t hall_position; // 读取霍尔传感器位置 hall_position = Read_Hall_Sensor(); // 根据霍尔位置查表确定换向序列 switch(hall_position) { case 1: // Hall: 001 Set_PWM_State(CCU6_CH0, CCU6_CH1, OFF); // A+ B- break; case 2: // Hall: 010 Set_PWM_State(OFF, CCU6_CH1, CCU6_CH2); // A- C+ break; case 3: // Hall: 011 Set_PWM_State(CCU6_CH0, OFF, CCU6_CH2); // B+ C- break; case 4: // Hall: 100 Set_PWM_State(CCU6_CH0, CCU6_CH1, OFF); // B- A+ break; case 5: // Hall: 101 Set_PWM_State(OFF, CCU6_CH1, CCU6_CH2); // C- B+ break; case 6: // Hall: 110 Set_PWM_State(CCU6_CH0, OFF, CCU6_CH2); // C+ A- break; } } // 换向时序图(6步换向) // Step 1: A+ B- → Step 2: A- C+ → Step 3: B+ C- → // Step 4: B- A+ → Step 5: C- B+ → Step 6: C+ A-三、GPT12模块深度解析
3.1 模块定位与特点
Figure 201 GPT12 Toggle Latch
GPT12(General Purpose Timer 12)是AURIX提供的一个通用定时器模块,与CCU6的专用定位不同,GPT12更加灵活多变,适合各种通用的时序控制需求。
GPT12的核心组成:
| 组件 | 数量 | 位宽 | 说明 |
|---|---|---|---|
| GPT1块 | 3个定时器 | 16位 | T2、T3、T4,可级联为32位 |
| GPT2块 | 3个定时器 | 16位 | T5、T6、T7,可级联为32位 |
| 预分频器 | 2个 | - | 分别为GPT1和GPT2提供可编程分频 |
3.2 GPT1块架构
Figure 203 GPT12 Core Timer Modes
GPT1块包含T2、T3、T4三个定时器,它们可以独立工作,也可以级联形成32位定时器。
┌─────────────────────────────────────────────────────────────────┐ │ GPT1 定时器块 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ │ │ │ 预分频 │ │ │ │ GPT1 │ ──────┬─────────────┬─────────────┐ │ │ │ 分频器 │ │ │ │ │ │ └─────────┘ ▼ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ T2 │ │ T3 │ │ T4 │ │ │ │ 16位 │ │ 16位 │ │ 16位 │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ 计数脉冲│ │ │ │ │ │ ┌─────┴─────┐ │ │ │ │ │ 32位级联 │ │ │ │ │ │ T3:T4 │ │ │ │ │ └───────────┘ │ │ │ │ │ │ │ └───────────────────────┘ │ │ │ │ │ T2用作门控 │ └─────────────────────────────────────────────────────────────────┘3.3 GPT2块架构
GPT2块的结构与GPT1类似,包含T5、T6、T7三个定时器。T6和T7可以级联为32位定时器。
┌─────────────────────────────────────────────────────────────────┐ │ GPT2 定时器块 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ │ │ │ 预分频 │ │ │ │ GPT2 │ ──────────────┬─────────────┐ │ │ │ 分频器 │ │ │ │ │ └─────────┘ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ │ │ │ T5 │ │ T6 │ │ │ │ 16位 │ │ 16位 │ │ │ └────┬────┘ └────┬────┘ │ │ │ │ │ │ 计数脉冲│ │ │ │ │ ┌─────┴─────┐ │ │ │ │ 32位级联 │ │ │ │ │ T6:T7 │ │ │ │ └───────────┘ │ │ │ │ └───────────────────────────┴─────────────────────────────────────┘3.4 工作模式详解
Figure 204-205 GPT12 Counter/Incremental
GPT12的每个定时器都支持多种工作模式,通过模式选择位进行配置。
3.4.1 定时器模式(Timer Mode)
最基本的模式,使用内部时钟进行周期性计数:
// GPT12定时器模式配置 void GPT12_Timer_Init(void) { // 启用GPT12模块时钟 SCU_CCUCON0.B.GPT1EN = 1; // 使能GPT1 SCU_CCUCON0.B.GPT2EN = 1; // 使能GPT2 // 配置T3为定时器模式 GPT12_MODULE.T3CON.B.T3M = 0x00; // 定时器模式 // 配置预分频 - f_T3 = f_GPT1 / (预分频+1) GPT12_MODULE.T3CON.B.T3I = 0x05; // 64分频 // 设置重装载值 GPT12_MODULE.T3.B.T3 = 0x0000; GPT12_MODULE.T3PR.B.T3PV = 10000; // 10ms周期 @10MHz // 使能定时器 GPT12_MODULE.T3CON.B.T3R = 1; // T3 run }3.4.2 计数器模式(Counter Mode)
对外部引脚的脉冲进行计数:
// GPT12计数器模式配置 void GPT12_Counter_Init(void) { // 配置T2为计数器模式 GPT12_MODULE.T2CON.B.T2M = 0x01; // 计数器模式 // 选择外部计数输入 GPT12_MODULE.T2CON.B.T2EI = 1; // 外部输入使能 // 选择计数边沿 GPT12_MODULE.T2CON.B.T2EDGE = 0; // 上升沿计数 // 清除计数器 GPT12_MODULE.T2.B.T2 = 0; // 启动计数 GPT12_MODULE.T2CON.B.T2R = 1; }3.4.3 增量编码器模式(Incremental Encoder Mode)
T2和T4可以配置为增量编码器接口,同时捕获脉冲和方向:
// GPT12增量编码器模式 void GPT12_Encoder_Init(void) { // 配置T4为增量编码器模式 GPT12_MODULE.T4CON.B.T4M = 0x03; // 增量编码器模式 // 配置T3为编码器的时钟输入 GPT12_MODULE.T3CON.B.T3M = 0x02; // 门控定时器模式 GPT12_MODULE.T3CON.B.T3SRC = 1; // T3使用T4输入 // 配置方向检测 GPT12_MODULE.T4CON.B.T4DIR = 1; // 自动方向检测 // 清除计数器 GPT12_MODULE.T4.B.T4 = 0; // 启动 GPT12_MODULE.T4CON.B.T4R = 1; GPT12_MODULE.T3CON.B.T3R = 1; } // 增量编码器信号时序 // A: _|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_ // B: _|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾ // 方向判断: A超前B → 正转, B超前A → 反转3.4.4 级联模式(Cascade Mode)
两个16位定时器级联为32位定时器,获得更长的计时范围:
// GPT12级联模式 - T3:T4组成32位定时器 void GPT12_Cascade_Init(void) { // 配置T4为低位定时器 GPT12_MODULE.T4CON.B.T4M = 0x00; // 定时器模式 GPT12_MODULE.T4CON.B.T4I = 0x00; // 预分频 // 配置T3为高位定时器,使用T4溢出作为时钟 GPT12_MODULE.T3CON.B.T3M = 0x02; // 门控定时器模式 GPT12_MODULE.T3CON.B.T3SRC = 1; // T3使用T4溢出脉冲 // 清除计数器 GPT12_MODULE.T4.B.T4 = 0; GPT12_MODULE.T3.B.T3 = 0; // 启动级联定时器 GPT12_MODULE.T4CON.B.T4R = 1; GPT12_MODULE.T3CON.B.T3R = 1; // 读取32位计数值 uint32_t count_32bit = ((uint32_t)GPT12_MODULE.T3.B.T3 << 16) | GPT12_MODULE.T4.B.T4; }3.5 输入捕获与输出比较
Figure 209-210 GPT12 Auxiliary Timer
3.5.1 输入捕获(Input Capture)
输入捕获用于测量外部事件的时间参数:
// GPT12输入捕获配置 void GPT12_InputCapture_Init(void) { // 配置T2为输入捕获模式 GPT12_MODULE.T2CON.B.T2M = 0x04; // 捕获模式 // 选择捕获边沿 GPT12_MODULE.T2CON.B.T2EDGE = 0; // 上升沿捕获 // 清除捕获寄存器 GPT12_MODULE.CAPREL.B.CAPREL = 0; // 启动捕获 GPT12_MODULE.T2CON.B.T2R = 1; // 在中断中读取捕获值 uint16_t capture_value = GPT12_MODULE.CAPREL.B.CAPREL; } // 捕获时序 // 外部信号: _|‾|_____ // 捕获时刻: ▲ // 捕获值: 计数器当前值3.5.2 输出比较(Output Compare)
输出比较用于在特定时刻产生预定动作:
// GPT12输出比较配置 void GPT12_OutputCompare_Init(void) { // 配置T6为输出比较模式 GPT12_MODULE.T6CON.B.T6M = 0x01; // 比较模式 // 设置比较值 GPT12_MODULE.T6.B.T6 = 1000; // 1ms后触发 // 配置比较输出行为 GPT12_MODULE.T6CON.B.T6OE = 1; // 输出使能 GPT12_MODULE.T6CON.B.T6SC = 1; // 比较匹配后计数器清零 // 启动比较器 GPT12_MODULE.T6CON.B.T6R = 1; }四、外设对比与选型指南
4.1 CCU6 vs GPT12 vs GTM
AURIX提供了三个层次的定时器模块,它们各有特点,适用于不同场景:
| 特性 | CCU6 | GPT12 | GTM |
|---|---|---|---|
| 复杂度 | 中等 | 简单 | 高 |
| 通道数 | 4个16位 | 6个16位 | 最多16个16位 |
| PWM分辨率 | 15ns | 取决于时钟 | 最高3.125ns |
| 死区插入 | 硬件支持 | 需软件实现 | 硬件支持 |
| 故障响应 | 单周期关断 | 无 | 多周期 |
| 级联能力 | T12+T13 | T3+T4, T6+T7 | 模块级联 |
| 典型应用 | 电机驱动 | 通用时序 | 复杂PWM |
| 学习成本 | 中等 | 低 | 高 |
4.2 选型决策树
┌─────────────────────────────────────────────────────────────────┐ │ 定时器模块选型决策 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ 需要多少PWM通道? │ ┌──────────────────┼──────────────────┐ │ │ │ 1-4通道 5-16通道 >16通道 │ │ │ ▼ ▼ ▼ CCU6合适? GTM更合适? 必须用GTM │ ┌─────┴─────┐ │ │ 电机驱动? 通用时序 │ │ ▼ ▼ CCU6 GPT124.3 资源冲突注意事项
在实际项目中,需要注意CCU6和GPT12模块与其他外设的资源共享问题:
时钟资源共享:- GPT12的时钟源来自SCU的CCUCON寄存器配置 - CCU6的时钟源独立于GPT12
引脚复用:- CCU6和GPT12的引脚可能与其他外设(如SPI、UART)复用 - 需要通过PORT模块正确配置引脚功能
五、iLLD驱动实战
5.1 CCU6 iLLD API
AURIX的iLLD(Interrupt Low-Level Driver)提供了对CCU6的高级抽象:
#include "IfxCcu6_Timer.h" // CCU6 PWM实例初始化 IfxCcu6_Timer pwm; IfxCcu6_Timer_Config pwmConfig; // 初始化配置 IfxCcu6_Timer_initConfig(&pwmConfig, &MODULE_CCU60); // 配置PWM参数 pwmConfig.timer = IfxCcu6_Timer_T12; // 使用T12 pwmConfig.period = 20000; // 20ms周期 pwmConfig.dutyCycle = 1500; // 1.5ms脉宽 pwmConfig.dutyCycleMode = IfxCcu6_Timer_DutyCycleMode_centerAligned; // 中心对齐 pwmConfig.pin.outputPin = &IfxCcu60_P2_0_OUT00; // 输出引脚 pwmConfig.pin.outputMode = IfxPort_OutputMode_pushPull; pwmConfig.pin.outputDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1; // 初始化PWM模块 IfxCcu6_Timer_init(&pwm, &pwmConfig); // 启动PWM IfxCcu6_Timer_start(&pwm); // 动态调整占空比 IfxCcu6_Timer_updateDutyCycle(&pwm, 2000); // 更新到2ms脉宽5.2 GPT12 iLLD API
#include "IfxGpt12_Timer.h" // GPT12定时器实例 IfxGpt12_Timer timer; IfxGpt12_Timer_Config timerConfig; // 初始化配置 IfxGpt12_Timer_initConfig(&timerConfig, &MODULE_GPT12); // 配置定时器参数 timerConfig.timer = IfxGpt12_Timer_T3; // 使用T3 timerConfig.mode = IfxGpt12_Timer_Mode_timer; // 定时器模式 timerConfig.prescaler = IfxGpt12_Timer_Prescaler_64; // 64分频 timerConfig.period = 10000; // 10ms周期 // 初始化定时器 IfxGpt12_Timer_init(&timer, &timerConfig); // 启动定时器 IfxGpt12_Timer_run(&timer); // 读取计数值 uint32_t count = IfxGpt12_Timer_getValue(&timer); // 停止定时器 IfxGpt12_Timer_stop(&timer);5.3 增量编码器接口
#include "IfxGpt12_IncrEncoder.h" // 增量编码器实例 IfxGpt12_IncrEncoder encoder; IfxGpt12_IncrEncoder_Config encoderConfig; // 初始化配置 IfxGpt12_IncrEncoder_initConfig(&encoderConfig, &MODULE_GPT12); // 配置编码器参数 encoderConfig.pins.a = &IfxGpt12_P02_8_IN; encoderConfig.pins.b = &IfxGpt12_P02_9_IN; encoderConfig.resolution = 4096; // 编码器分辨率 encoderConfig.direction = IfxGpt12_IncrEncoder_Direction_normal; // 初始化编码器 IfxGpt12_IncrEncoder_init(&encoder, &encoderConfig); // 读取位置 int32_t position = IfxGpt12_IncrEncoder_getPosition(&encoder); // 读取速度 float speed = IfxGpt12_IncrEncoder_getSpeed(&encoder); // 清除位置 IfxGpt12_IncrEncoder_resetPosition(&encoder);六、总结与展望
本文系统剖析了AURIX TC3xx的CCU6和GPT12两个定时器模块,从架构原理到编程实践,从理论分析到代码示例,力求呈现这两个模块的完整技术面貌。
核心要点回顾:
CCU6是专为电机控制设计的捕获比较单元,4通道16位定时器配合死区插入和故障快速关断,是BLDC和PMSM驱动的理想选择
GPT12是通用定时器模块,6个16位定时器单元灵活组合,支持定时、计数、编码器等多种工作模式
选型时应根据通道数量、PWM精度、故障响应速度等因素综合考虑
iLLD驱动提供了统一的高级API,大大简化了外设配置过程
在后续的系列文章中,我们将继续探索AURIX的其他外设模块,包括通信接口、模拟外设等,敬请期待。
相关资料:
- 英飞凌AURIX TC3xx用户手册
- AURIX iLLD驱动库文档
- CCU6模块技术规格书
- GPT12模块技术规格书