RP Photonics

Software … leistungsfähige Tools für Ihre Forschung & Entwicklung!

English

RP Coating – das Software-Werkzeug für das
Design optischer Vielschichtstrukturen

Beispiel: Polarisierender Strahlteilerwürfel mit MacNeille-Design

Hier entwickeln wir ein Design für einen Dünnschichtpolarisator in Form eines polarisierenden Strahlteilerwürfels, bei dem die Schichtstruktur zwischen zwei 45°-Prismen eingebaut ist.

Die grundlegende Idee des gebräuchlichen MacNeille-Designs ist es, die Reflektivität für p-Polarisation dadurch zu elimieren, dass man den Brewster-Winkel an allen internen Oberflächen hat. So ist es einfach, eine hohe Reflektivität für s-Polarisation mit einem einfachen Bragg-Spiegel zu erreichen, ohne dadurch eine wesentliche Reflektivität für p-Polarisation zu verursachen. Die Brewster-Bedingung erfordert jedoch, dass ein Substratmaterial mit einem Brechungsindex gewählt wird, der zum der gewählten Coating-Materialien gut passt. Für die äußeren Oberflächen benötigt man Anti-Reflex-Schichten, die wir hier jedoch nicht betrachten.

polarizing cube

Wir streben ein Design an, welches zwischen 900 nm und 1200 nm gut funktioniert. Zunächst wählen wir die Materialien. Wenn wir uns für Schichten aus TiO2 und SiO2 entscheiden, müssen wir ein passendes Substratmaterial wählen, um die Brewster-Bedingung zu erfüllen. Wir benutzen eine Gleichung für die idealen Brechungsindex des Substrats, und haben gefunden, dass das SF11-Glas von Schott relativ gut passt:

d_units: nm
l_units: nm
 
l := 1064  { operation wavelength }
 
n_L := n_SiO2(l * l_units)
n_H := n_TiO2(l * l_units)
n_S_opt := n_H * n_L / sqrt(n_H^2 + n_L^2) / sin(theta)
  { optimum substate index for a MaxNeille polarizer }
show "n_S_opt:   ", n_S_opt:f3
n_S(l) := n_SF11(l)  { chosen substrate material }
n_S := n_S(l * l_units)
show "n_S:       ", n_S:f3

Dann implementieren wir das grundlegende Design:

theta_L := arcsin(n_S * sin(theta) / n_L)
d_L := (l / n_L / 4) / cos(theta_L)
theta_H := arcsin(n_S * sin(theta) / n_H)
d_H := (l / n_H / 4) / cos(theta_H)
N_Bragg := 4  { number of layer pairs }
 
beam from superstrate
substrate: S
for j := 1 to N_Bragg do
begin
* SiO2, d = d_L, d_max = 2 * d_L
* TiO2, d = d_H, d_max = 2 * d_H
end
* SiO2, d = d_L, d_max = 2 * d_L
superstrate: S

Nun definieren wir die Zielfunktion:

FOM() := sum(l := 900 to 1200 step 5,
       sum(dtheta := -2 deg to +2 deg step 0.5 deg,
  R_p(l,theta + dtheta)^2 + 10 * T_s(l,theta + dtheta)^2))

Hier berücksichtigen wir einen gewissen Bereich von Einfallswinkeln und verwenden ein 10 mal größeres Gewicht für die Transmission bei s-Polarisation. Solche Parameter hängen natürlich von den jeweiligen Bedürfnissen ab.

Wir können die Performance nun mit einer einfachen lokalen Optimierung weiter verbessern:

optimize coating for minimum of FOM()

Das erste Diagramm zeigt das Reflektivitätsprofil:

diagram 1:
 
"Reflectivity Profile"
 
["Merit value: ", FOM():d3]
 
x: 400, 2000
"wavelength (nm)", @x, size = %5
y: 0, 100
"reflectivity (%)", @y, size = %5
frame
hx
hy
legpos 420, 150
 
f: 100 * R_s(x, theta), "s polarization",
  color = red, width = 3, step = 1
 
f: 100 * R_p(x, theta), "p polarization", style = dashed,
  color = red, width = 3, step = 1
 
! begin
    setcolor(gray);
    line(l,l + i * CS_y2)
  end
reflectivity profile of a thin-film polarizing cube

Dann testen wie die Empfindlichkeit auf Änderungen des Einfallswinkels:

diagram 2:
 
"Variation of the Angle of Incidence"
 
x: 40, 50
"angle of incidence (°)", @x
y: 0, 100
"reflectivity (%)", @y
frame
hx
hy
 
f: 100 * R_s(l, x * deg), "s polarization",
  color = red, width = 3
f: 100 * R_p(l, x * deg), "p polarization",
  color = red, width = 3, style = dashed
angular sensitivity of a thin-film polarizing cube

Wir sehen, dass eine gute Performance nur in einem relativ engen Winkelbereich erzielt wird. Dies ist typisch für solche Designs.

Schließlich zeigen wir das erhaltene Design an:

diagram 3:
 
x: -500, get_d(0) + 500
"position (nm)", @x
y: 0, 3
"refractive index (nm)", @y
frame
 
! begin
    for j := 1 to nolayers() do
    begin
      var g;
      g := if get_material$(j) = "TiO2" then 0.8 else 0.9;
      setcolor(rgb(g, g, g));
      box(get_z(j), get_z(j + 1) + i * CS_y2);
    end;
    draw_cs(); { draw the coordinate system again }
  end
 
[get_d(j):f0:"nm"],
  (get_z(j) + 0.5 * get_d(j))c, (0.1 * CS_y2)b, direction = 90,
  for j := 1 to nolayers()
"substrate", (-200)c, (0.1 * CS_y2)b, direction = 90
"superstrate", (get_d(0) + 200)c, (0.1 * CS_y2)b, direction = 90
 
f: n(x,l), step = 1, color = blue
design of a thin-film polarizing cube
arrow