Outils pour utilisateurs

Outils du site


tns_nucleo_tp1

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
tns_nucleo_tp1 [2019/04/01 12:46]
bvandepo
tns_nucleo_tp1 [2019/04/03 14:01] (Version actuelle)
bvandepo
Ligne 60: Ligne 60:
  
  
-===Initialisation système de gestion de version===+===Initialisation du système de gestion de version===
 Seulement après avoir importé le projet depuis l'archive dans eclipse, saisir **dans une nouvelle console**: Seulement après avoir importé le projet depuis l'archive dans eclipse, saisir **dans une nouvelle console**:
   echo commence   echo commence
Ligne 81: Ligne 81:
 Vous devrez affecter une bonne valeur à **htim1.Init.Period** pour obtenir la fréquence demandée. Il s'agit de la valeur correspondant au nombre de cycle -1 de décomptage du timer (chargée dans le registre nommé ARR lors du TD précédent), le prédiviseur étant réglé sur un facteur 1. Vous avez effectué un tel calcul lors du TD précédent. Vous devrez affecter une bonne valeur à **htim1.Init.Period** pour obtenir la fréquence demandée. Il s'agit de la valeur correspondant au nombre de cycle -1 de décomptage du timer (chargée dans le registre nommé ARR lors du TD précédent), le prédiviseur étant réglé sur un facteur 1. Vous avez effectué un tel calcul lors du TD précédent.
  
-Il faut ensuite compléter la fonction d'interruption dans le fichier Src/main.cpp +Il faut ensuite compléter la fonction d'interruption dans le fichier **Src/main.cpp**: 
 +<file cpp main.cpp>
   void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){   void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
-     //Code executé à la fréquence d'interruption+     //Ecrire ici votre code exécuté à la fréquence d'interruption
   }   }
-  +</file>  
 ===Génération du signal sur la broche===   ===Génération du signal sur la broche===  
  
Ligne 98: Ligne 98:
 {{https://homepages.laas.fr/bvandepo/files/iut/tp_tns/image_verso.jpg}} {{https://homepages.laas.fr/bvandepo/files/iut/tp_tns/image_verso.jpg}}
      
-Les autres broches des connecteurs sont organisées tel que le montre le schéma suivant:+Les autres broches des connecteurs sont organisées tel que le montre le schéma suivant (la carte étant vue depuis le haut, composants face à vous):
 {{ ::nucleo-f334_pinout.png?800 |}} {{ ::nucleo-f334_pinout.png?800 |}}
  
Ligne 199: Ligne 199:
 Les fonctions de la librairies math (sin, cos, tan ...) ne sont pas utilisables dans la fonction de gestion d'interruption timer du fait de leur lenteur. Il faut donc définir un tableau contenant les échantillons précalculés d'une période de la fonction sinus pour la fréquence demandée.  Les fonctions de la librairies math (sin, cos, tan ...) ne sont pas utilisables dans la fonction de gestion d'interruption timer du fait de leur lenteur. Il faut donc définir un tableau contenant les échantillons précalculés d'une période de la fonction sinus pour la fréquence demandée. 
  
-Pour cela, copier dans le fichier main.cpp et compléter le code suivant. Les échantillons ainsi générés doivent couvrir la dynamique du convertisseur DAC (0 < = échantillon < = 4095). La constante $\pi$ est définie sous le nom **M_PI**.+Pour cela, copier dans le fichier main.cpp et compléter le code suivant:
  
  
Ligne 217: Ligne 217:
 </file> </file>
  
-Pour déterminer la valeur des différents échantillons, vous pouvez vous inspirer du code écrit lors du TP4 de TNS qui est rappelé ici :+ 
 +Pour déterminer la valeur des différents échantillons, vous pouvez vous inspirer du code écrit lors du TP4 de TNS qui est rappelé ci-dessous. Les échantillons ainsi générés doivent être compris dans la dynamique du convertisseur DAC (0 < = échantillon < = 4095) et leur valeur moyenne doit être réglée au milieu cette plage. La constante $\pi$ est définie sous le nom **M_PI**. Dans la formule suivante, **Tech** est obtenue en inversant **SAMPLING_RATE**. 
  
 <file txt aide.txt> <file txt aide.txt>
-  Ecrivez d'abord l'expression mathématique de chaque signal+  Ecrivez d'abord l'expression mathématique du signal:
    Ex : signal(t)=A.sin(2Π.fo.t) + Vmoy    Ex : signal(t)=A.sin(2Π.fo.t) + Vmoy
-  Déterminez alors la valeur du signal aux instants d'échantillonnages.+  Déterminez alors la valeur du signal aux instants d'échantillonnages:
    Ex : signal(k.Tech)=A.sin(2Π.fo.k.Tech) + Vmoy    Ex : signal(k.Tech)=A.sin(2Π.fo.k.Tech) + Vmoy
   Créez ensuite un tableau de taille nbEch (qui dépend de la durée voulue. Ex : tmax=duree=kmax.Tech d’où   Créez ensuite un tableau de taille nbEch (qui dépend de la durée voulue. Ex : tmax=duree=kmax.Tech d’où
Ligne 232: Ligne 234:
  
  
-Cette fonction est à appeler **une fois** au bon endroit dans le code de la fonction main, avant le lancement du timer, afin d'éviter qu'une interruption timer ne survienne avant que le tableau soit initialisé: +La fonction **void init_sin_tabbed()** est à appeler **une seule fois** au bon endroit dans le code de la fonction **main()**, avant le lancement du timer, afin d'éviter qu'une interruption timer ne survienne avant que le tableau soit initialisé: 
 +<file c call_sin_tabbed.c>
   //Insérez ici l'appel de votre fonction **init_sin_tabbed**   //Insérez ici l'appel de votre fonction **init_sin_tabbed**
   HAL_TIM_Base_Start_IT(&htim1); //Déjà mis en place   HAL_TIM_Base_Start_IT(&htim1); //Déjà mis en place
   HAL_DAC_Start(&hdac2, DAC2_CHANNEL_1); //Déjà mis en place   HAL_DAC_Start(&hdac2, DAC2_CHANNEL_1); //Déjà mis en place
 +</file>
  
- +Ainsi, le tableau **sin_tabbed** contient les échantillons à utiliser dans la fonction d'interruption.
-Ainsi, le tableau "sin_tabbedcontient les échantillons à utiliser dans la fonction d'interruption.+
  
 ===Exploitation des échantillons dans la fonction d'interruption Timer=== ===Exploitation des échantillons dans la fonction d'interruption Timer===
Ligne 328: Ligne 330:
   HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); // Lance la conversion    HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); // Lance la conversion 
   HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); // Stoppe la conversion    HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); // Stoppe la conversion 
-  HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); //Attend le résultat de la conversion, le deuxième paramètre permet de limiter le temps d'attente. Vous pouvez le régler à 10+  HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);  
 +  //Attend le résultat de la conversion, le deuxième paramètre permet de limiter le temps d'attente. 
 +  //Vous pouvez le régler à 10
   uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) //Lit le résultat de la conversion   uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) //Lit le résultat de la conversion
      
tns_nucleo_tp1.1554115578.txt.gz · Dernière modification: 2019/04/01 12:46 de bvandepo