HW-KelvinTest 加流测压,Kelvin VI源的FH\SH、FL\SL同时参考同一个地,形成回路。 class HW_Kelvin_test { public: HW_Kelvin_test(VISource_FOVI _channel, char *_ParamName1, unsigned int _K1, double _OutVal) { channel = _channel; ParamName1 = _ParamName1; K1 = _K1; OutVal = _OutVal; } ~HW_Kelvin_test() {} void hw_test() { double l_results[NUM_SITES] = {0.0}; double l_voltage[NUM_SITES] = {0.0}; double l_current[NUM_SITES] = {0.0}; CBIT_ABRelayOn(K1, -1); // Set up closing relay K17_S1B DelaymS(3); FOVI_SetMode(channel, pFI, pFOVI_5V, pFOVI_10mA); DelaymS(3.0); FOVI_SetOutVal(channel, OutVal mA); // Current output 1 mA DelaymS(1.0); // Measure the channel KELVIN output voltage and sampling times 10 and time interval 0.01ms FOVI_MeasureVSamp(channel, Average_Value, 0.01, 10); GetResultAll(NUM_SITES, l_voltage); FOVI_MeasureISamp(channel, Average_Value, 0.01, 10); GetResultAll(NUM_SITES, l_current); FOR_EACH_SITE(g_site, NUM_SITES) { l_results[g_site] = l_voltage[g_site] * 1E3 / (l_current[g_site] + 1E-12); } LogResultAll(ParamName1, NUM_SITES, 0, l_results); FOVI_SetOutVal(channel, 0 mA); CBIT_ABRelaySetOff(K1, -1); DelaymS(0.2); FOVI_Init(channel); DelaymS(1); } private: VISource_FOVI channel; char *ParamName1; unsigned int K1; double OutVal; }; void HW_KelvinTest(VISource_FOVI channel, char *ParamName1, unsigned int K1, double OutVal) { double l_results[NUM_SITES] = {0.0}; double l_voltage[NUM_SITES] = {0.0}; double l_current[NUM_SITES] = {0.0}; CBIT_ABRelayOn(K1, -1); // Set up closing relay K17_S1B DelaymS(3); FOVI_SetMode(channel, pFI, pFOVI_5V, pFOVI_10mA); DelaymS(3.0); FOVI_SetOutVal(channel, OutVal mA); // Current output 1 mA DelaymS(1.0); // Measure the channel KELVIN output voltage and sampling times 10 and time interval 0.01ms FOVI_MeasureVSamp(channel, Average_Value, 0.01, 10); GetResultAll(NUM_SITES, l_voltage); FOVI_MeasureISamp(channel, Average_Value, 0.01, 10); GetResultAll(NUM_SITES, l_current); FOR_EACH_SITE(g_site, NUM_SITES) { l_results[g_site] = l_voltage[g_site] * 1E3 / (l_current[g_site] + 1E-12); } LogResultAll(ParamName1, NUM_SITES, 0, l_results); FOVI_SetOutVal(channel, 0 mA); CBIT_ABRelaySetOff(K1, -1); DelaymS(0.2); FOVI_Init(channel); DelaymS(1); } Capatitence Test 电容充电过程: 电容微分公式,C = I * dt / du,给一个电流(例如电容单位uF,电压单位V,时间单位mS,则应给到mA量级的电流),取电压线性的两个点,求电容。 // C = I * dt / du void FOVISourceCapatitanceTest(VISource_FOVI channel, char *ParamName1, unsigned int k1, FOVI_Irange IRange, FOVI_Vrange VRange, double OutVal) { double l_results[NUM_SITES] = {0.0}; double l_voltage[NUM_SITES] = {0.0}; double l_voltage1[NUM_SITES] = {0.0}; FOVI_SetMode(channel, pFI, VRange, IRange); DelaymS(3); CBIT_ABRelayOn(k1, -1); DelaymS(3); FOVI_SetOutVal(channel, OutVal); DelaymS(3); FOVI_MeasureVSamp(channel, Average_Value, 0.01, 10); GetResultAll(NUM_SITES, l_voltage1); DelaymS(1.5); FOVI_MeasureVSamp(channel, Average_Value, 0.01, 10); GetResultAll(NUM_SITES, l_voltage); for (g_site = 0; g_site<NUM_SITES; g_site++) { l_results[g_site] = OutVal * 1.5 / (l_voltage[g_site] - l_voltage1[g_site] + 1e-12); //g_results[g_site] = g_results[g_site] * 1e6; //////F to uF } LogResultAll(ParamName1, NUM_SITES, 0, l_results); FOVI_SetOutVal(channel, 0 mA); CBIT_ABRelaySetOff(k1, -1); DelaymS(0.2); FOVI_Init(channel); DelaymS(1); } 打开继电器,测量电容,关闭继电器。 void FOVISourceAWG_CapatitanceTest(/*unsigned int K1, */VISource_FOVI Channel, AWG_VISOURCE emTrigChannel, double TrigVal, double OutVal, int DataNum, int start_point, int end_point, int unitChange, char *ParamName, FOVI_Irange IRange, FOVI_Vrange VRange) { double l_results[NUM_SITES] = {0.0}; double l_voltage[NUM_SITES] = {0.0}; double l_current[NUM_SITES] = {0.0}; double l_AwgData[2000] = { 0.0 }; double l_DataResultV[2000] = { 0.0 }; double l_DataResultI[2000] = { 0.0 }; double l_Samptime = 0.02 ; //100uS one ramp_step int l_SampleNumber = 1; //CBIT_ABRelayOn(K1,-1); FOVI_SetMode(Channel, pFI, VRange, IRange); DelaymS(3); AWG_CreateRampData(l_AwgData, DataNum, OutVal, OutVal); FOVI_AwgLoader(Channel, "WAVE1", l_AwgData, DataNum); FOVI_AwgSelect(Channel, l_Samptime, l_SampleNumber, DataNum); FOVI_AwgSetTrigVal(Channel, Voltage, TrigVal, Pos_Edge); FOVI_AwgSetSync(Channel, Sync_ON); AWG_RunTrigSync(emTrigChannel, emTrigChannel); FOVI_AwgSetSync(Channel, Sync_OFF); FOR_EACH_SITE(g_site, NUM_SITES) { FOVI_AwgMeasResult(g_site, Channel, MV, l_DataResultV); FOVI_AwgMeasResult(g_site, Channel, MI, l_DataResultI); l_results[g_site] = l_Samptime * (end_point - start_point) * l_DataResultI[(end_point - start_point)/2] * unitChange / (l_DataResultV[end_point] - l_DataResultV[start_point] + 1E-12); } LogResultAll(ParamName, NUM_SITES, 0, l_results); FOVI_SetOutVal(Channel, 0 mA); //CBIT_ABRelaySetOff(K1, -1); //DelaymS(1); //FOVI_Init(Channel); //DelaymS(1); } Resistance Test R = U / I void FOVISourceResistanceTest(VISource_FOVI channel, char* ParamName1, double OutVal, int SampleN, unsigned int k1, int unitChange) { double l_results[NUM_SITES] = {0.0}; double l_voltage[NUM_SITES] = {0.0}; double l_current[NUM_SITES] = {0.0}; CBIT_ABRelaySetOn(k1, -1); FOVI_SetMode(channel, pFI, pFOVI_10V, pFOVI_10mA); DelaymS(3); FOVI_SetOutVal(channel, OutVal); DelaymS(5); FOVI_MeasureVSamp(channel, Average_Value, 0.01, SampleN); GetResultAll(NUM_SITES, l_voltage); FOVI_MeasureISamp(channel,Average_Value,0.01,10); GetResultAll(NUM_SITES, l_current); FOR_EACH_SITE( g_site, NUM_SITES ) { l_results[g_site] =l_voltage[g_site] * unitChange / (l_current[g_site]+ 1e-12); } LogResultAll(ParamName1, NUM_SITES, 0, l_results); FOVI_SetOutVal(channel, 0 mA); CBIT_ABRelaySetOff(k1, -1); DelaymS(1); FOVI_Init(channel); DelaymS(1); } Contact Test Test method: Ground for all pins(Usually, force 0V with 1mA current range) Force -0.1mA with 2V voltage range on the on-test pin -if contact well, MV-->0.5V(forward voltage of protection diode. The value is variable in practice) -if contact Open, MV >> 2V -if contact Short, MV-->0V 不建议直接加硫测压,因为当相邻两个pin短路时,并联分流导致测的结果不准;加压钳流的好处,并联对Open/Short的结果不影响。 void FOVISourceOpenShortTest(VISource_FOVI channel, char* ParamName1, double OutVal, int SampleN) { double l_results[NUM_SITES] = {0.0}; double l_voltage[NUM_SITES] = {0.0}; double l_current[NUM_SITES] = {0.0}; FOVI_ChangeIRang(channel, pFOVI_100uA); FOVI_SetOutVal(channel, OutVal V); DelaymS(2); FOVI_MeasureVSamp(channel, Average_Value, 0.01, SampleN); GetResultAll(NUM_SITES, l_voltage); LogResultAll(ParamName1, NUM_SITES, 0, l_voltage); FOVI_SetOutVal(channel, 0 V); FOVI_ChangeIRang(channel,pFOVI_1mA); DelaymS(1); FOVI_Init(channel); DelaymS(1); } |