ZHDA025 January   2026 TPSI2240-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 绝缘监测
  5. 2详细说明
    1. 2.1 求解未知隔离电阻
    2. 2.2 处理大时间常数情况
    3. 2.3 预测算法
    4. 2.4 了解误差源
    5. 2.5 测试结果
  6. 3总结
  7. 4参考资料

预测算法

当 SW2 接通时,响应遵循指数衰减公式:

方程式 6. Vt=Vinf+Voe-tτ

其中 Vinf 是最终稳定电压(t =无穷大),Vo 是时间零点处初始电压Vt0和 Vinf 之差。请参阅图 2-9 以帮助理解该概念。

需要特别关注稳定电压 Vinf。这个公式中的三个未知项是 Vinfτ和 Vo。如果 ADC 在三个不同的时间测量三个样本电压,则会创建一个由三个公式组成的系统:

方程式 7. Vt0=Vinf+Vo
方程式 8. Vt1=Vinf+Voe-t1τ
方程式 9. Vt2=Vinf+Voe-t2τ

通过使用 t2 = 2*t1,方程变为:

方程式 10. Vt0=Vinf+Vo
方程式 11. Vt1=Vinf+Voe-t1τ
方程式 12. Vt2=Vinf+Voe-2t1τ

现在,让 x =e-t1τ公式变为:

方程式 13. Vt0=Vinf+Vo
方程式 14. Vt1=Vinf+Vox
方程式 15. Vt2=Vinf+Vox2

Vinf 的计算得到了显著简化:

方程式 16. Vinf=Vt0*Vt2-Vt12Vt0-2Vt1+Vt2
  • 请注意,计算 Vinf 只需要四则运算。计算 Vinf 后,Vo 可以通过从以下项中减去 Vinf 来计算Vt0
  • 理论上,只要 t1 和 t2 相对于彼此适当间隔,t0 在衰减曲线上的位置就无关紧要。具体而言,用户必须在三个样本之间保持相同的时间差。对于较长的时间常数,电压稳定曲线在相同的周期时间内可能相对平坦。在有噪声的情况下,增加三个样本之间的时间间隔会增加 SNR,从而提高预测算法性能。

用于求解方程组的 MATLAB 脚本为:

%% solution for exponential decay
clc
syms vt0 vt1 vt2 vinf v0 x
eq1 = vt0 == vinf+v0;
eq2 = vt1 == vinf+v0*x;
eq3 = vt2 == vinf+v0*x*x;
eq4 = vt0 ~= vt1;
eqns = [eq1, eq2, eq3, eq4];
[vinf, v0, x, para, conditions] = solve(eqns,[vinf, v0, x],ReturnConditions=true)

在 TIDA-010985 默认代码中,三个样本之间的时间间隔为 330ms。这会确保总 IMD 测量周期时间在 2s 以内,同时使定点计算变得简单。要更改默认周期时间,用户可以执行以下操作之一:

  • 更改 IMD.c.中的 E1 #define。例如,将 E1 #define 从 990 更改为 600 (ms) 会将 IMD 周期时间从大约 2s 减小到大约 1.2s。确切的时间取决于数据采集周期后的几毫秒 (ms) 计算时间(约 2ms)。如果用户由于某种原因想要增加周期时间,则除了 E1 #define 之外,还必须相应地更改数据缓冲区“SamplesSize”。在不更改默认 ADC 采样周期的情况下,由于可用的 SRAM(总计 32kB),可以限制增加数据缓冲区:
#define SamplesSize 2000 // ADC buffer size
#define E1 990 // total time for Riso measurement is 2xE1 in ms 
  • 通过更改 syscfg 中的 TIMER_0 周期(例如从 1ms 更改为 0.5ms),可更改 ADC 采样间隔。这需要对其余代码进行一些更改,因为该代码假定采样周期默认为 1ms ADC。

使用以下公式可以计算时间常数:

方程式 17. τ=-VoV'(t0)

对于隔离电阻,只需要 Vinf。对于整个系统 Y 电容 (CisoP + CisoN),近似于 V'(t) 于t0处,具有两个相邻的 ADC 测量值。则 Ciso 为:

方程式 18. Ciso=τRisoP||RisoN||RsP+R1||RsN 
 采用用于预测算法的 ADC 样本的电压衰减曲线示例图 2-9 采用用于预测算法的 ADC 样本的电压衰减曲线示例

可以对充电曲线进行类似的分析。如果 ADC 在三个不同的时间测量三个样本电压,则会为充电曲线创建一个由三个公式组成的系统:

方程式 19. Vt0=Vi
方程式 20. Vt1=Vi+Vo1-e-t1τ
方程式 21. Vt2=Vi+Vo1-e-t2τ

注意Vit0处的初始电压。通过使用 t2 = 2*t1,方程变为:

方程式 22. Vt0=Vi
方程式 23. Vt1=Vi+Vo1-e-t1τ
方程式 24. Vt2=Vi+Vo1-e-2t1τ

现在,让 x =e-t1τ公式变为:

方程式 25. Vt0=Vi
方程式 26. Vt1=Vi+Vo(1-x)
方程式 27. Vt2=Vi+Vo(1-x2)

注意,稳态电压 Vinf 为:

方程式 28. Vt==Vinf=Vi+Vo

方程组的计算非常简单(假设 t2 = 2*t1),因此 Vinf 为:

方程式 29. Vinf=Vt0+Vt02-2*Vt0*Vt1+Vt12-Vt0+2*Vt1-Vt2

用于求解方程组的 MATLAB 脚本为:

%% charging solution
clc
syms vt0 vt1 vt2 vi v0 x
eq1 = vt0 == vi;
eq2 = vt1 == vi+ v0*(1-x);
eq3 = vt2 == vi+ v0*(1-x*x);
eq4 = vt0 ~= vt1;
eqns = [eq1, eq2, eq3, eq4];
%
[svi, sv0, sx, para, conditions] = solve(eqns,[vi, v0, x],ReturnConditions=true)

一个重要的考虑因素是知道何时应用预测算法。如果电压具有较短趋稳时间,则不需要预测算法。更实际的做法是,在求解 Riso 或 Ciso 之前,再等一会儿。目前,该 SW 会根据电压时间导数(由 Vbus 电压归一化)执行一些基本检查,以设置预测模式的阈值。此方法确实需要在已知负载的情况下进行一些调整,以确保可靠的运行。以下是代码中可能的存在模式:

#define SETTLED_MODE
#define DECAY_MODE
#define CHARGE_MODE
#define OUT_OF_RANGE_MODE