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
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.
Simulation
- Ouvrir un terminal dans le répertoire PMSM_PYSIM/PYSIMCODER et taper :
$ bash pysim-run.sh
- Dans pysimcoder, faire File–> New, sauvegarder ce fichier avec le nom pmsm.dgm
- Choisir des blocs dans Library afin de construire le système suivant ( le bloc Const contient la valeur 100 ) :
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
}
- Simulation –> Simulate
- Double cliquer sur le bloc Plot, la courbe s’affiche
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
- Renommer le fichier précédent en pmsm_target.dgm.
- Supprimer le bloc plot ( ce dernier ne peut générer du code pour la STM32 )
- Simulation –> Generate C-code
Vérifier dans le terminal la mention ’### Created executable: pmsm_target’ - Ouvrir stm32cubeIDE ( cf tutorial stm32cubeIDE ), avec pour workspace WORKSPACE_F446_PMSM_STM32CUBEIDE
- Compiler ( CTRL+B ) et Lancer le programme avec la session de Debug.
- 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. - 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.
Q2. Modifier le schéma pour transiter par l’intervalle [-2^15,2^15[