互补PWM死区时间的精确计算是防止H桥上下桥臂直通、避免MOSFET烧毁和降低开关损耗的关键。其核心在于根据所选MOSFET数据手册中的开关时间参数,并结合驱动电路的实际延迟,留出足够的安全裕量。以下是基于MOSFET参数的计算方法、步骤及实践指南。
一、核心计算公式与参数定义
死区时间(Dead Time, T_dead)必须覆盖从"关闭信号生效"到"对侧开启信号生效"之间,两个MOSFET可能同时导通的风险窗口。其计算公式为:
T_dead = Max(T_off_max, T_delay) + Max(T_on_max, T_delay) + T_margin
| 参数符号 | 参数名称 | 定义与获取方式 | 单位 |
|---|---|---|---|
T_off_max |
最大关断延迟时间 | 从栅极驱动电压开始下降到漏极电流开始下降的时间(数据手册 t_d(off))。 |
ns |
T_on_max |
最大开启延迟时间 | 从栅极驱动电压开始上升到漏极电流开始上升的时间(数据手册 t_d(on))。 |
ns |
T_delay |
驱动电路传播延迟 | 驱动芯片(如IR2104)输入到输出的延迟(数据手册 t_PLH, t_PHL),取最大值。 |
ns |
T_margin |
安全裕量时间 | 考虑温度、电压变化、器件离散性等因素的额外时间,通常为20-100ns。 | ns |
关键点 :实际计算时,应取 T_off_max 和 T_delay 中的较大者,以及 T_on_max 和 T_delay 中的较大者进行相加,因为延迟可能来自MOSFET本身或驱动芯片,需以防最慢的情况 。
二、分步计算实例
假设我们使用一个典型的功率MOSFET IRF3205 和驱动芯片 IR2104。
步骤1:查阅MOSFET数据手册获取开关时间
- 在IRF3205的数据手册中,查找
Turn-On Delay Time (t_d(on))和Turn-Off Delay Time (t_d(off))。这些参数通常在特定的测试条件下给出(如V_GS=10V, I_D=50A, V_DS=50V)。 - 示例值 (需以实际手册为准):
t_d(on)_max = 60 nst_d(off)_max = 110 ns
步骤2:查阅驱动芯片数据手册获取传播延迟
- 在IR2104的数据手册中,查找
Propagation Delay (t_PLH, t_PHL)。 - 示例值 :
t_PLH_max = 120 ns(低到高延迟)t_PHL_max = 95 ns(高到低延迟)- 取两者最大值:
T_delay = 120 ns
步骤3:选择安全裕量
- 根据应用可靠性要求,选择
T_margin = 50 ns。
步骤4:代入公式计算
T_dead = Max(110 ns, 120 ns) + Max(60 ns, 120 ns) + 50 ns
= 120 ns + 120 ns + 50 ns
= 290 ns
因此,理论计算所需的最小死区时间约为 290纳秒。
三、在微控制器(以STM32为例)中的配置实现
计算出的纳秒级时间需要转换为MCU定时器时钟周期数进行配置。STM32高级定时器(如TIM1/TIM8)通过 BDTR寄存器 的 DTG位域 来设置死区时间,其计算方式与定时器时钟 T_dts 密切相关 。
步骤1:确定死区时间基准时钟 T_dts
T_dts 来源于定时器输入时钟 CK_INT,经过时钟分频因子 CKD 得到。
- 公式 :
T_dts = (CKD / TIMx_CLK)- 其中
TIMx_CLK是定时器的实际时钟频率(如84MHz)。 CKD在TIMx_CR1寄存器中设置,可取 1, 2, 4。
- 其中
- 示例 :若
TIMx_CLK = 84 MHz,CKD=1,则T_dts = 1 / 84MHz ≈ 11.9 ns。
步骤2:根据DTG寄存器编码规则计算寄存器值
DTG[7:0] 的编码分为4个区间,对应不同的计算公式。以下是简化流程:
| DTG[7] | DTG[6] | 公式 | 死区时间 T_dtg |
|---|---|---|---|
| 0 | 0 | T_dtg = DTG[5:0] * T_dts |
` |
| 0 ~ 63 * T_dts` | |||
| 0 | 1 | T_dtg = (64 + DTG[5:0]) * 2 * T_dts |
` |
| 128T_dts ~ 254T_dts` | |||
| 1 | 0 | T_dtg = (32 + DTG[4:0]) * 8 * T_dts |
` |
| 256T_dts ~ 2032T_dts` | |||
| 1 | 1 | T_dtg = (32 + DTG[4:0]) * 16 * T_dts |
` |
| 512T_dts ~ 4064T_dts` |
步骤3:配置代码示例 (STM32 HAL库)
假设我们需要设置 T_dead = 290 ns,且 T_dts = 11.9 ns。
- 计算所需时钟周期数:
N = T_dead / T_dts ≈ 290 / 11.9 ≈ 24.4,向上取整为 25个周期。 - 由于25落在第一个区间(0-63),因此
DTG[7:6] = 00,DTG[5:0] = 25 (0x19)。 - 完整的寄存器值
DBDTG即为0x19。
c
// STM32 HAL库 死区时间配置代码示例
TIM_HandleTypeDef htim1;
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
// ... 定时器基础配置(预分频、周期等)已省略
// 配置死区时间
sBreakDeadTimeConfig.DeadTime = 0x19; // 对应 25 * T_dts ≈ 298 ns (略大于计算值290ns,安全)
sBreakDeadTimeConfig.BreakState = TIM_BREAK_ENABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) {
Error_Handler();
}
// 使能主输出(MOE)是互补PWM输出的关键一步,必须在死区配置后、PWM启动前执行
__HAL_TIM_MOE_ENABLE(&htim1);
// 最后启动PWM通道
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1); // 启动互补通道
代码关键注释 :DeadTime 成员直接写入 DBDTG 寄存器的值。配置完成后,必须通过 __HAL_TIM_MOE_ENABLE 使能主输出,互补PWM才会生效 。
四、验证与调试
- 示波器验证 :这是最直接的验证方法。使用双通道示波器,分别测量同一桥臂的上管栅极信号(
GH)和下管栅极信号(GL)。确保在GH下降沿与GL上升沿之间(反之亦然),存在一段两者都为低电平的平台期,其时间长度应与设定值相符 。 - 发热与效率监测:在负载下运行电机,监测MOSFET温升。如果死区时间不足,会出现直通现象,导致MOSFET急剧发热。如果死区时间过长,虽然安全,但会降低输出电压有效值,增加谐波,也可能导致效率下降和电机噪音 。
- 动态调整考量:在一些高级控制方案中,死区时间可以根据母线电压和电机电流进行动态补偿,以优化不同工况下的效率 。
总结表格:死区时间设置全流程
| 步骤 | 关键动作 | 依据与工具 | 目标 |
|---|---|---|---|
| 1. 参数提取 | 从MOSFET和驱动芯片数据手册中提取 t_d(on), t_d(off), t_PLH/HL |
器件数据手册 | 获取原始时间参数 |
| 2. 理论计算 | 使用公式 T_dead = Max(T_off,T_delay)+Max(T_on,T_delay)+T_margin 计算 |
计算器 | 得出纳秒级理论值 |
| 3. 寄存器换算 | 根据MCU定时器时钟 T_dts 和DTG编码规则,计算寄存器值 |
芯片参考手册 | 得到待写入的配置值 |
| 4. 代码配置 | 在初始化代码中配置定时器的死区时间寄存器,并确保使能MOE | 开发环境、HAL/LL库 | 将参数写入硬件 |
| 5. 实测验证 | 用示波器测量栅极信号,验证死区时间实际宽度 | 示波器 | 确认硬件执行与设计一致 |
| 6. 系统调优 | 结合温升、效率和波形,微调死区时间或安全裕量 | 温枪、功率分析仪 | 实现安全与效率的最佳平衡 |
精确的死区时间计算与配置,是保障功率变换系统可靠运行的基础。务必以最坏情况下的参数(最大值)进行计算,并通过实验进行最终验证和微调 。