00001 // microstrip.cc 00002 00003 // Create a superconducting microstrip line and use it to make a 00004 // simple 1/4 wave transformer, matching 30 Ohms to a 10 Ohm load 00005 // at 230 GHz. 00006 00007 #include "supermix.h" 00008 00009 int main() 00010 { 00011 // Setting our global parameters (always a good idea to do this first, 00012 // so we don't forget): 00013 00014 device::T = 4.2*Kelvin; // operating temperature 00015 device::f = 230*GHz; // this is the design frequency for the match 00016 device::Z0 = 30*Ohm; // one of the imdepances to match 00017 00018 00019 // ************************************************************************ 00020 // THE BASIC PROCEDURE TO CREATE A MICROSTRIP OBJECT: 00021 00022 // Before we can make a microstrip line, we need to create conductors 00023 // and dielectrics: 00024 00025 // Conductors are objects derived from type surfimp (for "surface 00026 // impedance"), defined in surfaceZ.h. We'll use a Niobium superconducting 00027 // film, so we need an object of type super_film. We then need to set the 00028 // physical characteristics by assigning the appropriate values to the 00029 // super_film member variables: 00030 00031 super_film nb; 00032 nb.Vgap = 2.9*mVolt; 00033 nb.Tc = 9.2*Kelvin; 00034 nb.rho_normal = 5.0*Micro*Ohm*Centi*Meter; 00035 nb.Thick = 3000*Angstrom; 00036 00037 // Now for the dielectrics. trlines.h defines the class const_diel which 00038 // we'll use. We'll build a thin-film microstrip using SiO as the substrate. 00039 // The declarations we're using below take 2 arguments which are used to 00040 // set the values of the dielectric constant and loss tangent of the 00041 // material: 00042 00043 const_diel SiO(5.6, .0001), air(1.0,0); 00044 00045 // Using these materials, we construct our microstrip object. Class 00046 // microstrip is also found in trlines.h. See how we can set all the 00047 // materials in a single statement, if we want. The substrate thickness 00048 // is also set here to a value typical for thin-film designs: 00049 00050 microstrip line; 00051 line.superstrate(air).substrate(SiO).top_strip(nb).ground_plane(nb); 00052 line.sub_thick = 2500*Angstrom; 00053 00054 // ************************************************************************ 00055 // We still need to set the width of the top conductor and the length of the 00056 // line. The width determines the characteristic impedance and propagation 00057 // constant of the line, so we must determine it first. To set the width, 00058 // we'll use a simple iterative solver. The impedance we want is the 00059 // geometric mean of the impedances to be matched. We get the characteristic 00060 // impedance of our transmission line by calling the member function 00061 // Zchar(freq,Temp). 00062 00063 double Zo = sqrt(30*Ohm * 10*Ohm); // match the real part of Zchar to this 00064 00065 line.width = 1.0*Micron; // initial guess for line width 00066 while( fabs(line.Zchar(device::f,device::T).real/Zo - 1.0) > 1.0e-6 ) 00067 // increase width if Zchar too high, decrease width if too low: 00068 line.width *= line.Zchar(device::f,device::T).real/Zo; 00069 00070 // Now that we have a width, we need a length. Calculate length from the 00071 // imaginary part of the propagation constant to give 1/4 wavelength. The 00072 // member function call Kprop(freq,Temp) gives the propagation constant. 00073 00074 line.length = .25 * 2*Pi/line.Kprop(device::f,device::T).imaginary; 00075 00076 00077 // ************************************************************************ 00078 // Now to test our transformer. Terminate the line with a 10 Ohm load and 00079 // look at S11 using our 30 Ohm normalizing impedance. It should be small 00080 // at 230 GHz. 00081 00082 zterm load(10*Ohm); // zterm is a 1-port terminator found in elements.h 00083 cascade stub; // cascade is found in circuit.h 00084 stub.add(line).add(load); // now we have a 1-port line terminated by load 00085 00086 cout << "# 1/4 wave superconducting Niobium/SiO microstrip transformer" << endl 00087 << "# to match 10 Ohms to 30 Ohms at " << device::f/GHz << " GHz." << endl; 00088 00089 cout << endl 00090 << "# Microstrip physical characteristics:" << endl 00091 << "# Temperature: " << device::T/Kelvin << " Kelvin" << endl 00092 << "# Nb thickness: " << nb.Thick/Angstrom << " Angstrom" << endl 00093 << "# SiO thickness: " << line.sub_thick/Angstrom << " Angstrom" << endl 00094 << "# line width: " << line.width/Micron << " Micron" << endl 00095 << "# line length: " << line.length/Micron << " Micron" << endl 00096 << "# line Zo: " << line.Zchar(device::f,device::T).real/Ohm 00097 << " Ohm" << endl; 00098 00099 cout << endl 00100 << "# f(GHz)" << "\t" << "Match (dB)" << endl 00101 << "# ------" << "\t" << "----------" << endl; 00102 00103 for(device::f = 200*GHz; device::f <= 260*GHz; device::f += 5*GHz) { 00104 cout << " " << setw(6) 00105 << device::f/GHz << "\t" << stub.get_data().SdB(1,1) << endl; 00106 } 00107 00108 }
Please direct comments and corrections to
supermix@submm.caltech.edu
Go to the supermix home page
Generated by
1.2.7