Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
fr:exercises:can:wiper:tp5 [2010/03/03 14:59] – créée sdeniaudfr:exercises:can:wiper:tp5 [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== TP5 - Exercice ======+====== Exercice ====== 
 +===== Sujet: =====
  
 +**Régulation de vitesse moteur E.G.**
 +
 +==== Objectifs : ====
 +
 +  * Acquérir le résultat d'une convertion Analogique -> Numérique via un réseau CAN.
 +
 +  * Réaliser un échantillonnage avec période imposée.
 +
 +  * Expérimenter le mode de commande en « boucle fermée »  d'un système analogique pilotable par réseau CAN.
 +
 +  * Programmer un correcteur numérique (action proportionnelle, action intégrale)
 +
 +===== 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.
 +
 +{{  :fr:exercises:can:wiper:boucle.png?600  |}}
 +
 +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).
 +
 +  * Définition de variables structurées sous le modèle ''Trame'':
 +<code c>
 +  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.
 +</code>
 +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 
 +
 +  * Accès et définition des différents éléments de la variable structurée ''T_IRM_Acquerir_FC_AN''
 +<code c>
 +  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; 
 +</code>
 +La trame réponse, suite à l'IRM, comportera en données associées 8 octets (doc MCP25050 p22):
 +<code c>
 +- 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
 +</code>
 +Les 3 autres octets ne sont pas utiles dans notre application.
 +Le résultat de conversion est sur 10bits: 
 +{{  :fr:exercises:can:wiper:data.png|}}
 +
 +  * pour résultat AN0 (potentiomètre)
 +
 +  * pour résultat AN1(capteur vitesse)
 +
 +~~CL~~
 +
 +==== 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".
 +
 +  * Pour définir la période d'échantillonnage (fréquence d'envoi des trames par le"'séquenceur")
 +
 +Cette fréquence dépend de la valeur chargée dans le registre "STON" 
 +<code c>
 +  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
 +</code>
 +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. 
 +
 +  * Pour activer l'auto-conversion des convertisseurs Ana -> Num
 +
 + IL faut initialiser le registre "IOINTEN" et notamment les deux bits correspondant aux deux entrées analogiques utilisées dans cette application.
 +<code c>
 +  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).
 +</code>
fr/exercises/can/wiper/tp5.1267628393.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0