【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) - 外部触发事件(上升沿/下降沿)将当前计数值捕获到专用寄存器 - 用于测量脉冲宽度或周期
c
// 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)
◀─────────────────▶
┌─┐ ┌─┐
│ │ │ │
───────────┘ └───────┘ └─────────
▲ │ │ ▲
│ └───────┘ │
比较值 比较值
特点:
- 谐波含量低,电磁干扰小
- 抗干扰能力强
- 适合电机驱动等高精度应用
c
// 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提供硬件级死区生成:
c
// 死区配置
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的多通道正好可以生成所需的换向序列。
c
// 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)
最基本的模式,使用内部时钟进行周期性计数:
c
// 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)
对外部引脚的脉冲进行计数:
c
// 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可以配置为增量编码器接口,同时捕获脉冲和方向:
c
// 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位定时器,获得更长的计时范围:
c
// 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)
输入捕获用于测量外部事件的时间参数:
c
// 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)
输出比较用于在特定时刻产生预定动作:
c
// 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 GPT12
4.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的高级抽象:
c
#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
c
#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 增量编码器接口
c
#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模块技术规格书