Table des matières Python

Télescope de Maksutov-Cassegrain

1. Introduction

Les télescopes de Cassegrain sont constitués d'un miroir primaire concave et d'un miroir secondaire convexe. Ils ont deux avantages : la distance focale peut être beaucoup plus grande que la longueur du télescope et l'image finale se forme en arrière du miroir primaire.

Les miroirs sphériques ont l'avantage d'être relativement facile à polir. Cependant, un télescope de Cassegrain dont les deux miroirs sont sphériques présente des aberrations géométriques trop fortes pour être utilisable. Le télescope de Maksutov-Cassegrain [1] est une variante permettant de corriger ces aberrations à l'aide d'une lentille en verre faiblement divergente, le ménisque, placé à l'entrée du télescope, juste en amont du miroir secondaire. Il s'agit d'une solution relativement économique, mais applicable uniquement sur les petits télescopes, de diamètre inférieur à 300 mm.

Le calcul complet d'un télescope de Maksutov-Cassegrain permettant de minimiser à la fois les aberrations sphériques et chromatiques, pour une focale fixée à l'avance, est très complexe. Il faut en effet choisir de manière optimale les courbures des deux faces du ménisque et son épaisseur en fonction des focales des miroirs. On reprend ici les spécifications d'un télescope de Maksutov-Cassegrain données en [1], afin de montrer le processus d'optimisation d'une des faces du ménisque pour annuler l'aberration sphérique.

Pour étudier les aberrations géométriques, on utilise le module Python décrit dans Dioptres centrés : optique géométrique.

2. Miroir primaire et ménisque

2.a. Définition du système

On étudie dans un premier temps le miroir sphérique primaire associé au ménisque. Le rayon du courbure du miroir est 1200 mm, ce qui lui donne une focale de 600 mm. Son diamètre est 200 mm, soit un rapport f/D = 3. La fonction suivante construit le système avec un ménisque dont la face avant a une courbure fixée. La courbure de la face arrière est variable. On précise en argument cette courbure, l'épaisseur du ménisque et la position de sa face avant. Le miroir primaire est placé par convention en z = 0.

from math import *
from IndiceVerre import *
from Dioptres import *
from pylab import *
cat = CatalogueVerre()

def systemeMaksutov(c,e,z):
    n = cat.verre['N-BK7']
    n1 = Vide()
    n2 = Vide()
    n2.negatif()
    r = 100.0
    cm = -1.0/1200.0
    ca = -3.525e-3
    miroir = Spherique(0.0,cm,n1,n2,r)
    dioptreA = Spherique(z,ca,n1,n,r)
    dioptreB = Spherique(z+e,c,n,n1,r)
    sys = SystemeCentre()
    sys.ajouterListe([dioptreA,dioptreB,miroir])
    sys.ni.negatif()
    return sys
            

2.b. Optimisation du ménisque

On commence par le ménisque suivant, dont les deux faces ont la même courbure.

e = 25.0
z = -465.0
c = -3.525e-3
sys = systemeMaksutov(c,e,z)
            

Traçons les rayons pour une étoile située sur l'axe, pour la raie d (jaune).

r = 100.0
f = FaisceauParalleleMeridien(20,0.0,-800,r)
sys.refractionFaisceau(f,'d')
figure()
for Rc in f.listeRayons:
    XYZ = Rc.getXYZ(700)
    plot(XYZ[2],XYZ[0],color='y')
sys.tracerProfils(20,'k')
xlabel('z')
ylabel('x')
grid(True)
axis([-800,0,-100,100])
            
plotAplotA.pdf

Le foyer primaire se trouve à gauche du ménisque, ce qui ne présente pas d'inconvénient puisque ce foyer sera rendu virtuel par la présence du miroir secondaire.

On observe en détail la zone proche du foyer :

axis([-600,-550,-1,1])
            
plotBplotB.pdf

En constate la présence d'une aberration sphérique : les rayons plus inclinés ne convergent pas au même foyer que les rayons paraxiaux. Le rôle du ménisque étant justement de minimiser cette aberration, nous allons optimiser sa courbure à cette fin. Pour cela, la fonction suivante calcule l'aberration sphérique longitudinale du système, définie comme le décalage entre le foyer des rayons paraxiaux et celui des rayons marginaux (distance à l'axe à préciser).

def ASL(systeme,raie,r):
    z0 = -800.0
    return systeme.pointConvergence(z0,r,raie)-systeme.pointConvergence(z0,0.0,raie)
            

Par exemple pour le système précédent, l'aberration sphérique pour un rayon marginal dont la distance à l'axe est 90% du rayon de l'ouverture :

asl = ASL(sys,'d',r*0.9)
            
print(asl)
--> 4.87909287505

On trace l'aberration sphérique en fonction de la courbure de la face arrière du ménisque :

cList = []
asl = []
N = 100
for k in range(N):
    c = -0.00357+0.0003*k/N
    cList.append(c)
    sys = systemeMaksutov(c,e,z)
    asl.append(ASL(sys,'d',r*0.9))
figure()
plot(cList,asl,color='b')
xlabel('c')
ylabel('ASL')
grid(True)
axis([-0.00335,-0.00330,-1,1])
            
plotCplotC.pdf

On choisit la valeur de la courbure qui annule l'aberration sphérique, puis on trace à nouveau les rayons :

c = -0.003325
sys = systemeMaksutov(c,e,z)
f = FaisceauParalleleMeridien(20,0.0,-800,r)
sys.refractionFaisceau(f,'d')
figure()
for Rc in f.listeRayons:
    XYZ = Rc.getXYZ(700)
    plot(XYZ[2],XYZ[0],color='y')
sys.tracerProfils(20,'k')
xlabel('z')
ylabel('x')
grid(True)
axis([-618,-618.5,-0.02,0.02])
            
plotDplotD.pdf

La présence du ménisque éloigne un peu le foyer du miroir (de 18 mm) ce qui confirme son caractère divergent.

L'aberration sphérique est considérablement réduite. Comme prévu, les rayons marginaux convergent au même point que les rayons paraxiaux. En revanche, les rayons d'inclinaison moyenne convergent légèrement à droite (plus près du miroir), ce qui conduit à une aberration sphérique résiduelle, de l'ordre de 0.05 mm. Le cercle de moindre confusion a un rayon de 2.5 micromètres. Il faut comparer ce rayon à celui de la tache de diffraction correspondant à l'ouverture du télescope :

focale = 618
rAiry = 1.2*588e-6/(2*r)*focale
            
print(rAiry)
--> 0.0021803039999999997

On est donc très proche d'une image limitée par la diffraction.

3. Télescope complet

3.a. Miroir secondaire et optimisation du ménisque

Le miroir secondaire est convexe, avec un rayon de courbre de 495 mm. On le place juste derrière le ménisque.

La fonction suivante construit le télescope complet. La courbure de la face interne du ménisque est toujours en argument (pour une éventuelle optimisation). Le diamètre du miroir secondaire est fixé à 70 mm, soit 35% du miroir primaire.

def telescope(c):
    n = cat.verre['N-BK7']
    n1 = Vide()
    n2 = Vide()
    n2.negatif()
    r = 100.0
    z = -465.0
    e = 25.0
    cm = -1.0/1200.0
    ca = -3.525e-3
    miroir1 = Spherique(0.0,cm,n1,n2,r)
    dioptreA = Spherique(z,ca,n1,n,r)
    dioptreB = Spherique(z+e,c,n,n1,r)
    c2 = -1.0/(495)
    z2 = -438
    r2 = 35.0
    miroir2 = Spherique(z2,c2,n2,n1,r2)
    ecran = Ecran(-440.0,r2)
    sys = SystemeCentre()
    sys.ajouterListe([dioptreA,dioptreB,ecran,miroir1,miroir2])
    return sys
            

Tracé des rayons pour une étoile sur l'axe :

sys = telescope(c)
f = FaisceauParalleleMeridien(20,0.0,-800,r)
sys.refractionFaisceau(f,'d')
figure()
for Rc in f.listeRayons:
    XYZ = Rc.getXYZ(850)
    plot(XYZ[2],XYZ[0],color='y')
sys.tracerProfils(20,'k')
xlabel('z')
ylabel('x') 
grid(True) 
axis([-600,300,-100,100])
            
plotEplotE.pdf

Voyons en détail le foyer :

axis([220,250,-1,1])
            
plotFplotF.pdf

L'aberration sphérique est trop importante, ce qui montre que le ménisque adapté au miroir primaire ne convient plus en présence du miroir secondaire. Il faut de nouveau ajuster le rayon de courbure du ménisque pour annuler l'aberration sphérique longitudinale. Cependant, le calcul de celle-ci doit se faire non pas avec les rayons paraxiaux, qui sont stoppés par le miroir secondaire, mais avec ceux passent près de son bord.

def ASL(systeme,raie,r1,r2):
    z0 = -800.0
    return systeme.pointConvergence(z0,r2,raie)-systeme.pointConvergence(z0,r1,raie)
cList = []
asl = []
N = 100
for k in range(N):
    c = -0.00357+0.0003*k/N
    cList.append(c)
    sys = telescope(c)
    asl.append(ASL(sys,'d',r*0.37,r*0.9))
figure()
plot(cList,asl,color='b')
xlabel('c')
ylabel('ASL')
grid(True)
axis([-0.00336,-0.00335,-1,1])
            
plotGplotG.pdf

On adopte donc la valeur suivante

c = -0.0033525
sys = telescope(c)
            

Voyons finalement la convergence vers le foyer :

f = FaisceauParalleleMeridien(20,0.0,-800,r)
sys.refractionFaisceau(f,'d')
figure()
for Rc in f.listeRayons:
    XYZ = Rc.getXYZ(600)
    plot(XYZ[2],XYZ[0],color='y')
sys.tracerProfils(20,'k')
xlabel('z')
ylabel('x') 
grid(True) 
axis([-600,200,-100,100])
            
plotHplotH.pdf
axis([159.5,160,-0.02,0.02])
            
plotIplotI.pdf

La focale effective du télescope est le rapport de la position de l'image par l'angle définissant la position de l'objet à l'infini :

ob = Position(0)
ob.infini = True
sys.matriceTransfert('d')
focale = sys.grandissement(ob,'d')
            
print(focale)
--> 2001.5137223367765

On en déduit le rayon de la tache d'Airy pour la raie d :

rAiry = 1.2*588e-6/(2*r)*focale
            
print(rAiry)
--> 0.0070613404124041466

La mise au point consiste à placer le plan image au cercle de moindre confusion. Le rayon de ce cercle est d'environ 2.5 micromètres, ce qui est inférieur à la tache d'Airy. Il faut toutefois remarquer que l'aberration sphérique est très sensible au rayon de courbure du ménisque. La fabrication du ménisque d'un bon télescope de Maksutov est donc très délicate.

zi = 159.8
planImage = PlanImage(zi,r)
sys.ajouter(planImage)          
            

3.b. Aberrations sphériques et chromatiques

Pour caractériser les aberrations sphériques sur l'axe, on trace la position du foyer en fonction de la distance du rayon incident par rapport à l'axe. Le même tracé fait pour différentes raies permet également de représenter l'aberration chromatique longitudinale.

def plotASL(r,raie,color):
    rmin = 35.0
    rmax = 0.95*r
    rList = []
    zList = []
    N= 50
    z0 = -800.0
    for k in range(N):
        r = rmin + (rmax-rmin)/(N-1)*k
        rList.append(r)
        zList.append(sys.pointConvergence(z0,r,raie))
        plot(zList,rList,color=color)
figure()
plotASL(r,'d','y')
plotASL(r,'F','b')
plotASL(r,'C','r')
xlabel('z')
ylabel('r')
grid(True)
axis([159.5,160,0,100])
            
plotJplotJ.pdf

On remarque que les rayons situés à 90 mm de l'axe convergent au même point que ceux situés à 37 mm de l'axe. Ceci est conforme au choix qui a été fait plus haut pour l'optimisation du ménisque. On remarque de plus que le maximum de décalage du foyer se produit pour les rayons incidents dont la distance à l'axe est 67 mm.

L'aberration chromatique longitudinale ne dépasse pas 60 micromètres, ce qui est mieux qu'un bon objectif de lunette apochromatique.

3.c. Diagrammes d'images

La fonction suivante effectue le tracé des points d'intersection d'un faisceau de rayon cylindrique avec le plan image. L'angle de position de l'étoile par rapport à l'axe est donné en argument. Un cercle représentant la tache de diffraction est tracé à l'abscisse xi.

def spotDiagram(sys,alpha,r,xi,raie,color):
    f = FaisceauParallele(20,alpha,-800,r)
    sys.refractionFaisceau(f,raie)
    for Rc in f.listeRayons: 
        P = Rc.getRayon().P
        plot([P[0]],[P[1]],color=color,marker='.')
    angles = linspace(0,2*pi,100)
    plot(xi+rAiry*cos(angles),rAiry*sin(angles),color='k')
            

Voyons tout d'abord d'image sur l'axe :

figure(figsize=(6,6))
alpha = 0.0
spotDiagram(sys,alpha,r*0.99,0,'d','y')
spotDiagram(sys,alpha,r*0.99,0,'F','b')
spotDiagram(sys,alpha,r*0.99,0,'C','r')
xlabel('x')
ylabel('y')
grid(True) 
scale = 0.04
axis([-scale,scale,-scale,scale])
            
plotKplotK.pdf

Les raies F, C et d sont représentées. Le cercle correspond à la tache d'Airy de la raie d (jaune). L'aberration sphérique est très bien corrigée puisque tous les rayons de la raie d se trouvent dans le disque de la tache de diffraction. Le chromatisme est inexistant. La finesse de l'image est donc limitée par la diffraction.

Ci-dessous l'image d'une étoile à 0.005 radians (17 minutes d'arc) de l'axe, soit à environ 10  mm de l'axe sur le plan image.

fig=figure(figsize=(6,6))
alpha = 0.005
x = alpha*focale
spotDiagram(sys,alpha,r*0.9,x,'d','y')
spotDiagram(sys,alpha,r*0.9,x,'F','b')
spotDiagram(sys,alpha,r*0.9,x,'C','r')
xlabel('x')
ylabel('y')
grid(True)
scale = 0.04
axis([x-scale,x+scale,-scale,scale])
            
plotLplotL.pdf

Les aberrations restent très faibles, avec un très léger chromatisme.

Voyons l'image à 0.5 degrés :

fig=figure(figsize=(6,6))
alpha = 0.008
x = alpha*focale
spotDiagram(sys,alpha,r*0.9,x,'d','y')
spotDiagram(sys,alpha,r*0.9,x,'F','b')
spotDiagram(sys,alpha,r*0.9,x,'C','r')
xlabel('x')
ylabel('y')
grid(True)
scale = 0.04
axis([x-scale,x+scale,-scale,scale])
            
plotMplotM.pdf

Cette fois-ci les rayons sortent nettement de la tache de diffraction. Il s'agit probablement d'un effet de la courbure de champ (non évaluée ici). D'après [1], le rayon de la courbure de champ de ce télescope est de 480 mm. Le décalage de mise au point à 16 mm de l'axe est donc :

d=16.0
Rc=480.0
epsilon = d*d/(2*Rc)
            
print(epsilon)
--> 0.26666666666666666

L'animation suivante permet de faire varier l'angle de l'étoile et la position du plan image. Pour un angle de 30 minutes, une meilleure focalisation est obtenue en rapprochant légèrement ce plan du miroir. Ceci montre que la courbure de champ est la principale aberration de ce télescope. La tache de diffraction est calculée pour la raie d. La figure est centrée en fonction de la focale effective calculée avec l'approximation paraxiale (2000 mm); on constate un léger décalage de l'image par rapport à cette position.

Maksutov.swfFigure pleine page
Références
[1]  V. Sacek,  Maksutov-Cassegrain telescope,  http://www.telescope-optics.net/maksutov_cassegrain_telescope.htm
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.