User-web.icecube.wisc.edu



HV Control Board Functional Test Definition

February 10, 2005

N. Kitamura

Notes

The total time should be about 5 minutes.

The tests must be very simple for the operator to perform.

The HV generator’s specs are valid only after one hour of warm up.

Check the test fixture’s power supply voltage and regulation.

The scope of the tests—can’t do long term stability, line rejection, etc.

Focus on detecting clear defects in two categories:

Correct power up and power down

Voltage accuracy and short term stability (= 2

last = ID[0]

if int(last, 16)==0:

return 'fail'

for i in range(1, len(ID)):

if ID[i]last:

return 'fail'

else:

last = ID[i]

self.HVIDreads = ID

return 'pass'

def _linearity_test(self, D, A, H):

"""

This function is called by check_HVrampUP and check_HVrampDN.

Let D, A, and H be DAC, ADC, and HV, respectively.

Dv, Av, Hv = Scaled voltage units (nom range 0 - 2.047.5V)

Model:

Av = a1 * Dv + b1

Hv = a2 * Dv + b2

Pass |a1 - 1| < ADC_LINEARITY_ERROR

|a2 - 1| < HV_LINEARITY_ERROR

i.e., both slopes must be within (specified value x 100)% of unity.

"""

assert len(D)==len(A)

assert len(D)==len(H)

# See scale(...) in calc.py

Dv = scale(DAC_VOLT_PER_BIT, D)

Av = scale(ADC_VOLT_PER_BIT, foreach(A, float))

Hv = scale(HV_DIVIDER_SCALE, foreach(H, float))

a1, b1 = lsm(Dv, Av) # Least-square fit

a2, b2 = lsm(Dv, Hv)

ans = ''

if abs(a1 - 1)< ADC_LINEARITY_ERROR:

ans = ans + 'ADC_pass'

else:

ans = ans + 'ADC_fail'

ans = ans + '+'

if abs(a2 - 1)< HV_LINEARITY_ERROR:

ans = ans + 'HV_pass'

else:

ans = ans + 'HV_fail'

return ans, a1, b1, a2, b2

def check_HVrampUP(self):

ans, a1, b1, a2, b2 = self._linearity_test(self.DAC, self.ADCup, self.Voltup)

self.HVrampUP_fit = [a1, b1, a2, b2]

return ans

def check_HVrampDN(self):

self.ADCdn.reverse()

self.Voltdn.reverse()

ans, a1, b1, a2, b2 = self._linearity_test(self.DAC, self.ADCdn, self.Voltdn)

self.ADCdn.reverse()

self.Voltdn.reverse()

self.HVrampDN_fit = [a1, b1, a2, b2]

return ans

def check_HVenable(self):

"""

Pass

ADC and HV values reach within EN_READY_LEVEL*100 % of target value

in EN_READY_TIME seconds after HV is enabled, where the target value

is one set by DAC_ENABLE_VAL.

"""

Vadc0 = DAC_ENABLE_VAL*DAC_VOLT_PER_BIT #Target ADC voltage

Vhv0 = Vadc0/HV_DIVIDER_SCALE #Target volt meter voltage

i = int(EN_READY_TIME / ENABLE_WAIT_SEC) #When to check / dwell time per pt

if i >= ENABLE_TIMES:

i = ENABLE_TIMES-1

Vadc1 = float(self.ADCen[i])*ADC_VOLT_PER_BIT

Vhv1 = float(self.Volten[i])

ans = ''

if abs((Vadc1 - Vadc0)/Vadc0) < EN_READY_LEVEL:

ans = ans + 'ADC_pass'

else:

ans = ans + 'ADC_fail'

ans = ans + '+'

if abs((Vhv1 - Vhv0)/Vhv0) < EN_READY_LEVEL:

ans = ans + 'HV_pass'

else:

ans = ans + 'HV_fail'

return ans

def check_HVdisable(self):

"""

Pass

ADC and HV values fall by DIS_READY_LEVEL*100 % from the initial value

in DIS_READY_TIME seconds after HV is disabled, where the initial value

is one set by DAC_ENABLE_VAL.

"""

Vadc0 = DAC_ENABLE_VAL*DAC_VOLT_PER_BIT

Vhv0 = Vadc0/HV_DIVIDER_SCALE

i = int(DIS_READY_TIME / DISABLE_WAIT_SEC)

if i >= DISABLE_TIMES:

i = DISABLE_TIMES-1

Vadc1 = float(self.ADCdis[i])*ADC_VOLT_PER_BIT

Vhv1 = float(self.Voltdis[i])

ans = ''

if abs((Vadc1 - Vadc0)/Vadc0) > DIS_READY_LEVEL:

ans = ans + 'ADC_pass'

else:

ans = ans + 'ADC_fail'

ans = ans + '+'

if abs((Vhv1 - Vhv0)/Vhv0) > DIS_READY_LEVEL:

ans = ans + 'HV_pass'

else:

ans = ans + 'HV_fail'

return ans

def check_HVreads(self):

"""

Statistical test after repeated readout at a fixed DAC value.

(m1, s1) = ADC value mean, stdev

(m2, s2) = HV value mean, stdev

m10 = DAC_ENABLE_VAL (fixed DAC value)

m20 = DAC_ENABLE_VAL * DAC_VOLT_PER_BIT

Pass

|(m1 - m10)/m10| < ADC_MEAN_ERROR

|(m2 - m20)/m20| < HV_MEAN_ERROR

s1 < ADC_STD_ERROR

s2 < HV_STD_ERROR

"""

(m1, s1) = meansdev(foreach(self.ADCrep, float))

# tmp = scale(HV_DIVIDER_SCALE, foreach(self.Vrep, float))

(m2, s2) = meansdev(scale(HV_DIVIDER_SCALE, foreach(self.Vrep, float)))

# (m2, s2) = meansdev(foreach(self.Vrep, float))

m10 = DAC_ENABLE_VAL

m20 = DAC_ENABLE_VAL * DAC_VOLT_PER_BIT

ans = ''

if abs((m1 - m10)/m10)< ADC_MEAN_ERROR and s1 < ADC_STD_ERROR:

ans = ans + 'ADC_pass'

else:

ans = ans + 'ADC_fail'

ans = ans + '+'

if abs((m2 - m20)/m20)< HV_MEAN_ERROR and s2 < HV_STD_ERROR:

ans = ans + 'HV_pass'

else:

ans = ans + 'HV_fail'

self.HVreads_stat = [m1, s1, m2, s2]

return ans

def judge(self):

"""

Fail, if there is at least one test that failed.

Pass, otherwise.

"""

how_many = 0

failed = []

for (k,v) in self.test_result.items():

tmp = v.count('fail')

if tmp 0:

failed.append(k)

how_many += tmp

return how_many, failed

Appendix hvglobals2.pyw (check if this is the same as prod version)

"""

Global Definitions for test_manager2.py

hv_globals2.py

For PY4 IceCube production of the HV Control Boards

"""

## Program identification

TESTSCRIPT_NAME = 'IceCube HV Control Test Script 3/16/2005'

## File locations

DATA_PATH = 'c:\\hvtest2005\\data' # Test data directory

PARAM_PATH = 'c:\\hvtest2005\\param' # Test run log files

## Names of the test run log files ("parameter files")

OPERATOR_LIST_FILE = 'OPERATOR_LIST.LST' # Catalog of operators

DATAFILE_LIST_FILE = 'DATAFILE_LIST.LST' # Catalog of data files

RUNID_LIST_FILE = 'RUNID_LIST.LST' # Catalog of RunIDs

SERIAL_NUM_LIST_FILE = 'SERIAL_NUM_LIST.LST' # Catalog of all the serial numbers

HV_BRICK_LIST_FILE = 'HV_BRICK_LIST.LST' # Catalog of all the brick numbers

## The following symbols are used in the Run IDs and the data file names

## ::=

## PARAM_SEPPARAM_SEPPARAM_SEP

## ::= .DATA_EXT

RUNID_PREFIX = 'PES' # Pensar Electronic Solutions

PRODUCT_NAME = 'HVC' # High-voltage control board

PARAM_SEP = '_' # Separator used in Run ID and Data Filename

DATA_EXT = 'DAT' # Data filename extention

## Needed for legacy reason

DEFAULT_IP_ADDRESS = '172.16.35.111'

## COM port assignment

## A Lantronix terminal server was used in CY2004 production. For CY2005, both the Fluke45

## meter and the DOMMB are connected to the PC USB ports using a COM-to-USB adapter for each

## port.

# Note the port number starts from zero.

# e.g., COM1==>0, COM2==>1, etc.

DEFAULT_DOMMB_PORT = 3 # Port number for DOMMB (COM4)

DEFAULT_DVMM_PORT = 2 # Port number for the Fluke 45 DMM (COM3)

## ADC and DAC scaling factor

DAC_VOLT_PER_BIT = 0.5 # DAC LT1257 scale

ADC_VOLT_PER_BIT = 0.5 # ADC LT1286 scale

## DVM readout scaling factor

## The HV output is connected to a 130MOhm standard load which also acts as a voltage divider.

## (HV volt) = HV_DIVIDER_SCALE * (DVM readout)

HV_DIVIDER_SCALE = 978.44 # Resistor ratio measured with Fluke45 (3/11/2005)

# The ratio is consistent with calibration measurements

# made with a standard HV supply (Model HV-1547,

# Power Designs Pacific, Inc.)

## hvid test parameters

REPEAT_HVID_TIMES = 10 # Read this many times consistently to pass

## Linearity test parameters

RAMP_WAIT_SEC = 0.1 # Wait before next DAC value. Defines ramping speed.

ADC_LINEARITY_ERROR = 0.025 # The slope shall not deviate from unity by more than this

HV_LINEARITY_ERROR = 0.025 # (ditto)

## HV enable test parameters

ENABLE_TIMES = 30 # Number of data points (how many times to read ADC)

ENABLE_WAIT_SEC = 0.1 # Time between reads

DAC_ENABLE_VAL = 3000 # This defines V0

EN_READY_TIME = 5 # = t1 Check ready after this many seconds

EN_READY_LEVEL = 0.1 # = K Pass iff |(V(t1) - V0)/V0| < K

## HV disable test parameters

DISABLE_TIMES = 30 # Number of data points (how many times to read ADC)

DISABLE_WAIT_SEC = 0.1 # Time between reads

DIS_READY_TIME = 5 # = t2 Check if ready after this many seconds

DIS_READY_LEVEL = 0.9 # = L Pass iff |(V0 - V(t2))/V0| < L

## Repeated HV read test parameters

REPEAT_READ_TIMES = 100 # Read this many times for statistics

REPEAT_WAIT_SEC = 0.5 # Wait this long between reads

ADC_MEAN_ERROR = 0.03 # ADC mean must stay within this fraction of target (DAC)

HV_MEAN_ERROR = 0.03 # HV mean must stay within this fraction of target

ADC_STD_ERROR = 1 # The StdDev of ADC reads must be less than this

HV_STD_ERROR = 1 # The StdDev of HV reads must be less than this

## Shut down test parameters

FINISH_WAIT_SEC = 15 # = t3 Wait period before telling operator that test is done

HV_FINISH_VOLT = 30 # HV output (V) must be less than this t3 after IceBoot

# disable command

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download