Outils pour utilisateurs

Outils du site


tptns2018_2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tptns2018_2 [2019/03/20 15:57]
bvandepo [Version 2018]
tptns2018_2 [2019/03/22 11:17] (Version actuelle)
bvandepo
Ligne 1: Ligne 1:
  
-* +**TP2  Simulation des convertisseurs**
-*TP2  Simulation des convertisseurs**+
  
 -------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------
Ligne 76: Ligne 75:
 </​file>​ </​file>​
  
-Une directive **#include "convertisseurs.h"** est présente dans le fichier filtretrace.h pour pouvoir appeler ces fonctions.+Une directive **#include "convertisseur.h"** est présente dans le fichier filtretrace.h pour pouvoir appeler ces fonctions.
  
  
Ligne 132: Ligne 131:
 === Visualisation de signaux quantifiés (45' max) === === Visualisation de signaux quantifiés (45' max) ===
  
-  - On souhaite visualiser sur une même fenêtre mais sur 2 axes différents (car les échelles sont différentes) l'​impulsion et l'​impulsion quantifiée pour 7 échantillons. Vous devez donc utiliser **simuADC()** pour quantifier échantillon par échantillon tout le signal impulsion et stocker le résultat dans un tableau impQuant. Simulez un CAN ayant une plage de conversion de 0/3,3V sur 4 bits (déclarez vmin, vmax, nbbits comme constantes globales).+  - On souhaite visualiser sur une même fenêtre mais sur 2 axes différents (car les échelles sont différentes) l'​impulsion et l'​impulsion quantifiée pour 7 échantillons. Vous devez donc utiliser **simuADC()** pour quantifier échantillon par échantillon tout le signal impulsion et stocker le résultat dans un tableau impQuant. Simulez un CAN ayant une plage de conversion de 0 à 3,3V sur 4 bits (déclarez vmin, vmax, nbbits comme constantes globales).
     - Créez une nouvelle fonction **void code_tparchi2(void)** dans le fichier tparchi1.cpp.     - Créez une nouvelle fonction **void code_tparchi2(void)** dans le fichier tparchi1.cpp.
     - Afficher alors les deux signaux demandés.     - Afficher alors les deux signaux demandés.
     - Faites de même ensuite pour l'​échelon et l'​échelon quantifié.     - Faites de même ensuite pour l'​échelon et l'​échelon quantifié.
   - Vous pouvez constater que l'​impulsion et l'​échelon sont à la limite de la dynamique du CAN. Comme lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), il est préférable de centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Modifiez les signaux impulsion et echelon en conséquence. Quelle est la nouvelle valeur de repos des signaux quantifiés ?   - Vous pouvez constater que l'​impulsion et l'​échelon sont à la limite de la dynamique du CAN. Comme lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), il est préférable de centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Modifiez les signaux impulsion et echelon en conséquence. Quelle est la nouvelle valeur de repos des signaux quantifiés ?
-  - Générez un signal sinusoïdal d'​amplitude 1,5V, de fréquence 1 kHz correctement centré. Dans une nouvelle fenêtre, visualisez ce signal, ce signal quantifié sur 4 bits et ce signal quantifié sur 8 bits (dynamique 0/3,3V).+  - Générez un signal sinusoïdal d'​amplitude 1,5V, de fréquence 1 kHz correctement centré. Dans une nouvelle fenêtre, visualisez ce signal, ce signal quantifié sur 4 bits et ce signal quantifié sur 8 bits (dynamique 0 à 3,3V).
   - Faites valider votre travail.   - Faites valider votre travail.
        
Ligne 147: Ligne 146:
 Comme cela a été dit en introduction de ce TP (relisez là si vous avez oublié...) il faut maintenant inclure les convertisseurs analogique<​->​numérique dans **ReponseEnLigne()**. Voici les opérations à effectuer: Comme cela a été dit en introduction de ce TP (relisez là si vous avez oublié...) il faut maintenant inclure les convertisseurs analogique<​->​numérique dans **ReponseEnLigne()**. Voici les opérations à effectuer:
  
-  - Ajouter **#include "convertisseurs.h"** dans filtretrace.h pour pouvoir appeler les fonctions de simulation de convertisseurs depuis filtretrace. +  - Ajouter **#include "convertisseur.h"** dans filtretrace.h pour pouvoir appeler les fonctions de simulation de convertisseurs depuis filtretrace. 
-  - Dans le fichier ​ filtretrace.cpp,​ intégrez dans la méthode **ReponseEnLigne** l'​appel de ces 2 fonctions (dynamique 0/3,3V , 12 bits) pour que la méthode **TraiteUnEchantillon** traite des échantillons quantifiés en entrée et en sortie:+  - Dans le fichier ​ filtretrace.cpp,​ intégrez dans la méthode **ReponseEnLigne** l'​appel de ces 2 fonctions (dynamique 0 à 3,3V , 12 bits) pour que la méthode **TraiteUnEchantillon** traite des échantillons quantifiés en entrée et en sortie:
     - appeler **simuADC** sur chaque échantillon du tableau **e[k]** et stocker sa valeur de retour dans une variable **ekquant** du bon type.     - appeler **simuADC** sur chaque échantillon du tableau **e[k]** et stocker sa valeur de retour dans une variable **ekquant** du bon type.
     - appeler **TraiteUnEchantillon** en lui fournissant en paramètre la variable précédemment calculée afin d'​obtenir l'​échantillon quantifié **skquant**.     - appeler **TraiteUnEchantillon** en lui fournissant en paramètre la variable précédemment calculée afin d'​obtenir l'​échantillon quantifié **skquant**.
     - appeler **simuDAC** en lui fournissant la valeur fournie par **TraiteUnEchantillon** et ranger la valeur de sortie de **simuDAC** dans le tableau **s[k]**.     - appeler **simuDAC** en lui fournissant la valeur fournie par **TraiteUnEchantillon** et ranger la valeur de sortie de **simuDAC** dans le tableau **s[k]**.
   - Vérifier le bon fonctionnement des 2 filtres du TP1. Expliquez l'​amplitude de la réponse impulsionnelle du filtre RIF.   - Vérifier le bon fonctionnement des 2 filtres du TP1. Expliquez l'​amplitude de la réponse impulsionnelle du filtre RIF.
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
 +  echo commence
 +  cd ~/​TP_ARCHI_TNS_ETU
 +  git commit -a -m'​ADC/​DAC working'​
 +  gitk & 
 +  echo fini
 +  ​
 +
  
 === Prise en compte de l'​offset numérique des échantillons=== === Prise en compte de l'​offset numérique des échantillons===
-  - Adapter les valeurs des échantillons pour les signaux ​d'​entrée impulsionnel ​et indiciel afin que le 0 corresponde à la la tension 3.3V/2 et le 1 à la tension 1V+3.3V/2 +  - Ajouter aux échantillons ​d'​entrée (pour les signaux ​impulsion ​et échelon définis dans le fichier **tparchi1.cpp**) un offset de 3,3V/2. 
-  - Tester ​à nouveau le fonctionnement ​de **ReponseEnLigne()** sur le filtre RIF de l'​exercice 2 du TP1 et vérifier si la réponse indicielle est toujours valide. Interpréter les résultats ​en observant en mode debug la valeur ​de l'​échantillon de sortie quantifié numéro 3 (stocké dans **sk_quant**)+  -  
-  - Ce phénomène est provoqué par l'​offset numérique de **ek_quant** (sa valeur de repos est différente de 0). Modifiez **TraiteUnEchantillon()** pour respecter le schéma de la P11 du cours. Pour cela, vous utiliserez ​les attributs de la classe **Filtre** suivants: ​ **offsetEntree** et **offsetSortie**. Pour que ces deux attributs soient correctement initialisés,​ vous veillerez à ajouter ​en valeurs effectives ​correctes ​pour paramètres du constructeur de l'​objet filtre **offsetEntreeInit** et **offsetSortieInit**. Par exemple la ligne:+     - Calculer ​à la main la valeur ​de l'​échantillon de sortie du filtre ​à $k=3$ pour le RIF de l'​exercice 2 du TP1 pour le signal impulsion avec offset défini ​en 1) et comparer avec la valeur ​fournie par  ​**ReponseEnLigne()**. Interpréter les résultats
 +     ​- Ce phénomène est provoqué par l'​offset numérique de **ek_quant** (sa valeur de repos est différente de 0). Modifiez **TraiteUnEchantillon()** pour respecter le schéma de la P11 du cours (en entrée __et__ en sortie !!). Pour cela, vous devrez calculer ​les bonnes valeurs pour les offsets. Ces offset seront accessibles dans la classe **Filtre** ​grâce aux attributs  ​suivants: ​ **offsetEntree** et **offsetSortie**. 
 +     ​- ​Pour que ces deux attributs soient correctement initialisés,​ vous veillerez à ajouter ​les valeurs effectives pour les paramètres du constructeur de l'​objet filtre **offsetEntreeInit** et **offsetSortieInit**. Par exemple la ligne:
 <file cpp cons1.cpp>  ​ <file cpp cons1.cpp>  ​
   FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA);​   FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA);​
Ligne 163: Ligne 174:
 devra être remplacée par: devra être remplacée par:
 <file cpp cons2.cpp>  ​ <file cpp cons2.cpp>  ​
-  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​offsetEntree,offsetSortie);+  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​0,NULL,​valeur_pour_offsetEntreeInit,​valeur_pour_offsetSortieInit);
 </​file>​ </​file>​
-  - Vérifiez ​ que les deux premiers filtres fournissent les mêmes réponses impulsionnelles ​et indicielles ​qu'​avant ajout des convertisseurs (à la précision de la quantification près).+  - Vérifiez ​ que les deux premiers filtres fournissent les mêmes réponses impulsionnelles qu'​avant ajout des convertisseurs (à la précision de la quantification près).
  
 Remarque: C'est le même phénomène que lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), où il a fallu centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V. Remarque: C'est le même phénomène que lors de l'​utilisation de montage à AOp (souvenez-vous du télémètre !), où il a fallu centrer les signaux d'​entrée sur la tension $(vmax+vmin)/​2$ plutôt que sur 0V.
 +
 +<ifauth @prof>
 +Note bertrand:
 +réponse indicielle du filtre RIF deborde 1.65 + 1 + 1 =3.65V
 +</​ifauth>​
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
 +  echo commence
 +  cd ~/​TP_ARCHI_TNS_ETU
 +  git commit -a -m'​offset working'​
 +  gitk & 
 +  echo fini
 +  ​
 +
 +
  
 <ifauth @prof> <ifauth @prof>
Ligne 182: Ligne 209:
   - Définissez le nouveau filtre $s_k=2e_k$   - Définissez le nouveau filtre $s_k=2e_k$
     - Tracez sa réponse indicielle. Quel problème constatez-vous ?     - Tracez sa réponse indicielle. Quel problème constatez-vous ?
-  - Pour corriger ce problème, vous devez saturer le résultat du calcul de l'​équation de récurrence avant de le retourner (donc avant la fin de **TraiteUnEchantillon()**). Pour cela, vous utiliserez les attributs de la classe **Filtre** suivants: ​ **valeurSortieMax** et **valeurSortieMin**. ​ Pour que ces deux attributs soient correctement initialisés,​ vous veillerez à ajouter ​en valeurs effectives ​correctes ​pour paramètres du constructeur de l'​objet filtre **valeurSortieMaxInit** et **valeurSortieMinInit**. Par exemple la ligne:+  - Pour corriger ce problème, vous devez saturer le résultat du calcul de l'​équation de récurrence avant de le retourner (donc avant la fin de **TraiteUnEchantillon()**). Pour cela, vous utiliserez les attributs de la classe **Filtre** suivants: ​ **valeurSortieMax** et **valeurSortieMin**. ​ Pour que ces deux attributs soient correctement initialisés,​ vous veillerez à ajouter ​les valeurs effectives pour les paramètres du constructeur de l'​objet filtre **valeurSortieMaxInit** et **valeurSortieMinInit**. Par exemple la ligne:
 <file cpp cons3.cpp>  ​ <file cpp cons3.cpp>  ​
-  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​offsetEntree,offsetSortie); +  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​0,NULL,​valeur_pour_offsetEntreeInit,​valeur_pour_offsetSortieInit); 
 </​file>  ​ </​file>  ​
 devra être remplacée par: devra être remplacée par:
 <file cpp cons4.cpp>  ​ <file cpp cons4.cpp>  ​
-  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​offsetEntree,offsetSortie,valeurSortieMaxInit,valeurSortieMin); +  FiltreTrace filtre_echo_RIF(NB_COEFF_B,​coeffB,​NB_COEFF_A,​coeffA,​0,NULL,offsetEntreeInit,offsetSortieInit,​valeur_pour_valeurSortieMaxInit,​valeur_pour_valeurSortieMinIit); 
 </​file>​ </​file>​
   - Testez le bon fonctionnement de l'​ensemble sur la sinusoïde   - Testez le bon fonctionnement de l'​ensemble sur la sinusoïde
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}} Une fois les réponses validées, mettre à jour le suivi de version en saisissant dans une console:
 +  echo commence
 +  cd ~/​TP_ARCHI_TNS_ETU
 +  git commit -a -m'​saturation working'​
 +  gitk & 
 +  echo fini
 +  ​
  
  
tptns2018_2.1553093827.txt.gz · Dernière modification: 2019/03/20 15:57 par bvandepo