Par groupe
L’objectif de ce TP est d’étudier le montage amplificateur non-inverseur et sa fonction de transfert afin de la confronter à son expression théorique. On étudiera notamment son produit gain-bande et les différentes saturations.
Les caractéristiques de l’ALI (produit gain-bande, tension de saturation, courant de saturation et vitesse de balayage) observées seront ensuite confrontées aux valeurs indiquées par le fabricant.
Le montage amplificateur non-inverseur sera réalisé avec les composants accessibles dans la salle de TP (voir Annexe B) de sorte que
Choisir des valeurs pour et .
Les composants utilisés en TP ont une incertitude-type de . Calculer l’incertitude sur le gain théorique de l’amplificateur.
Pour vérifier rapidement le montage, on place en entrée un signal sinusoïdal produit par un GBF et on observe sa sortie.
Quelle tension d’entrée maximale peut-on appliquer sans que la tension de sortie de l’ALI ne sature ?
Pour une fréquence de , quelle amplitude maximale peut-on appliquer sans que la vitesse de balayage ne sature ?
Réaliser l’amplificateur non-inverseur sur une platine d’essai.
Relier son entrée à un GBF et observer sa sortie sur un oscilloscope.
Vérifier rapidement que la valeur du gain est conforme.
Le diagramme de Bode (en gain et en phase) sera tracé après un relevé point par point réalisé à l’aide du GBF et de l’oscilloscope. Les tracés seront réalisés avec Python grâce à la bibliothèque pyplot, notamment la fonction semilogx de la bibliothèque matplotlib.pyplot qui fait le tracé avec les abscisses en échelle logarithmique (voir Annexe A).
Mesurer pour chaque point
On répartira points de mesure entre et .
Les données seront rentrées directement dans des variables dans Python.
Tracer le diagramme de Bode en gain et en phase grâce à Python.
L’analyse manuelle du diagramme de Bode ne peut être faite qu’à partir des asymptotes. Dans ce TP, comme les données sont numérisées, on peut faire des traitements plus avancés et notamment un ajustement de la fonction de transfert théorique sur les données expérimentales.
Pour cela, il est nécessaire de définir en Python la fonction de Bode théorique de l’amplificateur non-inverseur.
Compléter le code suivant qui renvoie le gain en décibels de l’amplificateur non-inverseur. On écrira la fonction de transfert de l’amplificateur non-inverseur sous sa forme canonique : .
def GdB(f, H0, f0):
# f : fréquence en Hz
# H0 : gain statique de l'amplificateur non-inverseur
# f0 : fréquence de coupure de l'amplificateur non-inverseur
return ...Pour vérifier l’adéquation entre les diagrammes de Bode théorique et expérimental, et pour déterminer les paramètres et , on peut effectuer un ajustement (fit en anglais), c’est-à-dire chercher la courbe théorique passant au plus près des points expérimentaux.
On utilisera la fonction curve_fit de la bibliothèque scipy.optimize (voir Annexe A).
Écrire des instructions Python permettant d’effectuer l’ajustement de la fonction définie à l’application 3.
Les instructions devront afficher les valeurs des paramètres et pour lesquelles la fonction de transfert théorique passe au plus près des points expérimentaux puis afficher le produit gain-bande.
Pour savoir si l’ajustement est correct, il est d’usage de tracer sur le même graphique les points expérimentaux et la courbe théorique obtenue avec les paramètres optimaux.
Plusieurs grandeurs de l’ALI peuvent saturer. On souhaite observer l’effet de ces saturations sur un signal sinusoïdal et vérifier les indications du fabricant.
À haute fréquence, la vitesse de balayage de l’ALI peut engendrer une déformation du signal de sortie.
Lorsque les résistances placées en sortie de l’ALI sont trop faibles, le courant de sortie peut saturer l’amplificateur.
Le fabricant garanti dans sa notice des performances minimales pour l’ALI.
Annexe A : Fonctions Python utiles dans ce TP
plt.clf1plt.clf()plt.plot1plt.plot(x, y)plt.plot(x, y, format: str)y en fonction de x ; format (ex. "r+", "g-") fixe couleur et styleplt.semilogx1plt.semilogx(x, y)plot, avec l’axe des abscisses en échelle logarithmiqueplt.xlabel1plt.xlabel(texte: str)plt.ylabel1plt.ylabel(texte: str)plt.title1plt.title(texte: str)plt.show1plt.show()curve_fit2curve_fit(f: fonction, xdata: array, ydata: array) -> tuplepopt, pcov = curve_fit(f: fonction, xdata: array, ydata: array, p0: list, bounds=(0, np.inf): tuple)f (dont le premier argument est l’abscisse) aux données ; popt : paramètres optimaux, p0 : estimation initiale des valeurs des paramètres (facultatif), bounds : bornes sur les paramètres (facultatif)np.pi3np.pi -> floatnp.linspace3x = np.linspace(début: float, fin: float, nombre_de_points: int) -> arraydébut et fin (bornes incluses)np.logspace3f = np.logspace(début: float, fin: float, nombre_de_points: int) -> arraylinspace, mais les points sont espacés logarithmiquement entre et np.random.normal3x = np.random.normal(moyenne: float, écart_type: float) -> floatx = np.random.normal(moyennes: array, écarts_types: array) -> arraymoyenne avec un écart-type écart_typeimport matplotlib.pyplot as plt2 from scipy.optimize import curve_fit3 import numpy as npAnnexe B : Composants disponibles dans la salle de TP
| | | | | | | | | | |