📄 kiu00.ptp
字号:
SUPPLY_NAME,SUPPLY_SETTING;
WRITE ID=MESFILE'VOLTAGE WAS %F%V. %NL%'VVAL1;
WRITE ID=MESFILE'TESTING ABORTED. %NL% %035%%NL%';
PWROK:
CLEAR MUX;
CLEAR SCAN;
LET UUT_POWER_STATUS = 'ON';
LOG; /* re-enable logging */
CALL CNTRL_C(CONTROL='ON'); /* enable control C processing */
END SUBROUTINE PWRUP;
SUBROUTINE PWRDN(); /* POWER DOWN ROUTINE */
/** This Subroutine is used to turn UUT Power off. **/
/** Make sure Logic, Mux, and Scanners are all cleared. **/
CLEAR LGC; CLEAR MUX; CLEAR SCAN;
/** If power is already off, then don't execute this subroutine! **/
IF UUT_POWER_STATUS = 'OFF' THEN RETURN;
PWRD:
CALL CNTRL_C(CONTROL='OFF'); /* disable control C processing */
CHECK_ID2:
/** If the target tester does not have Alliance supplies,
then skip the Alliance power down sequence...**/
IF POWER_TYPE <> 0 THEN [
WRITE ID=MESFILE 'Tester does not have Alliance User Supplies!%NL%';
WRITE ID=MESFILE 'Skipping Alliance Power-Down Code!%NL%';
BRANCH ALLIANCE_POWER_OFF;
];
/*** PROGRAM ALLIANCE POWER SUPPLIES TO ZERO VOLTS ***/
PS_OFF:
SET PS SEQUENCE = 2;
ALLIANCE_POWER_OFF:
/** Now that Power is turned off - Discharge any
capacitive voltages on the power nodes... **/
CALL DISCHARGE_POWER();
OPEN_A_RELAYS:
/** If the target tester does not have Alliance supplies,
then skip the Open Alliance power Relay sequence...**/
IF POWER_TYPE <> 0 THEN [
WRITE ID=MESFILE 'Tester does not have Alliance User Supplies!%NL%';
WRITE ID=MESFILE 'Skipping Alliance Disconnect Code!%NL%';
BRANCH PWRDN_MSG;
];
/* Disconnect the Alliance power supply relays. Please make
sure UUT voltages are discharged before executing the
following test programming statements. UUT power voltages
can be discharged by calling the DISCHARGE_POWER subroutine. */
PS_OPEN:
/** Disconnect Alliance Supplies...**/
SET PS SEQUENCE = 3;
PWRDN_MSG:
WRITE'POWER REMOVED FROM PC BOARD.%NL%%NL%';
SET PIO(0) HRLY(OPEN 3); /* GND RLY */
LET UUT_POWER_STATUS = 'OFF';
CALL CNTRL_C(CONTROL='ON'); /* enable control C processing */
END SUBROUTINE PWRDN;
SUBROUTINE DISCHARGE_POWER();
/*****************************************************************/
/** THIS SUBROUTINE DISCHARGES ANY CAPACITIVE VOLTAGES THAT MAY **/
/** BE ON THE UUT POWER NODES AFTER THE POWER SUPPLIES HAVE **/
/** BEEN TURNED OFF AND PRIOR TO OPENING OF THE POWER SUPPLY **/
/** RELAYS. NOTE: THIS DISCHARGE ROUTINE REQUIRES THE **/
/** TESTSTATION OR 228X TESTER TO BE CONFIGURED WITH THE ICA **/
/** ANALOG HARDWARE! **/
/*****************************************************************/
/** DECLARE LOCAL VARIABLES USED DURING THIS SUBROUTINE **/
DECLARE CNT;
DECLARE VVAL3;
DECLARE PASS_NUMBER;
DECLARE ALREADY_DISCHARGED;
DECLARE MIN_DISCH_V;
DECLARE MAX_DISCH_V;
DECLARE DISCH_THR;
DECLARE POWER_NODE_1 = 0; /* DISCHARGE VARIABLE 1 */
DECLARE POWER_NODE_2 = 0; /* DISCHARGE VARIABLE 2 */
END_DP_DEC:
WRITE '%033%:M** DISCHARGING UUT POWER NODES%033%:N%NL%';
/** MAKE SURE INSTRUMENT MUX AND PIN SCANNER ARE NOT CONNECTED **/
CLEAR MUX;
CLEAR SCAN;
DISCH_INIT:
/* DISABLE LOGGING DURING POWER DISCHARGE */
NOLOG;
USE NOFSUB;
/** INITIALIZE VARIABLES THAT WILL BE USED DURING DISCHARGE LOOP **/
LET PASS_NUMBER=1; /* USED TO LOOP THROUGH DISCHARGE ROUTINE */
LET ALREADY_DISCHARGED=1;/* USED TO INDICATE VOLTAGE IS DISCHARGED */
LET MIN_DISCH_V=40M; /* MIN DISCHARGE VOLTAGE IS 40 MILLIVOLTS */
LET MAX_DISCH_V=60; /* MAX DISCHARGE VOLTAGE IS 60 VOLTS */
/** CONNECT VOLTAGE METER **/
SET MUX AT(CHA=DCMVHI:CHB=DCMVLO);
/*****************************************************************/
/** THIS IS THE START OF THE DISCHARGE LOOP. DURING THE FIRST **/
/** PASS THE VOLTAGE IS MEASURED ON THE POWER NODES. DURING THE **/
/** SECOND PASS, THE 82 OHM RESISTOR IS USED TO DISCHARGE ANY **/
/** NODES THAT EXCEED THE VOLTAGE DISCHARGE THRESHOLD LEVEL. **/
/** DURING THE THIRD, AND FINAL, PASS, THE STM 10 OHM RESISTOR **/
/** IS USED TO DISCHARGE ANY NODES THAT REMAIN ABOVE THE **/
/** DISCHARGE THRESHOLD VOLTAGE. MEASURED VOLTAGES GREATER THAN **/
/** 60V CANNOT BE DISCHARGED USING THE STM RESISTORS - THEY **/
/** MUST BE DISCHARGED USING A PROPERLY RATED EXTERNAL RESISTOR **/
/** IN THE TEST FIXTURE! **/
/*****************************************************************/
NEXT_DISCHARGE_PASS:
/* USE 1 VOLT THRESHOLD FOR 1ST AND 40MV FOR OTHER PASSES */
IF PASS_NUMBER=2 THEN LET DISCH_THR=1;
IF PASS_NUMBER>2 THEN LET DISCH_THR=MIN_DISCH_V;
DIS_PN_1:
/* SKIP IF ALREADY DISCHARGED */
IF POWER_NODE_1 = ALREADY_DISCHARGED THEN BRANCH DIS_PN_1_END;
IF PASS_NUMBER = 1 THEN
[
SET SCAN AT(CHA=4:CHB=3); /* CONNECT SCANNER */
MEAS DCV DCM INTO VVAL3 MAX=60; /* MEASURE VOLTAGE */
IF ABS(VVAL3) < MIN_DISCH_V THEN POWER_NODE_1 = ALREADY_DISCHARGED;
ELSE
[
IF ABS(VVAL3) > 60 THEN
[
WRITE ID=MESFILE 'WARNING:VOLTAGE ACROSS POWER AND GROUND NODES%NL%';
WRITE ID=MESFILE 'WAS %F% VOLTS. VOLTAGES > 60V%NL%' VVAL3;
WRITE ID=MESFILE 'MUST BE DISCHARGED USING A FIXTURE RESISTOR!%NL%';
WRITE ID=MESFILE 'NODES:VCC_1_8V1 / GND%NL%%NL%';
POWER_NODE_1 = ALREADY_DISCHARGED; /* DON'T TRY TO DISCHARGE */
];
]; /* End of ELSE */
]; /* End of IF PASS_NUMBER = 1 */
DIS_PN_1_B:
IF PASS_NUMBER > 1 THEN
[
LET CNT = 0; /* Initialize Measurement Count Variable */
CLEAR STM;
SET SCAN AT(CHA=4:CHB=3); /* CONNECT SCANNER */
/* USE 82 OHM RESISTOR ON 2nd PASS, 10 OHM ON 3rd PASS */
IF PASS_NUMBER = 2 THEN SET STM RLY(1,2,18,20);
IF PASS_NUMBER > 2 THEN SET STM RLY(1,2,21,23);
MV_PN_1:
MEAS DCV DCM INTO VVAL3 LO=-DISCH_THR HI=DISCH_THR DLY=10M MAX=50 FAIL()
[
LET CNT=CNT+1;
IF CNT<50 THEN BRANCH MV_PN_1; /* LOOP UNTIL BELOW THRESHOLD */
];
IF ABS(VVAL3) < MIN_DISCH_V THEN POWER_NODE_1 = ALREADY_DISCHARGED;
ELSE
[
IF PASS_NUMBER = 3 THEN
[
WRITE ID=MESFILE 'FAILED TO DISCHARGE VOLTAGE BETWEEN%NL%';
WRITE ID=MESFILE 'POWER AND GROUND NODES%NL%';
WRITE ID=MESFILE 'MEASURED VOLTAGE WAS %F%%NL%%NL%' VVAL3;
WRITE ID=MESFILE 'NODES:VCC_1_8V1 / GND%NL%%NL%';
BITSET (FAIL,8);
];
]; /* End ELSE */
]; /* End of IF PASS_NUMBER > 1 */
DIS_PN_1_END:
DIS_PN_2:
/* SKIP IF ALREADY DISCHARGED */
IF POWER_NODE_2 = ALREADY_DISCHARGED THEN BRANCH DIS_PN_2_END;
IF PASS_NUMBER = 1 THEN
[
SET SCAN AT(CHA=5:CHB=3); /* CONNECT SCANNER */
MEAS DCV DCM INTO VVAL3 MAX=60; /* MEASURE VOLTAGE */
IF ABS(VVAL3) < MIN_DISCH_V THEN POWER_NODE_2 = ALREADY_DISCHARGED;
ELSE
[
IF ABS(VVAL3) > 60 THEN
[
WRITE ID=MESFILE 'WARNING:VOLTAGE ACROSS POWER AND GROUND NODES%NL%';
WRITE ID=MESFILE 'WAS %F% VOLTS. VOLTAGES > 60V%NL%' VVAL3;
WRITE ID=MESFILE 'MUST BE DISCHARGED USING A FIXTURE RESISTOR!%NL%';
WRITE ID=MESFILE 'NODES:VCC_PVRAM_VREFA1 / GND%NL%%NL%';
POWER_NODE_2 = ALREADY_DISCHARGED; /* DON'T TRY TO DISCHARGE */
];
]; /* End of ELSE */
]; /* End of IF PASS_NUMBER = 1 */
DIS_PN_2_B:
IF PASS_NUMBER > 1 THEN
[
LET CNT = 0; /* Initialize Measurement Count Variable */
CLEAR STM;
SET SCAN AT(CHA=5:CHB=3); /* CONNECT SCANNER */
/* USE 82 OHM RESISTOR ON 2nd PASS, 10 OHM ON 3rd PASS */
IF PASS_NUMBER = 2 THEN SET STM RLY(1,2,18,20);
IF PASS_NUMBER > 2 THEN SET STM RLY(1,2,21,23);
MV_PN_2:
MEAS DCV DCM INTO VVAL3 LO=-DISCH_THR HI=DISCH_THR DLY=10M MAX=50 FAIL()
[
LET CNT=CNT+1;
IF CNT<50 THEN BRANCH MV_PN_2; /* LOOP UNTIL BELOW THRESHOLD */
];
IF ABS(VVAL3) < MIN_DISCH_V THEN POWER_NODE_2 = ALREADY_DISCHARGED;
ELSE
[
IF PASS_NUMBER = 3 THEN
[
WRITE ID=MESFILE 'FAILED TO DISCHARGE VOLTAGE BETWEEN%NL%';
WRITE ID=MESFILE 'POWER AND GROUND NODES%NL%';
WRITE ID=MESFILE 'MEASURED VOLTAGE WAS %F%%NL%%NL%' VVAL3;
WRITE ID=MESFILE 'NODES:VCC_PVRAM_VREFA1 / GND%NL%%NL%';
BITSET (FAIL,8);
];
]; /* End ELSE */
]; /* End of IF PASS_NUMBER > 1 */
DIS_PN_2_END:
DONE_POWER_PASS_NUMBER:
/** INCREMENT PASS COUNTER - QUIT AFTER 3 PASSES **/
PASS_NUMBER = PASS_NUMBER + 1;
IF PASS_NUMBER < 4 THEN BRANCH NEXT_DISCHARGE_PASS;
DONE_POWER_DISCHARGE:
CLEAR MUX;
CLEAR STM;
CLEAR SCAN;
/** ENABLE DATA LOGGING **/
LOG;
END SUBROUTINE DISCHARGE_POWER;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -