输入捕获 / 输出比较单元 6 (CCU6) 英飞凌 XC800 系列单片机
写在前面 本篇内容为英飞凌科技有限公司 (Infineon Technologies CO., LTD.) 的 XC800 系列单片机的基础篇之一 如无特别说明, 所指的产品为 XC800 系列单片机中的首款型号 :XC866 由于后续芯片会有更多的改进 / 增加措施, 如需要关注其它产品, 需要再结合相应的产品数据手册 (Data Sheet) 和用户手册 (User Manual)! 由于版本更新等原因, 可能会出现各版本间的资料说法有略微差异, 请以英飞凌网站公布的最新英文版本的产品数据手册 (Data Sheet) 和用户手册 (User Manual) 为准! Page 2
资源简介 CCU6 单元中有两个独立的计数器 :T12 和 T13, 可被用来产生脉宽调制 (PWM) 信号, 尤其适用于控制交流电机的应用场合 CCU6 支持用于块交换和多相电机的专用控制模式 除了适合电机控制以外,CCU6 单元还可以单独用作输入捕捉和输出比较的应用 Page 3
定时器 T12 特性 3 路捕获 / 比较通道, 每路可用作捕获或比较通道 支持产生三相 PWM(6 路输出, 对应上桥臂或下桥臂开关 ) 16 位精度, 最大计数频率 = 外设时钟频率 单通道死区时间控制, 避免功率级短路 同步刷新 T12/T13 寄存器 产生中间对齐和边缘对齐 PWM 支持单次模式 支持多中断请求源 类磁滞控制模式 Page 4
定时器 T13 特性 单一比较通道, 单输出 16 位精度, 最大计数频率 = 外设时钟频率 可与 T12 同步 周期匹配和比较匹配, 产生中断 支持单次模式 Page 5
附加特性 实现无刷直流驱动电机的块交换功能 利用霍尔序列进行位置检测 用于块交换的自动转速测量 综合错误处理 通过外部信号 ( CTRAP ) 快速紧急终止, 无需 CPU 干预 用于多通道交流驱动的控制模式 输出有效电平可选, 与功率级适配 Page 6
结构方框图 地址译码器 T12 通道 0 通道 1 比较 1 1 死区时间控制 多通道控制 trap 控制 时钟输入 启动 通道 2 1 中断控制 T13 通道 3 compare 1 3+3 2 2 2 3 1 捕获 / 比较输入 / 输出选择 端口控制 Page 7
用于电机控制的结构图 定时器 T12 时钟分频器 (1 ~128 ) 16 位定时器 T12, 有捕获 / 比较两种模式 在比较模式下有边沿对齐和中心对齐两种方式 Input F CPU Control Period Period Reg. Reg. CT1P CT1P Offset Reg. CT1OF Compare Timer 16- bit 死区时间控制器, 防止驱动电路短路 在无刷直流电机模式时作为霍尔输入滤波器 Mode CC Channel 0 CC0 CC Channel 1 CC1 CC Channel 2 CC2 三个定时器 T12 捕获 / 比较寄存器 Port Control Logic 紧急停止输入端 CTRAP CC0 COUT0 CC1 COUT1 CC2 COUT2 主 / 被动态电平控制 定时器 T13 时钟分频器 ( 1~128 ) Input F CPU Control 16 位定时器 T13, 只能工作在比较模式 主要用于调制的场合 Compare Timer 10/16 bit Period Period Reg. Reg. deadtime Control 无刷直流电机块传送控制 Burst Mode Comp Comp Reg. Reg. CMP2 CMP2 Block Commutation Control 定时器单次模式 COUT3 CCPOS0 CCPOS1 CCPOS2 霍尔输入端 定时器 T13 比较输出 Page 8
T12 功能介绍 16 位定时器 T12, 带有映射寄存器 3 通道寄存器并带有映射寄存器 比较模式 边沿 / 中心对齐方式 映射传输时, 映射寄存器中的内容传送到实际工作寄存器 输出引脚的状态根据比较结果进行翻转 占空比可由 0~100% 进行调节 捕获模式 定时器 T12 的捕获值可由通道寄存器读出 可用于脉冲宽度的测量等领域 Page 9
T12 结构框图 = 1? 1- 匹配 ( 中心对齐模式 ) = 0? 0- 匹配 ( 边沿对齐模式 ) =? 周期 - 匹配 16 T12PR T12PS =? 比较 - 匹配 周期值映射传输 比较值映射传输 16 CC6xR CC6xSR 在捕获模式下,T12 的值复制到 CAPCOM 的相应寄存器中 由 MSEL6x 的位域进行控制 16 T12 计数 16 Bit T12clk 预分频 1: N f per N=1,2,4,8,16,32,64,128,256;x=0,1,2 Page 10
T12 映射传送 所有需要实时更新的特殊功能寄存器都设有映射寄存器 软件的访问和正在执行功能的硬件隔离 所有情况下都可保证安全运行 可实现 0~100% 占空比的 PWM 输出 硬件事件或软件位控制映射传送 软件写入 映射寄存器 硬件事件或软件位控制 加入映射传送的好处 : 可保证三路通道的比较值可同时被更新 工作寄存器 至硬件 Page 11
T12 比较模式 中心对齐方式 : T12 周期值 周期匹配 CC6x 比较值 比较匹配 0 匹配 T12 周期时间 Page 12
T12 比较模式 ( 续 ) 边沿对齐方式 : T12 周期值 周期匹配 CC6x 比较值 比较匹配 0 匹配 T12 周期时间 Page 13
利用 T12 产生 PWM 波 中心对齐方式 : Page 14
利用 T12 产生 PWM 波 ( 续 ) 边沿对齐方式 : Page 15
T13 比较模式 T13 只能工作在比较模式下, 且计数器只能工作在增计数方式 ( 和 T12 的边沿对齐方式相似 ), 只有一路比较输出通道 其结构如下图所示 = 0? 0- 匹配 =? 周期匹配 16 =? 比较匹配 T13 映射传输 16 16 T13 计数寄存器 16 Bit T13clk 预分频 1: N f per N=1,2,4,8,16,32,64,128,256 Page 16
T12 捕获模式 捕获模式下, 由位域 MSEL6x 选择工作方式 MSEL6x=01xx B 时, 工作在多输入捕获方式 MSEL6x=101x B 或 11xx B 时, 工作在多输入捕获方式 可选择引脚 CC6x 或 CCPOSx 的上升沿和 / 或下降沿作为捕获事件 捕获事件发生后, 将定时器 T12 的内容传送至寄存器 CC6xR 和 / 或 CC6xSR 中 CCPOS0 CC60R CC60SR Page 17
死区时间产生 死区时间功能的使用, 避免了在互补输出时, 避免上下管被同时导通, 防止外加功率器件的损坏 每路通道都可使用各自独立的 8 位死区时间计数器 (DTM) 来产生死区时间 每个通道的 DTM 值可以独立设置 DTM 位域的值决定了所选通道的死区时间的长短 Page 18
死区时间产生 ( 续 ) 死区时间产生示意图 : Page 19
死区时间产生 ( 续 ) 死区时间计数器内部结构图 : 死区时间计数器 死区时间值 CC 6 xst 各个位 值 的变化触发 ( 8 位 ) 相应的死区时间计数器开始计数 DTM 8 通道 2 8 通道 1 8 通道 0 DTE 0 与门 ( 仅通道 0) DTC 0_ 1o 6 位减计数器 T12clk =0 =1 DTC 1_o DTC 2_o DTC 0_o Page 20
多通道模式 多通道模式允许仅使用一条指令, 同时对 6 个输出通道的输出进行调制 控制寄存器 MCMP 中的位用来选择有效的输出通道 对 MCMP 中值的更新可以选择和 T12 增计数时的 0- 匹配以及 T13 的 0- 匹配进行同步, 由映射寄存器向 MCMP 进行传输 有效的硬件请求源有 : T12 或 T13 的周期匹配 ; T12 减计数时的 1- 匹配 ; T12 增计数时的 0- 匹配 ; T12 的比较匹配 ; 正确的霍尔事件 ; Page 21
多通道模式 ( 续 ) 多通道模式结构图 : 正确的霍尔事件 T13 周期匹配 SW 选择 软件写入 6 MCMPS T12 周期匹配 T12 0- 匹配 T12 1- 匹配 或门 R 与门 由 SW 申请对 MCMP 进行更新 (STRMCM = 1) 硬件同步事件无操作 T12 0- 匹配 T13 0- 匹配直接有效 MCMP 6 至调制选择 SW 同步 如果检测到错误的霍尔状态, 由 IDLE 控制停止调制输出 IDLE Page 22
霍尔序列采样 在每个正确的霍尔事件发生时, 新的霍尔状态及其相关的输出状态被装载 对霍尔状态 (CCPOSx) 的采样由定时器 T12 的输入时钟来控制 死区事件计数器 DTC0(8 位 ) 可被用来作为硬件噪声滤波器 硬件噪声滤波的实现 : 检测到霍尔输入信号的跳变沿后, 通道 0 的死区时间计数器被重装载, 此时不对霍尔状态进行采样, 以避开可能的干扰信号 当死区时间计数器计数到 1 后, 霍尔状态被锁存 CCPOSx 引脚上的状态被采样并和当前霍尔状态及下一个预期的霍尔状态进行比较, 以判断其正确性 当 CCPOSx 引脚上的状态和当前状态相同时, 不产生任何动作 Page 23
霍尔序列采样 ( 续 ) 当 CCPOSx 引脚上的状态和下一个预期的霍尔状态相同时,CHE 位被置位 (=1), 并引起下列动作 : 进行映射传输 ; 产生中断 ; 复位定时器 T12, 以进行速度测量 当 CCPOSx 引脚上的状态和当前及预期的霍尔状态不相同,WHE 被置位 (=1); 并引起下列动作 : 产生中断 ; 进入 IDLE 状态, 调制输出被禁止 Page 24
霍尔序列采样 ( 续 ) 硬件采样触发源有 : 输入 CCPOSx(x=0~2) 的任意升降沿 T13 比较 - 匹配 T13 周期 - 匹配 T12 周期 - 匹配 ( 递增计数 ) T12 的 1- 匹配 ( 递减计数 ) T12 通道 0 比较 - 匹配 ( 递增计数 ) T12 通道 0 比较 - 匹配 ( 递减计数 ) Page 25
霍尔传感器模式 由霍尔输入 (CCPOSx) 的变化来触发 通道 0 为捕获模式, 通道 1 和 2 为比较模式 通道 0 为捕获通道, 检测到有效的霍尔事件跳变沿时,T12 的计数值被捕获到通道 0, 并将 T12 复位 该捕获值代表电机的实际转速 利用通道 1 的比较功能产生输入到输出切换之间的相位延迟 通道 2 工作在比较方式, 当 T12 的计数值达到通道 2 的比较值之前未被清零, 表示电机的转速远低于期望转速 ( 由异常的负载变化所致 ), 产生超时触发中断 该工作方式使用了多通道模式, 各输出引脚不受 T12 的调制, 因此应禁止 T12 调制 (T12MODENx = 0) Page 26
霍尔传感器模式 ( 续 ) 霍尔传感器模式工作波形图 : CC 60 实际转速 Ch 0 捕获实际 ch2 比较用于超时检测 CC 61 CC 62 相位延迟 超时 捕获事件复位 T12 转速 ch1 比较用于相位延迟 CCPOS 0 1 1 1 0 0 0 CCPOS 1 0 0 1 1 1 0 CCPOS 2 1 0 0 0 1 1 CC6x COUT 6y Page 27
霍尔控制逻辑 霍尔控制逻辑图 : 检测到霍尔事件 No DTC == 0 Yes 死区时间计数器实现的硬件噪声滤波器 当前霍尔状态? No Yes 结束 SW 请求的映射传输 预期的霍尔状态? No WHE=1 Yes 正确的霍尔事件 (CHE=1) 复位 T12 中断允许? Yes 新状态传输至输出寄存器 使能 IDLE 模式 Yes 中断允许? Yes No 结束 中断 No 结束 输出状态被禁止 No 结束 Interrupt Page 28
霍尔传感器和多通道模式的协同 在无刷直流电机中, 下一个多通道状态值由霍尔输入序列决定 霍尔序列 (CURH) 和调制序列 (MCMP) 之间关联性强 灵活定义霍尔序列和相应的调制序列之间的关联关系对电机控制很有好处 CCU6 单元通过存放实际霍尔序列 (CURHS) 下次期望的霍尔序列 (EXPHS) 以及输出序列 (MCMPS) 的寄存器来实现 每次产生正确的霍尔事件时, 新的霍尔序列和相应的输出序列 ( 取自预定义的表 ) 可由软件载入寄存器 MCMPOUTS 中 Page 29
实战练习 实战练习总共包含 4 个内容, 目标芯片为 XC866: 1. 使用 T13 产生单路 PWM, 使用 T12 产生单路 PWM 2. 使用 T12 产生 3 路 PWM 3. 使用 T12 产生 6 路 PWM 4. 使用 T12 产生带死区的 6 路 PWM Page 30
实战练习 1A: 使用 T13 产生单路 PWM 要求 : 产生 PWM 波形的周期为 1 毫秒, 占空比为 50% T13 运行于边沿对齐模式 Page 31
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 运行 DAVE 软件 DAvE.lnk, 新建一个 XC866 工程文件夹 首先选中器件型号 点击创建 Page 32
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 对工程参数进行设置 4. 选择系统时钟标签进入下一步设置 1. 选择器件具体型号 2. 使用默认值 3. 选择使用 keil Page 33
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 选择使用片上振荡器 选择使用片上锁相环 Page 34
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 点击选中 CCU6 单元 Page 35
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 使能模块时钟 Page 36
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 切换到引脚控制页 2 选择 P3.7 做为 Cout63 的输出引脚 Page 37
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 选中定时器 T13 控制页 选中该项, 在初始化后启动定时器 T13 设定 T13 的周期值为 1ms Page 38
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 选中通道控制页 选择通道 3, 对其进行设置 Page 39
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 关闭该页 使能替换功能, COUT63 做为 T13 的 PWM 输出 设定占空比 Page 40
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 选择使用 CCU6 的初始化函数 选中函数选项页 Page 41
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 点击 按钮保存工程, 需要选择保存的文件名及目录 选择保存目录 保存的文件名 Page 42
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 点击 按钮, 自动生成代码 提示信息如下图所示 Page 43
实战练习 1A: 使用 T13 产生单路 PWM( 续 ) 至此代码框架已经产生, 可在框架的相应位置添加用户代码 初始化程序已经自动生成, 不需用户编写 本例中不需要添加用户代码 Page 44
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 1 双击 Keil 图标, 打开操作界面 在 Keil 中选择 Project Open Project Select directory Select Files of type Select project file Open Page 45
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 2 设置工程选项 设置工程选项 Page 46
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 2( 续 ) 选中 Target 标签 选中使用片上 ROM Page 47
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 2( 续 ) 选中输出设置页 选中 生成十六进制文件 Page 48
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 3 点击进行编译链接, 并生成可执行代码 不应有错误和警告 Page 49
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 4 进行仿真 点击进入仿真界面 Page 50
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 5 逻辑分析 打开逻辑分析功能 Page 51
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 5( 续 ) 设置逻辑分析的引脚 2. 选择新建 1. 选择 setup 3. 输入端口号 4. 选择关闭 Page 52
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 5( 续 ) 全速运行, 如果能够在逻辑分析仪界面看到方波输出, 说明练习成功 选中的 P3.7 引脚 点击全速运行 输出的方波 Page 53
实战练习 1A: 使用 KEIL 编译仿真工程的设置 - 步骤 6 编译链接后, 工程文件夹中会有自动生成的 *.HEX 文件 选择 FLOAD 或者 MEMTOOL 等工具将 HEX 代码下载到单片机中 具体的操作参考相关教程 利用示波器在电路板上观察各个参考点的波形, 应和仿真波形一致 Page 54
实战练习 1B: 使用 T12 产生单路 PWM 要求 : 产生 PWM 波形的周期为 1 毫秒, 占空比为 50% T12 运行于中心对齐模式 Page 55
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) DAvE 的 Project Settings 和练习 1A 相同 Page 56
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选择 P3.0 做为 CC60 的输出 选择引脚控制页 2 Page 57
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选择定时器 T12 设置页 选择初始化后启动 T12 中心对齐模式, 增计数 设置周期为 1ms Page 58
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选择通道设置页 设置通道 0 Page 59
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选择 模式选择 设置页 设置比较模式 Page 60
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选择 CC60 调制控制 设置页 使能 T12 对 CC60 的调制 Page 61
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选择 控制 设置页 50% 的占空比 Page 62
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 选中生成 CCU6 的初始化函数 返回上级目录, 选择 函数 设置页 Page 63
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 点击 按钮保存工程, 需要选择保存的文件名及目录 选择保存目录 保存的文件名 Page 64
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 按 按钮自动生成代码 生成的代码信息如下图所示 Page 65
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 至此代码框架已经产生, 可在框架的相应位置添加用户代码 初始化程序已经自动生成, 不需用户编写 本例中不需要添加用户代码 Page 66
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) Keil 的设置步骤同练习 1A 在设置 Logic Analyzer 中选择 P3.0 作为输出端 仿真的输出波形如下图所示 选择的输出引脚 Page 67
实战练习 1B: 使用 T12 产生单路 PWM( 续 ) 编译链接后, 工程文件夹中会有自动生成的 *.HEX 文件 选择 FLOAD 或者 MEMTOOL 等工具将 HEX 代码下载到单片机中 具体的操作参考相关教程 利用示波器在电路板上观察各个参考点的波形, 应和仿真波形一致 Page 68
实战练习 2: 使用 T12 产生 3 路 PWM 要求 : 产生 PWM 波形的周期为 1 毫秒, 占空比为 50% T12 运行于中心对齐模式 Page 69
实战练习 2: 使用 T12 产生 3 路 PWM( 续 ) DAvE 的 Project Settings 和练习 1A/B 相同 练习 2 的 DAvE 设置基本上和练习 1B 相同, 在此可以复制练习 1B 的工程文件夹, 这里只给出需要额外设置的选项 Page 70
实战练习 2: 使用 T12 产生 3 路 PWM( 续 ) 选择多个输出通道 选择 引脚控制 2 设置页 使用 CC60 做为第一路输出 使用 CC61 做为第二路输出 使用 CC63 做为第三路输出 Page 71
实战练习 2: 使用 T12 产生 3 路 PWM( 续 ) 本例需要产生三路 PWM 输出, 需要对通道 1 通道 2 进行和通道 0 相同的设置 Page 72
实战练习 2: 使用 T12 产生 3 路 PWM( 续 ) Keil 的设置步骤同练习 1 在设置 Logic Analyzer 中选择 P3.0 P3.2 P3.4 作为输出端 仿真的输出波形如下图所示 Page 73
实战练习 3: 使用 T12 产生 6 路 PWM 要求 : 产生 PWM 波形的周期为 1 毫秒, 占空比为 50% T12 运行于中心对齐模式 Page 74
实战练习 3: 使用 T12 产生 6 路 PWM DAvE 的 Project Settings 和练习 2 相同 练习 3 的 DAvE 设置基本上和练习 2 相同, 在此可以复制练习 2 的工程文件夹, 这里只给出需要额外设置的选项 Page 75
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) 选择 6 路输出 使能 CC6x(x= 0~2) 的输出 使能 COUT6x(x =0~2) 的输出 Page 76
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) 选择通道设置页 设置通道 0 Page 77
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) 比较模式选择 模式选择设置页 比较模式选择 Page 78
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) COUT60 被动态设置 使能 T12 对 COUT60 的调制 选中 Page 79
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) 通道 0 的其余设置和实战练习 2 相同 通道 1 通道 2 的设置和通道 0 相同 Page 80
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) 按照实战练习 1 的步骤产生代码框架, 可在框架的相应位置添加用户代码 初始化程序已经自动生成, 不需用户编写 本例中不需要添加用户代码 Page 81
实战练习 3: 使用 T12 产生 6 路 PWM( 续 ) Keil 的设置步骤同练习 1 在设置 Logic Analyzer 中选择 P3.0~P3.5 作为输出端 仿真的输出波形如下图所示 Page 82
实战练习 4: 使用 T12 产生带死区的 6 路 PWM 要求 : 产生 PWM 波形的周期为 1 毫秒, 占空比为 50%, 死区长度为 1 微秒 T12 运行于中心对齐模式 Page 83
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) DAvE 的 Project Settings 和练习 1A 相同 练习 4 的 DAvE 设置基本上和练习 3 相同, 在此可以复制练习 3 的工程文件夹, 这里只给出需要额外设置的选项 Page 84
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) 设置死区时间 选择定时器 T12 设置页 选择初始化后启动 T12 中心对齐模式, 增计数 设置死区时间为 1us 设置周期为 1ms Page 85
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) 使能死区时间 选中该页 使能死区时间产生 占空比为 50% Page 86
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) 通道 1 通道 2 的设置和通道 0 相同 Page 87
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) 按照实战练习 1 的步骤产生代码框架, 可在框架的相应位置添加用户代码 初始化程序已经自动生成, 不需用户编写 本例中不需要添加用户代码 Page 88
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) Keil 的设置步骤同练习 3 仿真的输出波形如下图所示 Page 89
实战练习 4: 使用 T12 产生带死区的 6 路 PWM( 续 ) 经放大后, 可以看到死区时间的细节, 其死区时间应和设置的值一致 Page 90