This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| fr:examples:can:wiper:tp2 [2010/03/05 10:26] – sdeniaud | fr:examples:can:wiper:tp2 [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== TP2 - TP EXEMPLE N°2: MARCHE/ | + | ====== TP2 - Exemple 2 ====== |
| ===== Sujet: ===== | ===== Sujet: ===== | ||
| + | **Marche/ | ||
| ==== Objectifs : ==== | ==== Objectifs : ==== | ||
| Line 21: | Line 22: | ||
| Un circuit de puissance (réf: L6202" | Un circuit de puissance (réf: L6202" | ||
| D' | D' | ||
| - | → GP2 ou | + | * GP2 ou |
| - | → GP3 ou | + | |
| - | → GP4 ou | + | |
| - | Dans notre application, | + | Dans notre application, |
| **Définitions des trames pour commander le moteur:** | **Définitions des trames pour commander le moteur:** | ||
| Une sucession de trames de commande (type IM) devra être envoyée, dans un ordre bien précis au module asservissement, | Une sucession de trames de commande (type IM) devra être envoyée, dans un ordre bien précis au module asservissement, | ||
| Définition des éléments d' | Définition des éléments d' | ||
| - | Dans ce cas, la trame envoyée par le contrôleur CAN (Circuit SJA1000 sur carte CAN_PC104) sera vue par le récepteur (circuit MCP25050 sur module) comme une IM "Input message", | + | Dans ce cas, la trame envoyée par le contrôleur CAN (Circuit SJA1000 sur carte CAN_PC104) sera vue par le récepteur (circuit MCP25050 sur module) comme une IM "Input message", |
| L’identificateur défini dans le chapitre 1, pour un " | L’identificateur défini dans le chapitre 1, pour un " | ||
| - | → Définition de variables structurées sous le modèle | + | * Définition de variables structurées sous le modèle |
| - | | + | |
| - | → Définition des éléments d' | + | <code c> |
| T_IM_Asservissement.trame_info.registre=0x00; | T_IM_Asservissement.trame_info.registre=0x00; | ||
| T_IM_Asservissement.trame_info.champ.extend=1; | T_IM_Asservissement.trame_info.champ.extend=1; | ||
| T_IM_Asservissement.trame_info.champ.dlc=0x03; | T_IM_Asservissement.trame_info.champ.dlc=0x03; | ||
| T_IM_Asservissement.ident.extend.identificateur.ident=Ident_T_IM_Asservissement; | T_IM_Asservissement.ident.extend.identificateur.ident=Ident_T_IM_Asservissement; | ||
| + | </ | ||
| A chacune des trames de commande " | A chacune des trames de commande " | ||
| - | Trame n°1 | + | **Trame n°1** → pour définir les entrées et sorties du module " |
| Il faut initialiser le registre GPDDR ("Data Direction Register" | Il faut initialiser le registre GPDDR ("Data Direction Register" | ||
| - | GP7=fs -> entrée; GP6=fcg -> entrée; GP5=fcd -> entrée; GP4=ValidIP -> sortie; | + | <code c> |
| - | GP3=PWM1 -> sortie; GP2=PWM2 -> sortie; GP1=AN1 -> entrée; GP0=AN0 -> entrée; | + | GP7=fs -> entrée; GP6=fcg -> entrée; GP5=fcd -> entrée; GP4=ValidIP -> sortie; |
| - | T_IM_Asservissement.data[0]=0x1F; | + | GP3=PWM1 -> sortie; GP2=PWM2 -> sortie; GP1=AN1 -> entrée; GP0=AN0 -> entrée; |
| - | (doc MCP25050 page 16) | + | T_IM_Asservissement.data[0]=0x1F; |
| - | T_IM_Asservissement.data[1]=0x7F; | + | T_IM_Asservissement.data[1]=0x7F; |
| - | T_IM_Asservissement.data[2]=0xE3; | + | T_IM_Asservissement.data[2]=0xE3; |
| - | Suite à ces définitions, | + | </ |
| - | - envoyer la trame par la fonction Ecire_Trame(T_IM_Asservissement) | + | Suite à ces définitions, |
| - | - | + | * envoyer la trame par la fonction Ecire_Trame(T_IM_Asservissement) |
| + | * puis attendre la réponse de type " | ||
| + | |||
| + | **Trame n°2** | ||
| + | D' | ||
| + | <code c> | ||
| + | bit 7 =1 TMR1ON Validation du "Timer 1" | ||
| + | bits 5:4 seront mis à 0 pour avoir un coefficient de division de fréquence égal à 1 ("TMR1 prescaler value" = 1) | ||
| + | T_IM_Asservissement.data[0]=0x21; | ||
| + | T_IM_Asservissement.data[1]=0xB3; | ||
| + | T_IM_Asservissement.data[2]=0x80; | ||
| + | </ | ||
| - | Trame n°2 → pour initialiser la sortie GP2 en sortie PWM1 (commande | ||
| - | D' | ||
| - | bit 7 =1 TMR1ON Validation du "Timer 1" | ||
| - | bits 5:4 seront mis à 0 pour avoir un coefficient de division de fréquence égal à 1 ("TMR1 prescaler value" = 1) | ||
| - | T_IM_Asservissement.data[0]=0x21; | ||
| - | (doc MCP25050 p15) 05H + décalage = 05H + 1CH = 21H | ||
| - | T_IM_Asservissement.data[1]=0xB3; | ||
| - | T_IM_Asservissement.data[2]=0x80; | ||
| Suite à ces définitions, | Suite à ces définitions, | ||
| - | - envoyer la trame par la fonction | + | * envoyer la trame par la fonction |
| - | - puis attendre la réponse de type " | + | |
| - | Trame n°3 | + | **Trame n°3** → pour définir la fréquence de la sortie PWM1: |
| Cette fréquence dépend de la valeur chargée dans le registre " | Cette fréquence dépend de la valeur chargée dans le registre " | ||
| - | | + | <code c> |
| - | (doc MCP25050 p15) 07H + décalage = 07H + 1CH = 23H | + | T_IM_Asservissement.data[0]=0x23; |
| - | T_IM_Asservissement.data[1]=0xFF; | + | T_IM_Asservissement.data[1]=0xFF; |
| - | T_IM_Asservissement.data[2]=0xFF; | + | T_IM_Asservissement.data[2]=0xFF; |
| + | </ | ||
| La fréquence du quartz implanté sur la carte " | La fréquence du quartz implanté sur la carte " | ||
| Ce qui est une fréquence correcte pour piloter un moteur en PWM (fréquence sensiblement inaudible). | Ce qui est une fréquence correcte pour piloter un moteur en PWM (fréquence sensiblement inaudible). | ||
| + | |||
| Suite à ces définitions, | Suite à ces définitions, | ||
| - | - envoyer la trame par la fonction | + | * envoyer la trame par la fonction |
| - | - puis attendre la réponse de type " | + | |
| - | Trame n°4 | + | **Trame n°4** → pour définir le rapport cyclique de la sortie PWM1 (module de la commande donc de la vitesse du moteur) |
| - | T_IM_Asservissement.data[0]=0x25; | + | <code c> |
| - | (doc MCP25050 p15) 09H + décalage = 09H + 1CH = 25H | + | T_IM_Asservissement.data[0]=0x25; |
| - | T_IM_Asservissement.data[1]=0xFF; | + | T_IM_Asservissement.data[1]=0xFF; |
| - | T_IM_Asservissement.data[2]=0x7F; | + | T_IM_Asservissement.data[2]=0x7F; |
| + | </ | ||
| Suite à ces définitions, | Suite à ces définitions, | ||
| - | - envoyer la trame par la fonction | + | * envoyer la trame par la fonction |
| - | - puis attendre la réponse de type " | + | |
| - | Pour démarrer (ou arrêter) le moteur, on agira alors sur le signal ' | + | Pour démarrer (ou arrêter) le moteur, on agira alors sur le signal |
| - | → pour valider le circuit de puissance (démarrer le moteur) | + | |
| + | <code c> | ||
| T_IM_Asservissement.data[0]=0x1E; | T_IM_Asservissement.data[0]=0x1E; | ||
| T_IM_Asservissement.data[1]=0x10; | T_IM_Asservissement.data[1]=0x10; | ||
| T_IM_Asservissement.data[2]=0x10; | T_IM_Asservissement.data[2]=0x10; | ||
| - | → pour inhiber | + | </ |
| + | * pour inhiber | ||
| + | <code c> | ||
| T_IM_Asservissement.data[0]=0x1E; | T_IM_Asservissement.data[0]=0x1E; | ||
| T_IM_Asservissement.data[1]=0x10; | T_IM_Asservissement.data[1]=0x10; | ||
| T_IM_Asservissement.data[2]=0x00; | T_IM_Asservissement.data[2]=0x00; | ||
| - | + | </ | |
| - | Définitions des trames pour configurer et interroger le module commodo E.G. | + | **Définitions des trames pour configurer et interroger le module commodo E.G. |
| - | (Voir TP Exemple n°1) | + | (Voir TP Exemple n°1)** |
| - | + | ||
| ==== Organigramme ==== | ==== Organigramme ==== | ||
| + | |||
| + | {{ : | ||
| ==== Programme en " | ==== Programme en " | ||