This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| fr:examples:can:wiper:tp3 [2010/03/05 10:47] – sdeniaud | fr:examples:can:wiper:tp3 [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== TP3 - TP N°4: FAIRE BATTRE LE BALAI D' | + | ====== TP3 - Exemple 3 ====== |
| ===== Sujet: ===== | ===== Sujet: ===== | ||
| + | **Faire battre le balai de l' | ||
| ==== Objectifs : ==== | ==== Objectifs : ==== | ||
| - | - Définir les différentes trames interrogatives ou de commande à faire transiter par le réseau CAN en fonction d'une action souhaitée. | + | * Définir les différentes trames interrogatives ou de commande à faire transiter par le réseau CAN en fonction d'une action souhaitée. |
| - | - Commander un actionneur électrique (moteur à courant continu), dans les deux sens de rotation par l' | + | * Commander un actionneur électrique (moteur à courant continu), dans les deux sens de rotation par l' |
| - | - Acquérir l' | + | * Acquérir l' |
| ==== Cahier des charges : ==== | ==== Cahier des charges : ==== | ||
| Line 24: | Line 25: | ||
| **Principe: | **Principe: | ||
| Le module d' | Le module d' | ||
| - | Ce module permet la commande d'un moteur à courant continu 24V/ 1A, dans les deux sens de rotation, en mode " | + | Ce module permet la commande d'un moteur à courant continu 24V/ 1A, dans les deux sens de rotation, en mode " |
| - | Cette possibilité a été expérimentée dans le TP Exemple n°3 mais dans un seul sens de rotation. | + | Il permet d' |
| + | → fcd (fin de course droit) relié à l' | ||
| + | → fcg (fin de course gauche) relié à l' | ||
| + | → fs (fin de surcource) relié à l' | ||
| + | Le cycle demandé conduit au diagramme des états suivant: | ||
| - | Ce module « asservissement » disposeégalemnt de 3 entrées TOR sur lesquelles on pourra connecter les capteurs de fin de courses: | + | {{ :fr: |
| - | → fcd (fin de course droit) relié à l' | + | |
| - | → fcg (fin de course gauche) relié à l' | + | |
| - | → fs (fin de surcource) relié à l' | + | |
| - | + | ||
| - | Le cycle demandé conduit au diagramme des états suivant: | + | |
| - | **Configurations du module "Asservissemnt" pour l' | + | **Configurations du module "Asservissement" pour l' |
| Comme dans l' | Comme dans l' | ||
| - | Trame n°1 | ||
| - | Il faut initialiser le registre GPDDR ("Data Direction Register" | ||
| + | **Trame n°1** | ||
| + | Il faut initialiser le registre GPDDR ("Data Direction Register" | ||
| - | Trame n°2 → pour initialiser la sortie GP2 en sortie PWM1 (commande | + | **Trame n°2** → pour initialiser la sortie GP2 en sortie PWM1 (commande |
| - | -> | + | |
| - | Trame n°3 | + | **Trame n°3** → pour définir la fréquence de la sortie PWM1: → Idem TP Exemple n°2 |
| - | Trame n°4 → pour définir le rapport cyclique de la sortie PWM1 (module de la commande donc de la vitesse du moteur) | + | |
| - | Trame n°5 → pour initialiser la sortie GP3 en sortie PWM2 (commande | + | **Trame n°4** |
| + | |||
| + | **Trame n°5** → pour initialiser la sortie GP3 en sortie PWM2 (commande | ||
| D' | D' | ||
| - | bit 7 =1 TMR2ON Validation du "Timer 2" | + | <code c> |
| - | bits 5:4 seront mis à 0 pour avoir un coefficient de division de fréquence égal à 1 ("TMR2 prescaler value" = 1) | + | bit 7 =1 TMR2ON Validation du "Timer 2" |
| - | T_IM_Asservissement.data[0]=0x22; | + | bits 5:4 seront mis à 0 pour avoir un coefficient de division de fréquence égal à 1 ("TMR2 prescaler value" = 1) |
| - | (doc MCP25050 p15) 06H + décalage = 06H + 1CH = 22H | + | T_IM_Asservissement.data[0]=0x22; |
| - | T_IM_Asservissement.data[1]=0xB3; | + | T_IM_Asservissement.data[1]=0xB3; |
| - | T_IM_Asservissement.data[2]=0x80; | + | T_IM_Asservissement.data[2]=0x80; |
| + | </ | ||
| Suite à ces définitions, | Suite à ces définitions, | ||
| - | Trame n°6 | + | **Trame n°6** → pour définir la fréquence de la sortie PWM2: |
| 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) 08H + décalage = 08H + 1CH = 24H | + | T_IM_Asservissement.data[0]=0x24; |
| - | 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, | ||
| - | Trame n°7 | + | **Trame n°7** → pour définir le rapport cyclique de la sortie PWM2 (module de la commande donc de la vitesse du moteur) |
| - | T_IM_Asservissement.data[0]=0x25; | + | <code c> |
| - | (doc MCP25050 p15) 0AH + décalage = 0AH + 1CH = 26H | + | T_IM_Asservissement.data[0]=0x25; |
| - | T_IM_Asservissement.data[1]=0xFF; | + | T_IM_Asservissement.data[1]=0xFF; |
| - | T_IM_Asservissement.data[2]=0x00; | + | T_IM_Asservissement.data[2]=0x00; |
| + | </ | ||
| Suite à ces définitions, | Suite à ces définitions, | ||
| Line 76: | Line 79: | ||
| Définition de la trame interrogative permettant de connaître l' | Définition de la trame interrogative permettant de connaître l' | ||
| - | 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 IRM " | + | 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 IRM '' |
| - | D’après le tableau donné page 22 de la notice du MCP25050, l’identificateur lui-même contiendra l’adresse du registre lu. Cette adresse est placée sur les bits ID15 à ID8 de l’identificateur en mode étendu (bits qui seront réceptionnés et placés dans le registre RXBEID8). Le registre concerné est GPPIN d’adresse 1Eh " | + | D’après le tableau donné page 22 de la notice du MCP25050, l’identificateur lui-même contiendra l’adresse du registre lu. Cette adresse est placée sur les bits ID15 à ID8 de l’identificateur en mode étendu (bits qui seront réceptionnés et placés dans le registre RXBEID8). Le registre concerné est GPPIN d’adresse |
| D’autre part, les trois bits de poids faibles de l’identificateur en mode étendu devront être positionnés à 1. | D’autre part, les trois bits de poids faibles de l’identificateur en mode étendu devront être positionnés à 1. | ||
| L’identificateur défini dans le chapitre 1 devra donc être complété comme suit: | L’identificateur défini dans le chapitre 1 devra donc être complété comme suit: | ||
| + | {{ : | ||
| → Définition de variables structurées sous le modèle | → Définition de variables structurées sous le modèle | ||
| - | | + | <code c> |
| - | Remarque: | + | Trame T_IRM_Acquisition_FC; |
| + | </ | ||
| + | Remarque: | ||
| - | → Accès et définition des différents éléments de la variable structurée | + | → Accès et définition des différents éléments de la variable structurée |
| + | <code c> | ||
| T_IRM_Acquisition_FC.trame_info.registre=0x00; | T_IRM_Acquisition_FC.trame_info.registre=0x00; | ||
| T_IRM_Acquisition_FC.trame_info.champ.extend=1; | T_IRM_Acquisition_FC.trame_info.champ.extend=1; | ||
| T_IRM_Acquisition_FC.trame_info.champ.dlc=0x01; | T_IRM_Acquisition_FC.trame_info.champ.dlc=0x01; | ||
| T_IRM_Acquisition _FC.ident.extend.identificateur.ident=0x00841E07; | T_IRM_Acquisition _FC.ident.extend.identificateur.ident=0x00841E07; | ||
| + | </ | ||
| 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 " | + | |
| D' | D' | ||
| Vu du module (du MCP25050), la réponse à un " | Vu du module (du MCP25050), la réponse à un " | ||
| - | La différence avec la trame interrogative origine est que cette trame réponse comporte le paramètre | + | La différence avec la trame interrogative origine est que cette trame réponse comporte le paramètre |
| **Définition de variables structurées images de l' | **Définition de variables structurées images de l' | ||
| Line 103: | Line 111: | ||
| La trame reçue en réponse à cette trame interrogative comportera en data[0], l' | La trame reçue en réponse à cette trame interrogative comportera en data[0], l' | ||
| union byte_bits FC; | union byte_bits FC; | ||
| + | <code c> | ||
| #define Etats_FC FC.valeur // Pour l' | #define Etats_FC FC.valeur // Pour l' | ||
| #define fs FC.bit.b7 | #define fs FC.bit.b7 | ||
| #define fcg FC.bit.b6 // Pour fin de course gauche | #define fcg FC.bit.b6 // Pour fin de course gauche | ||
| #define fcd FC.bit.b5 // Pour fin de course droit | #define fcd FC.bit.b5 // Pour fin de course droit | ||
| + | </ | ||
| Afin de pouvoir détecter les changements d' | Afin de pouvoir détecter les changements d' | ||
| + | <code c> | ||
| union byte_bits FC_Mem; // Pour fins de courses mémorisés | union byte_bits FC_Mem; // Pour fins de courses mémorisés | ||
| #define Etats_FC_Mem FC_Mem.valeur | #define Etats_FC_Mem FC_Mem.valeur | ||
| + | </ | ||
| Si l' | Si l' | ||
| Line 116: | Line 128: | ||
| ==== Organigramme: | ==== Organigramme: | ||
| + | {{ : | ||
| ==== Programme en " | ==== Programme en " | ||