This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| fr:exercises:can:wiper:tp5 [2010/03/03 14:59] – créée sdeniaud | fr:exercises:can:wiper:tp5 [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== 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, | ||
| + | |||
| + | ===== Cahier des charges : ===== | ||
| + | |||
| + | Commander le moteur " | ||
| + | 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, | ||
| + | Pour le programme, la consigne vitesse sera le résultat de conversion de la tension appliquée sur l' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Dans le cas d'une régulation par action proportionnelle, | ||
| + | Le calcul se fera à intervalles de temps régulier appelés " | ||
| + | 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=0x08 | ||
| + | En définitive Kp sera compris dans l' | ||
| + | |||
| + | ==== Acquisition des entrées " | ||
| + | |||
| + | La technique d' | ||
| + | |||
| + | ==== Acquisition des entrées du module " | ||
| + | |||
| + | Une solution est d' | ||
| + | |||
| + | * Définition de variables structurées sous le modèle '' | ||
| + | <code c> | ||
| + | Trame T_IRM_Asservissement; | ||
| + | </ | ||
| + | Remarque: | ||
| + | |||
| + | * Accès et définition des différents éléments de la variable structurée '' | ||
| + | <code c> | ||
| + | T_IRM_Asservissement.trame_info.registre=0x00; | ||
| + | T_IRM_Asservissement.trame _info.champ.extend=1; | ||
| + | T_IRM_ Asservissement.trame _info.champ.dlc=0x08; | ||
| + | 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): | ||
| + | <code c> | ||
| + | - octet de rang 0 (data[0])→ valeur IOINTFL | ||
| + | - 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: | ||
| + | {{ : | ||
| + | |||
| + | * pour résultat AN0 (potentiomètre) | ||
| + | |||
| + | * pour résultat AN1(capteur vitesse) | ||
| + | |||
| + | ~~CL~~ | ||
| + | |||
| + | ==== Réalisation de période d' | ||
| + | |||
| + | Il est possible d' | ||
| + | Il faut pour cela initialiser, | ||
| + | |||
| + | * Pour définir la période d' | ||
| + | |||
| + | Cette fréquence dépend de la valeur chargée dans le registre " | ||
| + | <code c> | ||
| + | T_IM_Asservissement.data[0]=0x2C; | ||
| + | (doc MCP25050 p15) 10H + décalage = 10H + 1CH = 2CH | ||
| + | T_IM_Asservissement.data[1]=0xFF; | ||
| + | T_IM_Asservissement.data[2]=0xD2; | ||
| + | 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 " | ||
| + | |||
| + | * Pour activer l' | ||
| + | |||
| + | IL faut initialiser le registre " | ||
| + | <code c> | ||
| + | T_IM_Asservissement.data[0]=0x1C; | ||
| + | (doc MCP25050 p15) 00H + décalage = 00H + 1CH = 1CH | ||
| + | T_IM_Asservissement.data[1]=0x03; | ||
| + | T_IM_Asservissement.data[2]=0x03; | ||
| + | </ | ||