DFT--故障模型(Fault Model)

Design for test, then test for what?

花0.01秒钟思考了一下,当然是为了发现被测电路中的制造缺陷(defect)啊!假如,我说假如啊,假如制造缺陷只有一种(嘿嘿嘿),那么为芯片测试准备的测试向量(Test Pattern)也只需要一种,芯片测试的时间将大大减少,测试成本将大大降低,芯片设计公司将大大开心。

但是,在实际的集成电路制造过程中,造成缺陷(Defect)的原因多种多样,比如:

  • 连线的短路或开路

  • 掺杂浓度不稳定

  • 金属导线不规则

  • 过孔不完整或过大

  • ......

这就好像世界上坏人那么多种,你总不能都说他们寻衅滋事吧?坏人们(张三)需要法律对他们进行分类,坏缺陷(Defect)也需要进行分类。将千奇百怪的缺陷划分为固定的几类故障,这样的有限的故障,即为故障模型(Fault Model)。

故障模型的意义在于,让测试向量(Test Pattern)的生成可以自动化。举个栗子,芯片内部某根线接地了恒为0,你在故障的输入端写1,在故障的输出端读1,就可以测出这个故障,而“写1读1”就是你用你的聪明小脑瓜生成的测试向量(Test Pattern)。是不是觉得自己很吊?假如告诉你还有一万种未被分类的缺陷呢,是不是头都大了。但是你发现这一万种缺陷都有共同的特点,即短路恒为0,那它们的测试向量就由一万变成了一万,这种重复性的工作,就可以写个固定算法,让计算机自动去生成了。这就是故障模型的意义了。

言归正传,故障模型(Fault Model)可以分为哪几类呢?下面介绍两类常见的故障模型:

  1. 固定型故障(Stuck-At Faults, SAF)

逻辑门中有一条信号线的逻辑状态,一直固定在0或1,与其他信号线上的逻辑值无关。

固定0故障可以通过写1操作敏化,再通过读1操作可以检测出是否存在固定0故障;

固定1故障可以通过写0操作敏化,再通过读0操作可以检测出是否存在固定1故障。

  1. 跳变故障(Transition Delay Faults, TDF)

因逻辑们故障节点延时,导致未能在期望时间内由1翻转为0或由0翻转为1。注意看,不会同时具有既不能上跳变或下跳变的故障,只有其一,否则就成了固定故障。

检测跳变故障的测试向量的必要条件: 待测节点必须经历上跳变或下跳变。一般要经历两次跳变(两个时钟周期),如, 若存在上跳变故障,可用写0操作敏化,再进行写1操作,最后读1可以检测出这个故障;下跳变故障的检测方法反之。

  1. 其他故障类型还有IDDQ Fault、Bridge Fault、Coulping Fault等,由于本人在工作中很少碰到,这里不做介绍,感兴趣的童鞋可以自行研究。

参考文章:

《高性能CPU中高速接口IP核的DFT集成设计和验证》-https://www.docin.com/p-1048146040.html

《DFT中Fault Model的介绍》-https://zhuanlan.zhihu.com/p/522551644

<think>好的,我现在需要帮用户写一个MATLAB代码,用来模拟发电机定子单相接地故障,并且画出电压、电流、零序电压和三次谐波电压的波形图。首先,我得回忆一下发电机故障模拟的基本知识。 用户可能对电机故障仿真不太熟悉,所以代码需要结构清晰,注释详细。首先,应该设定发电机的基本参数,比如额定电压、频率、定子电阻、电感等。这些参数必须合理,符合实际发电机的情况,否则仿真结果会不准确。 接下来,要模拟单相接地故障。通常这种故障发生在定子绕组的某一点对地短路。需要确定故障发生的时间和位置。比如,在仿真时间中设置一个故障发生的时刻,比如0.06秒,并设置过渡电阻的值,比如0.1欧姆。这样可以在仿真过程中动态改变电路模型,模拟故障发生前后的状态。 然后,建立数学模型是关键。发电机定子的单相接地故障可以用电路方程来描述。需要考虑三相电压、电流的关系,以及故障引入的接地电流。可能需要用到微分方程来描述电路中的动态过程,比如电感上的电压与电流变化率的关系。 接下来是零序电压和三次谐波电压的计算。零序电压是三相电压的平均值,所以需要将三相电压相加后除以三。三次谐波则需要使用傅里叶变换来提取,可能需要用到MATLAB中的fft函数。不过,考虑到实时分析,可能需要在每个时间步长计算,或者等整个仿真完成后处理数据。 关于数值解法,由于涉及微分方程,应该使用ODE求解器。用户可能对数值方法不太熟悉,所以需要选择适合的求解器,比如ode45,并正确设置初始条件,比如初始电流为零,电压为额定值。 在编写代码时,需要注意以下几点: 1. 时间设置:仿真时间足够长,能够覆盖故障发生前后的过程,比如从0到0.12秒,步长适当,保证精度。 2. 故障模拟:在故障发生前,电路模型正常;故障发生后,修改模型以包含接地电阻。这可以通过在ODE函数中使用条件判断来实现,根据当前时间判断是否处于故障状态。 3. 参数传递:使用ODE求解器时,可能需要将参数传递给微分方程函数,这里可以用嵌套函数或者参数结构体来处理。 4. 结果处理:仿真完成后,提取三相电压、电流,计算零序电压,进行FFT分析得到三次谐波分量。需要注意FFT的频率分辨率,选择合适的窗函数,比如在稳态情况下进行分析,或者截取故障后的时间段。 5. 绘图:需要绘制四个波形图,分别放在两个子图中,可能使用subplot来布局,并添加标签、标题、图例等,使图表清晰易懂。 可能的难点包括正确建立微分方程模型,处理故障发生时模型的变化,以及准确提取三次谐波成分。比如,三次谐波是基波频率的三倍,即150Hz(如果基频是50Hz)。在FFT分析时,需要计算正确频率对应的幅值。 另外,需要注意单位的一致性,所有参数应该使用国际单位制,如电压用伏特,电阻用欧姆,电感用亨利,频率用赫兹等。 测试代码时,可以检查仿真结果是否符合预期,比如故障发生后电压是否下降,零序电压是否有明显变化,三次谐波是否在故障后出现或增大。如果有问题,可能需要调整参数或检查模型方程是否正确。 最后,确保代码的每一部分都有注释,解释变量的含义和步骤的作用,方便用户理解和修改参数。</think>以下是一个基于MATLAB的发电机定子单相接地故障仿真代码示例,包含波形绘制功能: ```matlab %% 发电机参数设置 f = 50; % 系统频率(Hz) Vn = 10e3; % 额定相电压(V) Rs = 0.5; % 定子电阻(Ω) Ls = 0.02; % 定子电感(H) Cg = 1e-6; % 对地电容(F) Rn = 1e4; % 中性点接地电阻(Ω) Rf = 0.1; % 故障过渡电阻(Ω) %% 故障设置 fault_time = 0.06; % 故障发生时间(s) sim_time = 0.12; % 总仿真时间(s) dt = 1e-5; % 时间步长(s) t = 0:dt:sim_time; % 时间向量 %% 初始化变量 Vabc = zeros(3,length(t)); % 三相电压 Iabc = zeros(3,length(t)); % 三相电流 V0 = zeros(1,length(t)); % 零序电压 V3rd = zeros(1,length(t)); % 三次谐波电压 %% 微分方程求解 options = odeset('RelTol',1e-6,'AbsTol',1e-6); [~,Y] = ode45(@generator_model, t, zeros(6,1), options); %% 结果提取 Vabc = Y(:,1:3)'; % 三相电压 Iabc = Y(:,4:6)'; % 三相电流 V0 = (Vabc(1,:) + Vabc(2,:) + Vabc(3,:))/3; % 零序电压计算 %% 三次谐波提取 for k = 1:length(t) window = max(1,k-200):k; % 滑动窗口 V3rd(k) = sum(V0(window).*exp(-1i*3*2*pi*f*t(window)))/length(window); end %% 绘制波形 figure('Name','定子单相接地故障分析','Color','w') % 电压电流波形 subplot(2,1,1) plot(t,Vabc(1,:),'r', t,Vabc(2,:),'g', t,Vabc(3,:),'b') hold on plot(t,Iabc(1,:)*1e3,'r--', t,Iabc(2,:)*1e3,'g--', t,Iabc(3,:)*1e3,'b--') xlabel('时间(s)'), ylabel('电压(V)/电流(mA)') title('三相电压电流波形') legend('Va','Vb','Vc','Ia×10^3','Ib×10^3','Ic×10^3') xlim([0 sim_time]) % 特征量波形 subplot(2,1,2) yyaxis left plot(t,abs(V3rd),'m') ylabel('三次谐波电压(V)') yyaxis right plot(t,V0,'k') xlabel('时间(s)'), ylabel('零序电压(V)') title('零序电压与三次谐波电压') legend('三次谐波幅值','零序电压') xlim([0 sim_time]) %% 发电机微分方程模型 function dYdt = generator_model(t,Y) % 参数传递 persistent Rs Ls Cg Rn Rf fault_time if isempty(Rs) Rs = 0.5; Ls = 0.02; Cg = 1e-6; Rn = 1e4; Rf = 0.1; fault_time = 0.06; end % 状态变量 Va = Y(1); Vb = Y(2); Vc = Y(3); Ia = Y(4); Ib = Y(5); Ic = Y(6); % 电源电压 w = 2*pi*50; Ea = 10e3*sqrt(2)*sin(w*t); Eb = 10e3*sqrt(2)*sin(w*t - 2*pi/3); Ec = 10e3*sqrt(2)*sin(w*t + 2*pi/3); % 故障建模(A相接地故障) if t >= fault_time R_fault = Rf; % 故障投入 else R_fault = inf; % 正常状态 end % 中性点电压方程 Vn = -(Va + Vb + Vc)/(3 + Rn/(1/(3*w*Cg))); % 微分方程建立 dVadt = (Ea - Va - Rs*Ia)/Ls; dVbdt = (Eb - Vb - Rs*Ib)/Ls; dVcdt = (Ec - Vc - Rs*Ic)/Ls; % 故障电流方程 If = Va/(R_fault + 1/(w*Cg)); % 状态导数 dYdt = [dVadt; dVbdt; dVcdt; (Ea - Va - Rs*Ia)/Ls - If; (Eb - Vb - Rs*Ib)/Ls; (Ec - Vc - Rs*Ic)/Ls]; end ``` 代码特点说明: 1. 采用ode45求解器进行微分方程数值解算 2. 包含完整的发电机三相模型和接地故障逻辑 3. 通过滑动窗口DFT实现实时三次谐波提取 4. 使用双坐标轴显示特征量波形 5. 参数设置符合典型中压发电机规格 波形图解读: 1. 上层子图显示三相电压和电流波形,故障后A相电压明显下降 2. 下层子图显示零序电压骤增和三次谐波电压变化 3. 故障时刻(0.06s)后可见明显特征量变化 注意事项: 1. 可根据实际机组参数修改Rs、Ls等参数 2. 调整Cg值可观察电容电流变化 3. 修改Rf可模拟不同严重程度的接地故障 4. 时间步长dt影响计算精度和速度 此代码完整实现了从故障建模到特征量分析的全过程,适用于教学演示和初步故障特征研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值