MCP Scrubber Monitoring

1 Introduction


The scrubber is a device that bombards microchannel plates (MCP’s) with electrons, thus
“scrubbing” them. This is done both to stabilize the gain of the MCPs and to, as the name
would suggest, clean them of any residue. As detailed by Tyler Lutz in his collection of
design documents1
, a mercury vapor bulb and a nichrome layer on a fixed MCP serve as
the scrubber’s electron source. The number of electrons is then amplified by the fixed MCP.
The MCPs that are being scrubbed (the scrubbees) are situated between the fixed MCP
and an anode. A voltage is applied between the nichrome layer and the anode to accelerate
the stream of electrons towards the scrubbees. A uniform magnetic field is created with two
pairs of Helholtz coils, placed orthogonally to each other at the sides of the MCP’s in order
to ensure a uniform spread of electrons.
2 Measurements
Over the course of the scrubber’s scrubbing cycle, we would like to take several measurements: temperature, pressure, and the residual gases present. This lab currently has several
thermocouples, a Pfeiffer Compact FullRange Gauge PKR 2512
, and an SRS Residual Gas
Analyzer3 available to take these measurements, as well as a Raspberry Pi Model B4
to
control and log these devices and their outputs. Instead of a Gertboard5
, however, we will
be using a LabJack U6 Pro6
to extend the analog inputs of the Pi.
3 Components
We will be using the following:
Pfeiffer Compact FullRange Gauge PKR 251
This is a gauge designed for vacuum measurement in the pressure range of 5×10−9
to
1000 mbarr. We will use it to measure the pressure inside the scrubber.
Raspberry Pi Model B
The Raspberry Pi is a low cost, low power computer running a Debian-based Linux
distribution. It can be remotely accessed via ssh, and will run the monitoring program.
1 psec.uchicago.edu/library/doclib/documents/230
2www.pfeiffer-vacuum.com/en/products/measurement/activeline/activeline-gauges/
?detailPdoId=16099
3 www.thinksrs.com/products/RGA.htm
4 https://www.raspberrypi.org/documentation
5 https://www.sparkfun.com/products/retired/11773
6 http://labjack.com/u6

LabJack U6 Pro
This is a multifunction DAQ with 14 analog inputs with ranges of ±10, ±1, ±0.1,
and ±0.01 volts and a 22-bit effective resolution. Thus it can directly measure raw
thermocouple signals. While LabJack provides Windows software to easily log inputs,
it also provides a Linux driver and Python module (LabJackPython) which we will be
using to communicate with the U6 from the Raspberry Pi.
CB37 Terminal Board
The CB37 board7 provides screw terminals for the DB37 connector on the LabJack
U6, thus providing screw terminals for all 14 analog inputs.
5 K-Type Surface-mount Thermocouples SA1XL
These thermocouples8 have response times of less than 0.15 seconds and temperature
ranges of −73 degrees Celsius to 315 degrees Celsius. We will use them to measure the
temperature of the scrubber.
OMEGABOND 400 Cement
A high temperature, air set cement9
rated to 1427◦C, for adhering the thermocouples
to the scrubber.
ACDC Converter
This AC to DC wall mounted adapter10 provides 24 volts (at 0.5 amps) and will be
used to power the Pfeiffer Compact FullRange Gauge.
4 Infrastructure and Maintenance
4.1 Setup
The setup of this system is very simple – only minor soldering will be necessary.

  1. Connect the CB37 to the Labjack via the DB37 connector on the Labjack.
  2. Connect the LabJack to the Raspberry Pi via a USB A-to-B cord.
  3. Connect the thermocouples to the screw terminals of the CB37, with their probes
    cemented to the scrubber where needed. Make sure they are in the correct orientation!
  4. Cut the connector end off of the Pfeiffer gauge sensor cable11 and strip to reveal the
    wires within.
  5. Pins 4 and 5 (yellow wire and grey wire, respectively) must go to the ACDC wall
    adapter, with pin 4 going to the supply and pin 5 going to the ground. Pins 2 (brown
    wire) and 3 (green wire) must connect to the CB37, with pin 2 going to the analog
    input and pin 3 going to the gound. Pin 1 (white wire) and the shield should go to
    ground as well. Soldering a PCB board to help connect these wires is a good idea.
    7http://labjack.com/catalog/cb37-terminal-board-rev-21
    8http://www.omega.com/pptst/SA1XL.html
    9 http://www.omega.com/pptst/SA1XL.html
    10http://www.digikey.com/product-detail/en/SWI12-24-N-SC/T1284-ND/5052006
    11https://www.pfeiffer-vacuum.com/en/products/measurement/activeline/
    activeline-accessories/?detailPdoId=16130
  1. Connect the Raspberry Pi to the internet via the ethernet port and plug in the Raspberry Pi’s power supply.
    Currently the system is not capable of running the RGA, however configuring it to do so
    shouldn’t be too difficult. You must connect the pi to the RGA with a USB to RS232 cable
    (provided in the electronics box) and adapt Eric Spieglan’s “rgadev.py” (in the MargheritaCode folder) code.

4.2 Logging
The Raspberry Pi runs a Python program called “scrubberpi.py” to read voltages from the
LabJack, convert to temperature or pressure measurements, and record these measurements
in a text file. Conveniently, LabJack provides a Python module to connect to the U6,
which our logging program uses. The conversion equations and their constants for K-type
thermocouples can be found at the National Institute of Standards and Technology’s website
srdata.nist.gov/its90/main/. The code for this program can be found in the appendices
of this manual.

  1. To start the logging program, first ssh into the Raspberry Pi. For this particular pi

the ip address is 205.208.20.42, the username is “pi”, and the password is “forceevanidmegapolisconversantly”.

  1. Using the console of the Raspberry pi, go to the folder “ScrubberCode” and call “sudo
    python scrubberpi.py”. Any errors that occur will be printed to the console. This
    program will run indefinitely, unless you do a keyboard interrupt, kill the process
    directly, or the LabJack becomes disconnected.
  2. If you would like to read the measurements as they are logged, you should run the
    program in the background instead (call “sudo python scrubberpi.py &”), then go to
    the logs folder and call “tail -f nameoffile”. The files will be named according to this
    format: “temp-mm-dd-yy.txt” and “pressure-mm-dd-yy.txt” with the “mm” being the
    month, “dd” being the day, and “yy” being the year.
  3. To graph the data, there is a basic matplotlib plotter program included in the appendicies. The data can also be graphed in many other ways (MATLAB, etc). To use the
    included matplotlib program, you must first combine the data files into one file (if it
    is not already one file). Use the combine files program, but change the names of the
    files in the code to the names of the files you would like to combine. Then you may
    use the pressure plotter or temp plotter functions to plot your graphs

4.3 Maintenance
After the setup of this system is complete and the final configuration is established, the
system will be housed in an aluminum enclosure with the wires properly strain relieved.
Except for checking the secure connections of the wires, there is little maintenance that
needs to be done. The code and any necessary modules can be found on the project website,
at psec.uchicago.edu/Code, and of course on the Raspberry Pi itself.
Appendices
Listed here is all of the code used to run the monitoring system.

A Main Code

Th is code measures and l o g s tem pe r a t u re from 5 t h e rm oc o u pl e s and p r e s s u r e

from a P f e i f f e r PK−251 gauge . The o u t p u t f i l e s w i l l be l o c a t e d in t h e l o g s
f o l d e r . The l o g g i n g program can be s t o p p e d w i t h a keyb o a r d i n t e r r u p t , b u t
w i l l c a t c h o t h e r e r r o r s and p r i n t them t o c o n s o l e .
2
3 import u6
4 import time
5 import p f e i f f e r G a u g e
6 import rgadev
7 import typeKthermocouple
8
9
10 # These d e s c r i b e t h e i n p u t c h a n n el s on t h e l a b j a c k in use . Channels 0−5 are
r e a d i n g d i f f e r e n t t h e rm o c o u ple s
11 # and c h annel 6 i s r e a d i n g from t h e P f e i f f e r gauge .
12 pgaugeChannel = 6
13 thermoChannel= [ 0 , 1 , 2 , 3 , 4 , 5 ]
14
15 # Decl a re a l a b j a c k U6 o b j e c t from t h e u6 module
16 l ab J ac k = u6 . U6 ( )
17
18
19 # Th is code w i l l run i n d e f i n i t e l y , i t can be q u i t w i t h a keyb o a r d i n t e r r u p t (
C t r l C)
20 while True :
21 try :
22 # Open t h e f i l e s t h e measurements w i l l be l o g g e d in . These are l o c a t e d in
t h e l o g s f o l d e r
23 temp = open ( ’ . / l o g s /temp−{}. t x t ’ . forma t ( time . s t r f t i m e ( ’%m−%d−%y ’ ) ) , ’ a+’ )
24 p r e s s u r e = open ( ’ . / l o g s / p r e s s u r e −{}. t x t ’ . forma t ( time . s t r f t i m e ( ’%m−%d−%y ’ ) )
, ’ a+’ )
25
26 # The c o l d j u n c t i o n tem pe r a t u re in c e l s i u s , compensa t ing f o r t h e screw
j u n c t i o n tem pe r a t u re
27 coldJunctionTemp = l ab J ac k . getTemperature ( ) + 2. 5 − 2 7 3. 1 5
28
29 temps = [ ]
30 for a in thermoChannel :
31 # For each thermocouple , g e t t h e i t ’ s v o l t a g e in m i l l i v o l t s
32 t v o l t = ( ( l ab J a c k . getAIN ( a , r e s o l u t i o n I n d e x = 1 2 , g ai n I n d e x = 3 ) ∗ 1 0 0 0 )
+
33 typeKthermocouple . tempToVolts ( coldJunctionTemp ) )
34 temps . append ( s t r ( typeKthermocouple . voltsToTemp ( t v o l t ) ) )
35 e n t r y = ( ’ , ’ . j o i n ( temps ) + ’ , ’ + s t r ( time . time ( ) ) + ’ \n ’ )
36 temp . w ri t e ( e n t r y )
37
38 # Get t h e p r e s s u r e gauge ’ s v o l t a g e
39 p v ol t = l ab J ac k . getAIN ( pgaugeChannel , r e s o l u t i o n I n d e x = 1 2 , g ai n I n d e x = 0 )
40 c u r r e n t p r e s s u r e = p f e i f f e r G a u g e . v ol t s T oP r e s s u r e ( p v ol t )
41 p r e s s u r e . w ri t e ( ’ { } ,{ } \n ’ . forma t ( c u r r e n t p r e s s u r e , time . time ( ) ) )
42 time . s l e e p ( 1 )
43 except Excep ti on a s e :
44 # Th is w i l l c a t c h a l l e x c e p t i o n s and s im ply p r i n t them t o c o n s ol e ,
a l l o w i n g

t h e program t o i n d e f i n i t e l y

46 pr int e
47 pass
48 f i n a l l y :
49 # Upon e x i t i n g , t h e f i l e d e s c r i p t o r s must be c l o s e d
50 temp . c l o s e ( )
51 p r e s s u r e . c l o s e ( )

B Thermocouple Module

Th is module d e s c r i b e s t h e a p pr ox im a te r e f e r e n c e f u n c t i o n s and i n v e r s e

f u n c t i o n s f o r t y p e K t he rm oc o u pl e s . The r e f e r e n c e f u n c t i o n s g i v e t h e
t h e r m o e l e c t r i c v o l t a g e , E , as a f u n c t i o n o f tem per a ture , T, where E i s i n
mV and T i s in c e l s i u s . The i n v e r s e f u n c t i o n s g i v e tem pera ture , T, as a
f u n c t i o n o f t h e t h e r m o e l e c t r i c v o l t a g e , E , where E i s in mV and T i s in
c e l s i u s .
2
3 # A l l c o e f f i c i e n t s are from h t t p : / / s r d a t a . n i s t . gov / i t s 9 0 /main/
4
5
6 import math
7
8 # C o e f f i c i e i n t s f o r r e f e r e n c e f u n c t i o n s
9
10 # For −270 d e g r e e s C t o 0 d e g r e e s C
11 tempToVoltsCoe f f1 = [
12 0. 0E0 ,
13 0. 3 9 4 5 0 1 2 8 0 2 5 0E−1,
14 0. 2 3 6 2 2 3 7 3 5 9 8 0E−4,
15 −0.328589067840E−6,
16 −0.499048287770E−8,
17 −0.675090591730E−10,
18 −0.574103274280E−12,
19 −0.310888728940E−14,
20 −0.104516093650E−16,
21 −0.198892668780E−19,
22 −0.163226974860E−22
23 ]
24
25 # For 0 d e g r e e s C t o 1372 d e g r e e s C
26 tempToVoltsCoe f f2 = [
27 −0.176004136860E−1,
28 0. 3 8 9 2 1 2 0 4 9 7 5 0E−1,
29 0. 1 8 5 5 8 7 7 0 0 3 2 0E−4,
30 −0.994575928740E−7,
31 0. 3 1 8 4 0 9 4 5 7 1 9 0E−9,
32 −0.560728448890E−12,
33 0. 5 6 0 7 5 0 5 9 0 5 9 0E−15,
34 −0.320207200030E−18,
35 0. 9 7 1 5 1 1 4 7 1 5 2 0E−22,
36 −0.121047212750E−25
37 ]
38
39 # For 0 d e g r e e s C t o 1372 d e g r e e s C

 

tempToVoltsCoe f f3 = [
41 0. 1 1 8 5 9 7 6 0 0 0 0 0E0 ,
42 −0.118343200000E−3,
43 0. 1 2 6 9 6 8 6 0 0 0 0 0E3
44 ]
45
46 # C o e f f i c i e n t s f o r t h e i n v e r s e f u n c t i o n s
47
48 # For −200 d e g r e e s C t o 0 d e g r e e s C
49 # For −5.891 mV t o 0 mV
50 voltsToTempCoe f f1 = [
51 0. 0E0 ,
52 2. 5 1 7 3 4 6 2E1 ,
53 −1.1662878E0 ,
54 −1.0833638E0 ,
55 −8.977354E−1,
56 −3.7342377E−1,
57 −8.6632643E−2,
58 −1.0450598E−2,
59 −5.1920577E−4
60 ]
61
62 # For 0 d e g r e e s C t o 500 d e g r e e s C
63 # For 0 mV t o 2 0 . 6 4 4 mV
64 voltsToTempCoe f f2 = [
65 0. 0E0 ,
66 2. 5 0 8 3 5 5E1 ,
67 7. 8 6 0 1 0 6E−2,
68 −2.503131E−1,
69 8. 3 1 5 2 7E−2,
70 −1.228034E−2,
71 9. 8 0 4 0 3 6E−4,
72 −4.41303E−5,
73 1. 0 5 7 7 3 4E−6,
74 −1.052755E−8
75 ]
76
77 # For 500 d e g r e e s C t o 1372 d e g r e e s C
78 # For 2 0 . 6 4 4 mV t o 5 4 . 8 8 6 mV
79 voltsToTempCoe f f3 = [
80 −1.318058E2 ,
81 4. 8 3 0 2 2 2E1 ,
82 −1.646031E0 ,
83 5. 4 6 4 7 3 1E−2,
84 −9.650715E−4,
85 8. 8 0 2 1 9 3E−6,
86 −3.11081E−8
87 ]
88
89 def voltsToTemp ( v o l t s ) :
90 i f v o l t s < −5.891: 91 ra is e Excep ti on ( ” Unde fined the rm oc ouple v ol t a g e : v ol t a g e unde r r an ge ” ) 92 i f v o l t s > 5 4 . 8 8 6 :
93 ra is e Excep ti on ( ” Unde fined the rm oc ouple v ol t a g e : v ol t a g e o v e r r a n g e ” )
94 i f −5.891 <= v o l t s < 0 :
95 c o e f f i c i e n t s = voltsToTempCoe f f1
96 e l i f 0 <= v o l t s < 2 0 . 6 4 4 :

c o e f f i c i e n t s = voltsToTempCoe f f2
98 e l s e :
99 c o e f f i c i e n t s = voltsToTempCoe f f3
100 temp = 0
101 power = 0
102 for d in c o e f f i c i e n t s :
103 temp += d ∗ ( v o l t s ∗∗power )
104 power += 1
105 return temp
106
107 def tempToVolts ( temp ) :
108 i f temp < −270: 109 ra is e Excep ti on ( ” Unde fined tempe r a tu re : tempe r a tu re unde r r an ge ” ) 110 i f temp > 1 3 7 2:
111 ra is e Excep ti on ( ” Unde fined tempe r a tu re : tempe r a tu re o v e r r a n g e ” )
112 i f −270 <= temp < 0 :
113 v o l t s = 0
114 power = 0
115 c o e f f i c i e n t s = tempToVoltsCoe f f1
116 for c in c o e f f i c i e n t s :
117 v o l t s += c ∗ ( temp ∗∗ power )
118 power += 1
119 return v o l t s
120 e l s e :
121 v o l t s = 0
122 power = 0
123 c o n s t a n t = 0
124 c o e f f i c i e n t s = tempToVoltsCoe f f2
125 for c in c o e f f i c i e n t s :
126 v o l t s += ( c ∗ ( temp ∗∗ power ) )
127 power += 1
128
129 ex tended = ( tempToVoltsCoe f f3 [ 0 ] ∗ math . exp ( tempToVoltsCoe f f3 [ 1 ] ∗
130 ( temp−tempToVoltsCoe f f3 [ 2 ] ) ∗ ∗2 ) )
131 return v o l t s + ex tended

C Pressure Module

Th is module c o n t a i n s t h e f u n c t i o n t h a t c o n v e r t s t h e P f e i f f e r gauge v o l t a g e

t o p r e s s u r e , as d e s c r i b e d t h e P f e i f f e r Gauge PKR−251 manual , as found he re
:
2 # h t t p : / / edg . u c h i c a g o . edu / t u t o r i a l s /pumps/BG5155BEN . p d f in a p pen d ix A.
3 # I f an e r r o r occurs , t h i s f u n c t i o n r a i s e s an e x c e p t i o n wh ich w i l l be c a ug h t
by t h e main program and p r i n t e d t o c o n s o l e .
4
5
6 # t u r n s gauge v o l t a g e i n t o a p r e s s u r e in mbarr
7 def v ol t s T oP r e s s u r e ( v o l t s ) :
8 i f 8. 6 < v o l t s <= 9 . 5 : 9 ra is e Excep ti on ( ” Unde fined pgauge v ol t a g e : v ol t a g e o v e r r a n g e ” ) 10 e l i f v o l t s > 9 . 5 :
11 ra is e Excep ti on ( ”Pgauge s e n s o r e r r o r : Pi r a ni d e f e c t i v e ” )
12 e l i f 0. 5 <= v o l t s < 1 . 8 2 :
13 ra is e Excep ti on ( ” Unde fined pgauge v ol t a g e : v ol t a g e unde r r an ge ” )

e l i f v o l t s < 0 . 5 :
15 ra is e Excep ti on ( ”Pgauge s e n s o r e r r o r ” )
16 p r e s s u r e = 1 0 ∗ ∗ ( ( 1. 6 6 7 ∗ v o l t s ) − 1 1. 3 3 )
17 return p r e s s u r e

D Plotting

Ba s ic p l o t t e r u s i n g p y p l o t

2
3 import numpy a s np
4 import m a t pl o tli b
5 m a t pl o tli b . u se ( ’Agg ’ )
6 import m a t pl o tli b . p y pl o t a s p l t
7
8 def t em p pl o t t e r ( fil e n am e ) :
9 thermo0 , thermo1 , thermo2 , thermo3 , thermo4 , thermo5 , time = np . l o a d t x t (
fil e n am e ,
10 dtype=f l o a t , d e l i m i t e r = ’ , ’ , unpack = True )
11 p l t . pl o t ( time , thermo0 , c o l o r = ’ r ’ )
12 p l t . pl o t ( time , thermo1 , c o l o r = ’ b ’ )
13 p l t . pl o t ( time , thermo2 , c o l o r = ’ g ’ )
14 p l t . pl o t ( time , thermo3 , c o l o r = ’m’ )
15 p l t . pl o t ( time , thermo4 , c o l o r = ’ k ’ )
16 p l t . pl o t ( time , thermo5 , c o l o r = ’ g ol d ’ )
17 p l t . t i t l e ( ’ Thermocouples ’ )
18 p l t . x l a b e l ( ’ Time ( s e c o n d s ) ’ )
19 p l t . y l a b e l ( ’ Temperature ( C e l s i u s ) ’ )
20 p l t . s a v e f i g ( ’ Thermocouples ’ )
21
22 def p r e s s u r e p l o t t e r ( fil e n am e ) :
23 p r e s s u r e , time = np . l o a d t x t ( fil e n am e ,
24 dtype=f l o a t , d e l i m i t e r = ’ , ’ , unpack = True )
25 p l t . pl o t ( time , 1/ p r e s s u r e , c o l o r = ’ bl u e ’ )
26 #p l t . yl im ( ( 0 , 0 . 0 0 0 0 0 6 ) )
27 p l t . t i t l e ( ’ I n v e r s e P r e s s u r e ’ )
28 p l t . x l a b e l ( ’ Time ( s e c o n d s ) ’ )
29 p l t . y l a b e l ( ’ P r e s s u r e ( mbarr ) ’ )
30 p l t . s a v e f i g ( ’ I n v e r s e P r e s s u r e ’ )
31
32 #use t h i s t o comb ine f i l e s o f m u l t i p l e days t o p l o t a f u l l run
33 #you ’ l l have t o change t h e f i l e names d i r e c t l y he re
34 def c o m b i n e f i l e s ( ) :
35 #t h i s opens in append mode , so make s u re you d e l e t e any f i l e s w i t h t h e same
name b e f o r e runn ing t h i s code
36 f o u t = open ( ’ t o t a l p r e s s u r e . t x t ’ , ’ a ’ ) #be c a r e f u l !
37 for fname in ( ’ . / l o g s / p r e s s u r e −07−15−15. t x t ’ , ’ . / l o g s / p r e s s u r e −07−16−15. t x t ’
, ’ . / l o g s / p r e s s u r e −07−17−15. t x t ’ ,
38 ’ . / l o g s / p r e s s u r e −07−18−15. t x t ’ , ’ . / l o g s / p r e s s u r e −07−19−15. t x t ’
, ’ . / l o g s / p r e s s u r e −07−20−15. t x t ’ ) :
39 f = open ( fname )
40 for l i n e in f :
41 f o u t . w ri t e ( l i n e )
42 f . c l o s e ( )
43 f o u t . c l o s e ( )

c o m b i n e f i l e s ( )

46 t em p pl o t t e r ( ’ t o t al t em p s . t x t ’ )
47 p r e s s u r e p l o t t e r ( ’ t o t a l p r e s s u r e . t x t ’ )

Source: MCP Scrubber Monitoring


About The Author

Muhammad Bilal

I am highly skilled and motivated individual with a Master's degree in Computer Science. I have extensive experience in technical writing and a deep understanding of SEO practices.

Scroll to Top