Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

microstrip.annotated.cc

Go to the documentation of this file.
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 doxygen1.2.7