Table des matières Python

Amplificateur à émetteur commun

1. Introduction

Ce document explique le fonctionnement d'un amplificateur à transistor à émetteur commun. La démarche suivie est tirée de [1]. Après une analyse simplifiée du fonctionnement, une simulation SPICE est effectuée.

2. Caractéristique Ie=f(Vbe)

On considère le circuit suivant :

figureA.svgFigure pleine page

La figure suivante montre le courant de collecteur en fonction de la tension collecteur-émetteur, pour différents courants de base. Elle a été obtenue par simulation SPICE pour un transistor 2N2222.

plotB.svgFigure pleine page

Dans la zone active qui nous intéresse ici, le courant de collecteur est beaucoup plus grand que le courant de base (facteur 200 environ). Le courant de collecteur est donc pratiquement égal au courant d'émetteur.

La tension collecteur-émetteur étant fixée (au dessus de 0.5 volts), on s'intéresse à la variation du courant d'émetteur en fonction de la tension base-émetteur. La simulation SPICE ci-dessous calcule cette courbe. Le paramètre que l'on fait varier est le courant de base.

Le modèle de transistor :

La description SPICE du circuit, avec une source de tension nulle ajoutée pour mesurer le courant d'émetteur :

transistor-1.cir
.INCLUDE modeles.cir
Ib 0 1 DC 0
Vce 2 0 DC 5
Vie 3 0 DC 0
Q 2 1 3 2n2222a
.control
DC Ib 0 30U 0.1U
PRINT V(1) I(Vie) > export-1.txt
.endc
.end
             
ngspice -b transistor-1.cir
from lectureSpicePrint import lectureSpicePrint
from matplotlib.pyplot import *
import numpy as np

data = lectureSpicePrint("export-1.txt")
Vbe = data["v(1)"]
Ie = data["i(vie)"]
figure(figsize=(5,5))
plot(Vbe,Ie*1000)
plot(Vbe[80],Ie[80]*1000,"r.")
xlabel("Vbe (V)")
ylabel("Ie (mA)")
axis([0,1,0,5])
grid()
        
plotA.svgFigure pleine page

On a fixé Vce=5 V mais la courbe obtenue dépend très peu de cette tension, tant qu'on reste dans le domaine linéaire. Un point de fonctionnement a aussi été placé sur la courbe, à environ Ie=1 mA. On s'intéresse à présent à une petite oscillation de la tension Vce autour de ce point de fonctionnement, qui induit une oscillation du courant d'émetteur. Le rapport de la variation de tension sur la variation de courant est la résistance en alternatif d'émetteur :

re=ΔVbeΔIe(1)

Il s'agit de l'inverse de la pente de la courbe, que l'on obtient comme suit :

n = Vbe.size
re = np.zeros(n-1)
for k in range(n-1):
    re[k] = (Vbe[k+1]-Vbe[k])/(Ie[k+1]-Ie[k])
figure(figsize=(5,5))
plot(Ie[0:n-1]*1000,re)
plot(Ie[80]*1000,re[80],"r.")
xlabel("Ie (mA)")
ylabel("re (Ohm)")
axis([0,5,0,50])
grid()
         
print(re[50])
--> 64.247926550392549
plotB.svgFigure pleine page

Pour le point de fonctionnement placé plus haut, cette résistance est d'environ re=30 Ω. Elle augmente lorsque le courant d'émetteur décroît.

3. Amplificateur à émetteur commun

figureC.svgFigure pleine page

On s'intéresse tout d'abord au point de fonctionnement du transistor. On suppose que le courant de base est négligeable devant le courant traversant R1 et R2. Ces deux résistances agissent donc comme un pont diviseur et on a :

V2=R2R1+R2Vcc(2)

La tension base-émetteur est environ Vbe=0.7 V (à plus ou moins 0.1 volts). On en déduit V4=V2-Vbe et le courant d'émetteur :

IE=V2-VbeRE(3)

Le courant d'émetteur du point de fonctionnement est donc contrôlé par la résistance RE. Ce courant est grand devant le courant de base; il est donc pratiquement égal au courant de collecteur. On en déduit la tension du nœud 5 :

V5=Vcc-RCIE(4)

Soient par exemple R1=10 kΩ, R2=1.2 kΩ, RE=1 kΩ et RC=10 kΩ avec une alimentation Vcc=15 V. Les tensions et courants sont alors V2=1.6 V, V4=0.9 V, IE=0.9 mA et V5=6 V. La tension collecteur-émetteur est Vce=V5-V4=5.1 V. le point de fonctionnement est donc très proche du point marqué plus haut et la résistance d'émetteur en alternatif est environ re=30 Ω (un peu plus).

On s'intéresse à présent au fonctionnement en régime alternatif. Un petit signal sinusoïdal est appliqué par la source Vi (input). On suppose que les impédances des capacités à la fréquence du signal sont négligeables; elles sont donc équivalentes à des court-circuits pour l'alternatif. On a donc d'une part v5(t)=V5+ui(t) (on note u les tensions variables). D'autre part, l'émetteur est à la masse pour l'alternatif donc la tension alternative ui(t) voit une résistance re vers la masse. Si on note ie(t)=Ie+je(t) le courant d'émetteur, on a donc

je(t)=ui(t)re(5)

Comme ce courant traverse RC, la tension de sortie Vo(t)=V5+uo(t) (output) oscille autour de V5 avec

uo(t)=-RC je(t)=-RCreui(t)(6)

Le signe moins indique une opposition de phase entre la sortie et l'entrée. Le gain en alternatif est finalement :

H=-RCre(7)

Bien sûr, ce résultat ne tient pas compte des effets capacitifs dans le transistor à très haute fréquence. Avec les valeurs calculées plus haut, on obtient H=-330. Pour éviter une distorsion en sortie, l'amplitude de variation du courant émetteur ne doit pas dépasser 0.1 mA, donc l'amplitude des oscillations en entrée ne doit pas dépasser 3 mV. L'amplitude en sortie est au maximum de 1 V environ.

Cet amplificateur a l'inconvénient d'avoir un gain qui dépend de la résistance d'émetteur en alternatif re, laquelle peut varier d'un transistor à l'autre (du même modèle) et surtout varie avec la température. Le gain de ce montage n'est donc pas très stable. Une solution pour stabiliser le gain consiste à ajouter une résistance d'émetteur de la manière suivante :

figureD.svgFigure pleine page

La tension alternative appliquée sur l'émetteur voit une résistance vers la masse re+RE1. Le gain devient donc :

H=-RCre+rE1(8)

Si la résistance rE1 est assez grande devant re, elle masque les variations de cette dernière et donc le gain est plus stable. La contrepartie est une baisse du gain. Avec par exemple RE1=180 Ω et RE2=820 Ω (somme égale à RE), le gain devient H=-48, soit en décibel 33.6 dB.

4. Simulation SPICE

Voir la page Lecture des sorties SPICE avec Python pour l'utilisation de ngspice avec python.

On commence par faire une analyse transitoire avec une entrée sinusoïdale à 1 kHz et d'amplitude 10 mV. Les capacités sont 10 μF.

ampli-1.cir
.INCLUDE modeles.cir
Vi 1 0 SIN(0 10M 1K 0 0)
Vcc 3 0 15
Ci 1 2 10U
R1 2 3 10K
R2 2 0 1.2K
Q1 5 2 4 2n2222a
RC 3 5 10K
RE1 4 6 180
RE2 6 0 820
CE 6 0 10U
.control
TRAN 10U 10M
PRINT V(2) V(5) I(Vi) > export-2.txt
.endc
.end
            
ngspice -b ampli-1.cir
data = lectureSpicePrint("export-2.txt")
t = data["time"]*1e3
v2 = data["v(2)"]
v5 = data["v(5)"]
figure(figsize=(10,4))
plot(t,v2)
xlabel("t (ms)")
ylabel("V2 (V)")
grid()
            
plotC.svgFigure pleine page
figure(figsize=(10,4))
plot(t,v5)
xlabel("t (ms)")
ylabel("V5 (V)")
grid()
            
plotD.svgFigure pleine page

Les valeurs moyennes sont légèrement différentes de celles calculées plus haut. On avait calculé V5=6 V; ici la moyenne est d'environ 5.9 V. Cet écart est principalement dû à la valeur de Vbe qui était légèrement surestimée. Le gain est bien d'environ 50.

Voici le tracé du courant délivré par la source en entrée :

Ii = data["i(vi)"]*1e6
figure(figsize=(10,4))
plot(t,Ii)
xlabel("t (ms)")
ylabel("Ii (muA)")
grid()
             
plotD2.svgFigure pleine page

On en déduit que l'impédance d'entrée est d'environ 1 kΩ à cette fréquence.

Voyons le gain et le déphasage en fonction de la fréquence (réponse AC) :

ampli-2.cir
.INCLUDE modeles.cir
Vi 1 0 AC 10M
Vcc 3 0 15
Ci 1 2 10U
R1 2 3 10K
R2 2 0 1.2K
Q1 5 2 4 2n2222a
RC 3 5 10K
RE1 4 6 180
RE2 6 0 820
CE 6 0 10U
.control
AC DEC 10 1K 100MEG
PRINT vdb(5) vp(5) > export-3.txt
.endc
.end
            
ngspice -b ampli-2.cir

L'amplitude de la tension de sortie est exportée en décibel. Il faut ajouter +40 dB (amplitude en entrée de 10 mV) pour obtenir le gain en décibel :

data = lectureSpicePrint("export-3.txt")
freq = data["frequency"]
gdb = data["vdb(5)"]
gdb = np.add(gdb,40)
phi = data["vp(5)"]
figure(figsize=(10,10))
subplot("211")
plot(freq,gdb)
xscale('symlog')
xlabel('f (Hz)')
ylabel('GdB')
grid()
subplot("212")
plot(freq,phi)
xscale('symlog')
xlabel('f (Hz)')
ylabel('phi (rad)')
grid()
            
plotE.svgFigure pleine page

Le gain dans la bande passante (environ 33 dB) est légèrement inférieur au gain calculé plus haut. La fréquence de coupure est à 1 MHz. À 100 MHz, le gain n'est plus que de 5 dB. Pour obtenir un gain important à cette fréquence, on a intérêt à utiliser le montage sans stabilisation, dont voici la simulation avec une amplitude de 1 mV en entrée :

ampli-3.cir
.INCLUDE modeles.cir
Vi 1 0 AC 1M
Vcc 3 0 15
Ci 1 2 10U
R1 2 3 10K
R2 2 0 1.2K
Q1 5 2 4 2n2222a
RC 3 5 10K
RE 4 0 1K
CE 4 0 10U
.control
AC DEC 10 1K 100MEG
PRINT vdb(5) vp(5) > export-4.txt
.endc
.end
            
ngspice -b ampli-3.cir
data = lectureSpicePrint("export-4.txt")
freq = data["frequency"]
gdb = data["vdb(5)"]
gdb = np.add(gdb,60)
phi = data["vp(5)"]
figure(figsize=(10,10))
subplot("211")
plot(freq,gdb)
xscale('symlog')
xlabel('f (Hz)')
ylabel('GdB')
grid()
subplot("212")
plot(freq,phi)
xscale('symlog')
xlabel('f (Hz)')
ylabel('phi (rad)')
grid()
            
plotF.svgFigure pleine page

Le gain à 100 MHz est de 18 dB.

Références
[1]  A.P. Malvino, D.J. Bates,  Electronic Principles,  (McGraw-Hill, 2016)
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.