【喂饭教学】电机驱动功耗计算以及瞬态热阻抗曲线的应用(图文拆解版+PPT下载)

论坛的朋友们大家好,本次研讨会由MPS 工程师Jackson讲解,这次的主题是:point_down:

电机驱动功耗计算以及瞬态热阻抗曲线的应用。

在电机驱动应用中,常常会遇到电机堵转等情况,瞬态电流可能是稳态电流的十几倍,这时候很多客户想要知道芯片的瞬态结温有多少,那本次研讨会分为三个部分来帮助大家解答这个问题,分别是功耗计算,热模型,瞬态热阻抗曲线的应用,最终会以我们MPS 芯片MP6600L为例子,展示如何估算瞬态结温。

完整视频猛戳播放按钮:point_down:,还有PPT下载哟

点击观看
为了节省大家的时间,接下来也为下大家整理了本次直播的图文省流版,请分享食用哦~~~

1 个赞


首先,我们电机驱动芯片,以MOS集成的为例,大部分芯片都是半桥全桥或者多个半桥全桥,芯片大部分的功耗主要是开关损耗和导通损耗。

我们先讲开关损耗,简单了解一下MOS开通关断过程。

在MOS管的等效模型中存在三个电容,电容的下标由MOS管引脚名称来命名,他们分别是 Cgd, Cgs, Cds. MOS 开通关断,其实就是对这些电容充放电的过程;在 MOS 管的手册中,也有三个电容,输入电容, 输出电容,反向传输电容,其中反向传输电容就直接等于 Cgd. 输入电容等于Cgs+Cgd, 把GS两端当成一个二端口网络看进去,等效的电容就是 Ciss, 它就相当于 Cgd 和 Cgs 两个电容的并联,其实 Ciss 就是MOS导通时GS两端的电容,Coss 就相当于 MOS 关断时,D 和 S 两端的电容;

穿插一个关于电容的小知识:电容 一个极板跑进多少电荷,另外一个极板就会被寄出多少电荷;一个极板被吸走多少电荷,另外一个极板就会补充进多少电荷。

在 PWM 低电平阶段,0V给到了 MOS 管G端,所以电压 VGS 为0,此时MOS是关断的,所以电压VDS=电源电压VIN,所以这时候电容Cgs两端电压是0V,电容cgd两端电压Vgd=-VIN, Cgd电容 上+,下-;当PWM上升沿出现时,Vgs电压也就逐渐上升,这个上升的过程标准是四个阶段
在第一阶段,驱动电流同时对Cgs 和 Cgs充电,电压将正电荷推向了G端,电荷兵分两路,下面这路容易理解,正电荷被灌进Cgs, G端的电压逐渐抬升;而上面这路就需要用到我们刚刚补充的电容小知识,驱动电压将正电荷推进了Cgd的下极板,下极板的负电荷被中和掉一部分,上极板的正电荷被挤出了一个部分,由于此时此时MOS管时关断的,这部分正电荷只能流入VIN, 上极板始终连着VIN,下极板负电荷不断被中和,Cgd两端电压差逐渐减小,所以下极板电压也是逐渐上升,那么综合来看,这两个电容的共同作用都是使G端电压逐渐上升。普遍的说法一般是驱动电流对Cgd分流比较小,在第一阶段可以忽略掉这个电容。

重点是第二阶段,随着是Vgs电压逐渐上升,当Vgs超过Vgsth,MOS开始逐渐导通,Vds电压会急剧下降,DS两端就像开关闭合,电容Cgd上极板电压急剧下降↓,这个过程中伴随着大量正电荷被吸到GND端,与此同时,下极板大量吸收正电荷,这些电荷从哪里来呢,就是从驱动端来,此时Cgd这个电容狮子大开口,疯狂吸收驱动电流 ,而下面电容Cgs电荷却得不到补充,所以这期间Vgs就无法继续上升,实测中:thinking: 我们发现有时候如果米勒电容胃口太大,还能看到这个平台会直接凹陷。虽然Cgd的胃口很大,但是好在Cgd还是冲满了,此时MOS完全导通,Vds电压就为0,上极板电压为0V,Vgd等于驱动电压,MOS管就在这稳定的状态下,等待着下降沿的出现,关于下降沿此处就不再赘述;以上描述就是单个MOS开通过程;

那么在这过程中,本质就是MOS管开关不是瞬间完成的,其电压和电流 Vds 和 Ids 存在重叠区,这就是开关损耗。

前面我们提到开通过程中有四个阶段,第一阶段是Vgs电压从0到Vth, 这个过程MOS始终没有导通,Ids为0,因此损耗为0,栅极损耗可以忽略不计;第二个阶段是,MOS开始导通到米勒平台,这时候电压始终为Vds,电流从0变化到Ids(on), 功耗就是1/2 VDS* IDS* t2* FPWM;
第三个阶段是米勒平台,这时候Ids是几乎不变的,VDS逐渐变成0,所以功耗也是1/2 VDS* IDS* t3* FPWM;
第四阶段完全导通,Vds为0,也就没有开关损耗; 因此我们开关损耗主要是t2,t3 决定,也就是Cgs,Cgd决定,这两个电容会影响我们的开关速度,从而影响开关损耗;通常在计算的时候t2+t3, 近似成我们的管子的rising time。 关断时的计算也是同理,因此开关损耗的计算就是我们前面展示的公式;

1 个赞


前面介绍了MOS开通关断过程中的开关损耗, 下面来看导通损耗。这个相对来说最简单 :smile:,导通后Vgs不变的情况下,导通Rdson恒定,知道了通过的电流,开关的占空比D,就直接用公式计算; 相当于半桥HS/LS 不断开关,电流波形就长这样子,实际计算功耗,就用电流的有效值;
这里由于在温度上升过程中,Rds会不断变化,因此在计算导通损耗时候需要注意要迭代Rdson, 你用环境温度 算出的一个总功耗,用热参数算出芯片的实际结温,这时候再去用这个算出来结温对应的Rdson重新算功耗,在算出一个新的结温,直至他们前后两次结温的值误差很小 :pencil2:


因此我们就了解,我们Motor driver,MOS内置,主要功耗的计算, 主要是开关损耗和导通损耗, 其实损害还有一些,比如driver loss,芯片静态损耗,死区时候体二极管的损耗,还有反向恢复电荷的损耗,这些都比较小,几乎可以忽略不计,主要就是开关和导通损耗;


关于芯片散热的电学模型,具体就不展开了,之前研讨会有专门讲解过,感兴趣的可以去看之前的;

简单来讲,芯片散热过程,我们可以量化不同路径上热阻值的串并联的关系,通过热学仿真,我们能得出一个热特征参数,Ψ, Ψ有两个值,ΨJT ΨJB,可以通过这两个值的任意一个来计算芯片稳态的结温;


我们来快速看一下如何计算,首先𝛹JB 是指Junction to board, 也就是结到板子上, JT 指的是junction to case, 结到case; PD就是我们芯片的总功耗,也就是我们前面计算的开关损耗和导通损耗,主要是这两个损耗; 你要用𝛹JT来算,那就是芯片case温度加上𝛹jt*总功耗;


前面讲的是稳态,我们现在来讲瞬态
我们知道,电路通直流的时候,只需考虑电阻的作用;交流才会引入电感和电容的影响;电路中,若总功率恒定,那么一般只需要考虑热阻Rth的作用,但是一般瞬时功率是变化的,这时候,我们把瞬态功率定义成pulsed operation, 芯片工作在不同功率pulse下,对应的热阻值也是不同的,因此我们定义一条热阻抗曲线,横坐标是瞬态功率对应时间脉冲,纵坐标就是对应的瞬态热阻值。我们来简单看一下。 :point_down:


一般我们有两种网络热模型来表示瞬态,分别是Cauer and Foster。 第一种Cauer 也叫连续网络热炉模型, 这种模型具有实际的物理意义,每一层的导热材料都能用对应的RC参数来表示,比如说有一些底板基板,一些连接处。
我们从左到右:point_right:来看,这一点对应的芯片总功率,以及最热的结温,然后经过每一层散热的导热材料;这个模型的应用一个比较有趣的事情,很多在失效分析上,比如说专门的仪器t3ster, 可以测量到每一层材料的RC值,可以通过对比失效前后,哪一层RC参数发生变化来定位失效的位置;关于瞬态热的计算,我们不太会用到这个模型; 用到的主要是第二个Foster模型,也叫做局部网络热路模型,跟cauer模型不同,foster模型RC节点不再和导热材料一一对应,这个网络节点没有任何实际的物理意义,系数是通过实验测量或者仿真得到的散热曲线进行数学拟合来得到的,这样方便我们的应用;

有了这些RC值,就可以根据拟合成一条热阻抗曲线,下面来看一下;

:eyes:


我们来看一下, 左边曲线就是热阻抗曲线,怎么看呢 :dotted_line_face:。首先曲线的横坐标就是功率pulse的脉冲时间,功率pulse的幅值是固定,比如说这里的1.5w, 脉冲时间是不断变化,这个曲线就是不同脉冲时间对应的一个热阻抗值。这个曲线要如何应用呢? :dart:


以我们的MP6600L为例,我们可以提供七阶Foster RC模型,这个值怎么来的,前面提到的可以通过仿真手段来拟合这些参数;


有了参数,带入公式可以得到热阻抗曲线,这里展示的就是用python绘制的曲线;

import matplotlib.pyplot as plt
from math import e
import numpy as np


R_th = [6.34876e-1,6.158431e+0,8.166576e+0,1.740248e+0,5.968462e+0,3.840516e+0,1.40592e-1]
C_th = [1.46521e-3,1.27947204e-1,1.939822263e+1,3.2721125e-2,2.279791058e+1,1.788177141e+0,4.43541e-4]

assert len(R_th) == len(C_th)

th = len(R_th)
#x = np.arange(0,1,0.0001,dtype =  float)
x = np.logspace(-6, 0, num=7, base=10)  # 对数域
y= np.sum([R_th[i] * (1-e**(-1*x/(R_th[i]*C_th[i]))) for i in range(th)],axis=0)    # Foster模型的热阻抗曲线方程
plt.figure(figsize=(25,9))
plt.yscale("log")  # 对数坐标
plt.xscale("log")  # 对数坐标
plt.xlim(1E-6,1)
plt.ylim(1E-3,1)
# 开启刻度线网格
plt.grid(which='major',axis='both',linewidth=0.75,linestyle='-',color='orange')
plt.grid(which='minor',axis='both',linewidth=0.25,linestyle='-',color='orange')
plt.plot(x,y)
plt.show()


我再详细解释一下这个曲线,首先X轴是Pulse width, 脉宽,代表对器件施加功率的时间。Y轴就是瞬态热阻抗值。曲线簇就是瞬态热阻抗的数据,曲线簇中的各个曲线之间的差别,在于 施加的脉冲功率的占空比不一样。 值得一提的,这个表里,我的纵坐标是为了方便显示,我是转换了一个比例。


具体的步骤如下, 首先查看对功率器件所施加的功率脉宽和占空比,记录数值。比如我的脉宽是100ms, 那就是0.1;
第二步,用上一步记录的脉宽数值,从图表中读取瞬态热阻抗值;
第三步,使用以下公式,计算结温;𝑇𝐴 :周围环境温度 [℃] ;𝑍𝑇𝐻:从结到周围环境的瞬态热阻抗 [℃/𝑊];𝑃 :器件的功率损耗 [𝑊];


示例1:比如对于电路起动时对电容电荷充电而流过的浪涌电流等、只在短时间内发生一次的现象,使用 [Single Pulse] 曲线估算结温。

步骤1. 查看大功率在短时间内产生的脉宽,比如说0.1ms


第二步,从图表中读取瞬态热阻抗值。 对应是0.007*26.69°C/W;


第三步,使用公式计算,比如当已知的环境温度和功耗是60°,和1.8°C/W;


第二个例子,比如电路进行on/off断续工作时,可以使用对应duty曲线来计算。

也是先. 查看功率损耗发生时的脉宽和占空比,记录数值, 假设脉宽1s, 占空比是百分之十;