LAB 1 : Génération d'un Signal PWM à Valeur Moyenne Constante

LAB 1 : Génération d'un Signal PWM à Valeur Moyenne Constante

Calculs Préliminaires

Le Convertisseur Analogique-numérique

Q1. Quelle est la taille des données converties ?

Génération du signal PWM (Pulse Width Modulation)

Q2. Quelle est la valeur max admissible dans les registres CCR des timers associés à la génération des signaux PWM ?


Prise en main de l’environnement Pysimcoder

PROJET SOURCE

PMSM_PYSIM.zip

Le répertoire PMSM_PYSIM contient :

  • PYSIMCODER : Environnement de Simulation python ‘simulink-like’, avec génération de code pour cible ( https://github.com/robertobucher/pysimCoder )
  • WORKSPACE_F446_PMSM_STM32CUBEIDE : Projet Eclipse-stm32cubeIDE pour test sur cible STM32
  • RTScope.py : tracé de courbes à partir de mesures réalisées par la carte STM32

Pysimcoder permet donc dans un premier temps de réaliser un système sous forme de schémas blocs, de le tester ( tracé de courbes en simulation ), puis de générer un fichier correspondant à ces blocs afin de programmer une cible STM32.

schema_principe.svg

Simulation

  1. Ouvrir un terminal dans le répertoire PMSM_PYSIM/PYSIMCODER et taper :
$ bash pysim-run.sh 
  1. Dans pysimcoder, faire File–> New, sauvegarder ce fichier avec le nom pmsm.dgm
  2. Choisir des blocs dans Library afin de construire le système suivant ( le bloc Const contient la valeur 100 ) :

pmsm1.png

REMARQUE : Un bloc doit avoir systématiquement une entrée.
Ici le bloc potentiomètre reçoit la valeur de CONST en simulation, et le résultat de la conversion analogique-numérique pour le potentiomètre sur la cible.
En effet le code associé au bloc potentiometre est le suivant :

static void inout(python_block *block)
{ 
   double *y = block->y[0]; 
   double *u = block->u[0];  
#ifdef __STM32__ // TARGET CODE HERE
	y[0] =  potentiometre_pysim;
#else 				// PC SIM CODE HERE
	y[0] = u[0];
#endif 
}
  1. Simulation –> Simulate
  2. Double cliquer sur le bloc Plot, la courbe s’affiche

plot.png

REMARQUE : Pour toute nouvelle simulation, il faut fermer la fenêtre avec la courbe, simuler, et recliquer sur le bloc plot

Generation du Code et Test sur Cible

  1. Renommer le fichier précédent en pmsm_target.dgm.
  2. Supprimer le bloc plot ( ce dernier ne peut générer du code pour la STM32 )

schema1.png

  1. Simulation –> Generate C-code
    Vérifier dans le terminal la mention ’### Created executable: pmsm_target’
  2. Ouvrir stm32cubeIDE ( cf tutorial stm32cubeIDE ), avec pour workspace WORKSPACE_F446_PMSM_STM32CUBEIDE
  3. Compiler ( CTRL+B ) et Lancer le programme avec la session de Debug.
  4. Observer à l’oscilloscope la tension aux bornes du premier bras de pont de l’onduleur. On doit observer une tension PWM à valeur moyenne constante ; le rapport cyclique doit être modifiable avec le potentiomètre de la carte onduleur.
    Mesurer au passage la fréquence d’une des tensions de l’onduleur.
  5. Lancer dans un terminal ( dans le répertoire PMSM_PYSIM ) :
$ python RTScope.py

On doit observer un signal carré ( Pulse ) dont l’amplitude est réglable avec le potentiomètre.

Côté carte, l’envoi des données se déroule dans la tache Print_Task( fichier main.c ) :

static void Print_Task(void *pvParameters)
{
	char buf[6];
	for (;;)
	{
			buf[5] = speed_mes>>8;
			buf[4] = speed_mes;
			buf[3] = (pulse >> 8) ;
			buf[2] = pulse;
			buf[1] = 0;
			buf[0] = 123; // START OF FRAME
			uart_Write(buf, 6);
	}
}

Modifications du Schéma

Génération du signal PWM, réglage du rapport cyclique avec le potentiomètre

Q1. Compléter le schéma pour adapter l’intervalle des valeurs issues du convertisseur analogique numérique (potentiomètre) à l’intervalle des valeurs du timer-PWM.

modif_1.svg

Q2. Modifier le schéma pour transiter par l’intervalle [-2^15,2^15[

modif_2.svg