Table of Contents

Exercice 2

Sujet:

Régulation de vitesse moteur E.G.

Objectifs :

Cahier des charges :

Commander le moteur “essuie glace” en boucle fermée avec correcteur à action proportionnelle. La consigne de vitesse est donnée par l’entrée analogique du module « Commodo Essuie-glace » La mesure vitesse est le résultat conversion entrée AN1 → sortie F/U sur le module « Asservissement ».

Informations utiles

Principe de la commande en boucle fermée

Dans le cas d'une régulation en vitesse du moteur en mode proportionnel, la grandeur de commande est proportionnelle à la différence (Consigne vitesse - Mesure vitesse). Pour le programme, la consigne vitesse sera le résultat de conversion de la tension appliquée sur l'entrée analogique AN0 (GP0) du module « Commodo Essuie-Glace » et la mesure vitesse, le résultat de conversion de la sortie du convertisseur F/U appliquée sur l'entrée AN1 (GP1). Ce sera une régulation numérique, donc échantillonnée.

Dans le cas d'une régulation par action proportionnelle, Sr aura pour expression: Sr = Kp.(Cv-Mv) Le calcul se fera à intervalles de temps régulier appelés “période d'échantillonnage” et notée “Te”. Le coefficient Kp sera considéré dans le programme comme un entier, mais réalité ses 4bits de poids faibles représenteont la partie fractionnaire: Kp=0x10 → valeur =1 ; Kp=20h → valeur =2; etc.. Kp=0x08 → valeur =0,5; Kp=0x04 → valeur =0,25; Kp=0x02 → valeur =0,125; etc… En définitive Kp sera compris dans l'intervalle: 15,9375 ≤ Kp ≤ 0

Acquisition des entrées "Commodo Essuie Glace" pour la consigne

La technique d'acquisition des entrées binaires et de l'entrée analogique, par réseau CAN, du module Commodo E.G est décrite dans le TP exemple n°1.

Acquisition des entrées du module "Asservissement" pour la mesure vitesse

Une solution est d'utiliser l'IRM Read A/D Regs, ce qui permet d'acquérir à la fois les états des entrées logique (fins de courses) et les résultats de conversion des entrées analogiques (doc MCP25050 p22).

  Trame T_IRM_Asservissement; 	 // Trame destinée à l’interrogation du module asservissement pour acquérir fins de courses ainsi que les résultats de conversion A->N.

Remarque: La variable structurée T_IRM_ Asservissement comportera 5 octets utiles seulement, 1octet pour trame_info et 4 octets pour l'identificateur en mode étendu

  T_IRM_Asservissement.trame_info.registre=0x00;  //On initialise tous les bits à 0
  T_IRM_Asservissement.trame _info.champ.extend=1; //On travaille en mode étendu
  T_IRM_ Asservissement.trame _info.champ.dlc=0x08; //Il y a 8 octets de données demandés
  T_IRM_ Asservissement.ident.extend.identificateur.ident=0x00840000; 

La trame réponse, suite à l'IRM, comportera en données associées 8 octets (doc MCP25050 p22):

- octet de rang 0  (data[0])→ valeur IOINTFL  non utilile dans notre cas
- octet de rang 1  (data[1])→ valeur GPIO → Valeur des entrées sorties logiques
- octet de rang 2  (data[2])→ valeur AN0H → 8 bits MSB conversion entrée anologique 0
- octet de rang 3  (data[3])→ valeur AN1H → 8 bits MSB conversion entrée anologique 1
- octet de rang 4  (data[4])→ valeur AN10H → 2 fois 2 bits LSB conversion entrées ana. 1 et 0

Les 3 autres octets ne sont pas utiles dans notre application. Le résultat de conversion est sur 10bits:

Réalisation de période d'échantillonnage:

Il est possible d'utiliser la capacité du circuit MCP25050 à envoyer spontanément et à intervalles de temps réguliers, un trame Read A/D Regs contenant dans les “Data” les résultats de conversion (doc MCP25050 page 22). Il faut pour cela initialiser la fonction “Scheduled transmission” (doc MCP25050 page 24). Il faut pour cela initialiser, par des trames de type “IM”, les rgistre “STCON” et “IOINTEN”.

Cette fréquence dépend de la valeur chargée dans le registre “STON”

  T_IM_Asservissement.data[0]=0x2C; // adresse du registre STON en écriture 
   (doc MCP25050 p15) 10H + décalage = 10H + 1CH = 2CH
  T_IM_Asservissement.data[1]=0xFF; // Masque: tous les bits sont concernés
  T_IM_Asservissement.data[2]=0xD2; // Valeur: (voir doc MCP25050 page 24).
	b7 -> STEN = 1  -> pour activer le séquenseur
	b6 -> STMS = 1 -> Pour trames à 8 octets (contenant les résultats de conversion)
	b5,B4 = 0 1 -> période de base = 16.4096.Tosc
	b3..b0 = 0010 -> multiplieur de période = 3

La fréquence du quartz implanté sur la carte “asservissement” étant égale à 16Mhz (Tosc = 1/16.106), la période d'envoi des trames sera égale à 16.4096.3/16.106 = 12 mS.

IL faut initialiser le registre “IOINTEN” et notamment les deux bits correspondant aux deux entrées analogiques utilisées dans cette application.

  T_IM_Asservissement.data[0]=0x1C; // adresse du registre IOINTEN en écriture 
   (doc MCP25050 p15) 00H + décalage = 00H + 1CH = 1CH
  T_IM_Asservissement.data[1]=0x03; // Masque: seuls les bits 0 et 1 sont concernés
  T_IM_Asservissement.data[2]=0x03; // Valeur: (voir doc MCP25050 page 27).