====== Exercice 2 ====== ===== 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'': 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 * Accès et définition des différents éléments de la variable structurée ''T_IRM_Acquerir_FC_AN'' 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: {{ :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" 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. * 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. 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).