Régulation de vitesse moteur E.G.
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 ».
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
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.
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
: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_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:
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).