LA BIBLE DU SUMO SOMMAIRE SOMMAIRE ........................................................................................................................ 2 I – Les bases et les composants de base ............................................................................. 3 A -­‐ SK10 ...................................................................................................................................................................................3 B – Interrupteurs.................................................................................................................................................................4 C – Régulateurs de tension ..............................................................................................................................................5 D – Optocoupleurs ..............................................................................................................................................................6 E -­‐ Pont en H ..........................................................................................................................................................................8 F – Le PWM.............................................................................................................................................................................9 G -­‐ Diode ............................................................................................................................................................................... 10 H – Résistances.................................................................................................................................................................. 11 II – Le PIC ......................................................................................................................... 12 A – Introduction ................................................................................................................................................................ 12 B – Le montage de base.................................................................................................................................................. 13 C – MikroC............................................................................................................................................................................ 14 C.1 – Nouveau projet........................................................................................................................................................14 C.2 – Entrée ou sortie ? Les registres TRIS .............................................................................................................14 C.3 – Modifier la valeur des I/O. Les registres PORT .........................................................................................15 C.4 – Les opérateurs conditionnels ............................................................................................................................16 C.5 – Fonctions d’attente................................................................................................................................................16 C.6 – Nouvelles fonctions................................................................................................................................................16 D – Programmation du PIC........................................................................................................................................... 18 C’est tout ? ...................................................................................................................... 19 Copyright ......................................................................................................................... 19 Copyright © 2012 ESIEESPACE 2 I – Les bases et les composants de base Et bien quoi ? N’ayons pas peur de le dire : Nous commencerons par les bases, composant par composant, en allant à notre rythme ! A -­‐ SK10 Une plaquette SK10 permet de réaliser un montage sans avoir à ne souder aucun fil. Les composants sont reliés entre eux soit : - Directement grâce à l’architecture spécifique des SK10 que l’on détaillera ensuite. - Par des fils que l’on enfonce dans la SK10. L’architecture d’une SK10 est presque toujours la même. • Les deux lignes (souvent marquées en bleu et rouge) situées de chaque côté forment une suite de connecteurs tous reliés entre eux. • Les deux ‘bandes centrales’ sont formées de lignes horizontales de 5 connecteurs reliés entre eux. Sur le schéma de droite, chaque carré représente un petit trou dans la SK10. Tous les carrés situés sur une même ligne sont reliés entre eux électriquement. Une façon courante de procéder est de placer sur les lignes extérieures l’alimentation du montage (5V sur le rouge et la masse sur le bleu). Ainsi il est plus facile d’alimenter les différents composants placés sur la SK10. Les gros connecteurs ronds situés tout autour permettent de brancher les fils provenant de l’alimentation ou allant à l’oscilloscope. Pour les utiliser il suffit d’en dévisser la tête jusqu’à apercevoir un petit trou situé dans le pas de vis. Il faut ensuite placer dans ce trou un fil de cuivre fin et dénudé au bout, avant de revisser la tête du connecteur. Copyright © 2012 ESIEESPACE 3 B – Interrupteurs Il existe de nombreuses sortes d’interrupteurs. Certains se présentent sous la forme de boutons poussoir qui ne laissent passer le courant que lorsque l’on appuie dessus, d’autres possèdent une LED qui ne s’allume que lorsque l’interrupteur est en position fermée, etc. Certains possèdent 3 pattes. Dans ce cas, la patte du milieu est souvent une patte ‘commune’. L’interrupteur laisse alors passer le courant entre le commun et la patte de gauche (en pointillé) ou entre le commun et la patte de droite (en trait plein) en fonction de sa position. Lorsque l’on utilise des interrupteurs comme entrés dans des montages numériques (ex : entrée d’une porte AND ou d’un PIC) il est nécessaire de placer une résistance de pull-down entre l’interrupteur et la masse. En effet, les interférences comme les rayonnements des ampoules ou les émissions des réseaux sans-fil, viennent perturber l’entrée des circuits numériques. Ainsi, un fil non relié en entrée d’un circuit peut être vu comme un « 1 » logique. Il faut donc forcer l’entrée à « 0 » en plaçant une résistance élevée entre l’entrée du circuit logique et la masse. Sans résistance de pull-down Copyright © 2012 ESIEESPACE Avec résistance de pull-down 4 C – Régulateurs de tension De nombreux circuits tel que les PIC mais aussi les portes inverseuses, and, nand, etc nécessitent une tension d’alimentation stable de 5V. Cependant les piles ou accumulateurs utilisés sur les robots délivrent souvent une tension supérieure à 5V comme par exemple les piles carrées de 9V ou les batteries lithium de 7,4V. On utilise alors un composant appelé régulateur. De plus, les régulateurs assurent une tension stable qui ne varie pas lorsque l’on débite du courant (dans une limite raisonnable…) ce qui n’est pas le cas d’une pile ou d’une batterie. Un régulateur possède 3 pattes : la masse, la tension d’entrée, et la tension de sortie régulée. Les régulateurs les plus courants sont ceux de 5, 6, 8, 9, 12 et 24V. La tension de sortie est presque toujours spécifiée dans la référence du régulateur. Par exemple, le L7805CV régule la tension à 5V. Ensuite, afin d’obtenir une tension de sortie propre (sans oscillations parasites), on place un condensateur de 22pF entre la masse et la tension d’entrée, et un second entre la masse et la tension de sortie régulée. Enfin, il faut faire attention à respecter la tension minimale d’entrée et à ne pas dépasser le courant maximum que peut supporter le régulateur. Copyright © 2012 ESIEESPACE 5 D – Optocoupleurs Un optocoupleur est composé d'un émetteur infrarouge et d'un récepteur. Son nom vient du fait qu'il sert initialement à isoler électriquement deux circuits (ou deux parties d'un circuit) en faisant transiter les informations par l'infrarouge lieu des faires transiter par un fil électrique. Ainsi les circuits ne sont pas couplés électriquement mais optiquement. Cependant pour les robots on en fait généralement une utilisation différente. En effet, l'intensité du signal infrarouge qui est émis décroit en fonction de deux principaux paramètres. - la distance : plus le récepteur est loin de l'émetteur et plus le signal reçu sera faible. - les couleurs : si le signal émis rencontre un objet blanc il sera presque entièrement réfléchi, alors que s'il rencontre un objet noir il sera absorbé. Il découle donc deux utilisations de ces paramètres : - Les télémètres qui permettent la détection d'obstacles et de calculer la distance à laquelle ils se trouvent. Nous utilisons généralement les télémètres SHARP sur le robot de la coupe. Il en existe plusieurs donc la distance de détection varie entre 10 et 200 cm. - Les "détecteurs de ligne blanche". C'est du moins l'utilisation que nous faisons des optocoupleurs CNY70 qui ont une portée de l'ordre du cm et qui permettent quand on les place près du sol de détecter un ligne blanche. Nous les utilisons donc généralement sur les robots Sumo pour détecter le bord du terrain. Copyright © 2012 ESIEESPACE 6 Il important de bien garder à l'esprit que le signal reçu par le récepteur est une tension dont l'amplitude varie entre 0 et la tension d'alimentation. C'est un signal analogique et il doit donc passer dans un convertisseur analogique numérique (CAN ou ADC Analog Digital Converter) avant de pouvoir être traité numériquement. Copyright © 2012 ESIEESPACE 7 E -­‐ Pont en H Le pont en H permet de contrôler le sens de rotation d'un moteur. Il tire son nom du schéma que l'on en fait généralement. Son principe est très simple. Lorsque les interrupteurs 1 et 4 sont fermés, et les interrupteurs 2 et 3 ouverts, le courant circule dans le moteur de a vers b. Inversement lorsque les interrupteurs 1 et 4 sont ouverts et les 2 et 3 fermés, le courant circule dans le moteur de b vers a. Ainsi on parvient à changer son sens de rotation. Naturellement en pratique, on ne va pas utiliser des interrupteurs mais des transistors qui vont jouer le rôle d'interrupteur en fonction du courant passant par leur base. Cependant, ce montage est fastidieux à réaliser soi-même et l'on utilise plutôt des composants qui utilisent exactement ce principe mais dans lequel tout est intégré. En effet, l'utilisation de transistor nécessite de placer la bonne valeur de résistance sur la base afin que celui-ci laisse passer un courant satisfaisant. Pour contrôler de gros moteurs (ex: Coupe de France de Robotique) on utilise des 18200T et pour de plus petits moteurs (robots sumo) on utilise des L298N (double pont en H dans le même composant). L298N 18200T Ces composants permettent de contrôler les moteurs très simplement. Il faut tout de même bien lire les datasheet afin de ne pas oublier de signaux enable ou de résistance qui contrôle la charge. Copyright © 2012 ESIEESPACE 8 F – Le PWM La question qui devrait maintenant vous venir à l’esprit est : « C’est bien beau, je peux contrôler le sens de rotation de mon moteur, mais si j’ai aussi envie de contrôler sa vitesse, comment je fais ? » Et bien le PWM est là pour ça ! PWM signifie Pulse Width Modulation en anglais c'est à dire Modulation de Largeur d'Impulsion pour nous autre français. Cela désigne un signal carré dont on fait varier le rapport "temps à l'état haut / période". Ce rapport est appelé rapport cyclique et ne peut varier qu'entre 0 et 1. « Et mon moteur ne risque pas de tourner un peu - s’arrêter - tourner un peu - s’arrêter, etc ? ». Non ! Si la fréquence du PWM est assez élevée alors l’inertie du moteur et de ce qu’il entraine font que sa vitesse est une moyenne du signal PWM (et un moteur DC c’est avant tout une bobine, il va donc se comporter comme un filtre passe-bas). Lorsqu’ils sont soumis à un PWM, certains moteurs peuvent émettre un léger sifflement à la fréquence du PWM. Je vous conseille donc d’utiliser des fréquences supérieures à 20kHz (inaudible pour l’homme) pour éviter ce problème. Copyright © 2012 ESIEESPACE 9 G -­‐ Diode Une diode est un dipôle, autrement dit un composant qui possède deux pattes, et qui ne laisse passer le courant électrique que dans un sens. Le courant circule donc uniquement de l'anode vers la cathode. En pratique, la cathode peut être repérée par un anneau gris clair. Les LED (Light-Emitting Diode) ou DEL (Diode électroluminescente) en français sont des diodes qui émettent de la lumière lorsqu’elles sont branchées correctement. Le symbole est donc le même que celui d’une diode mais avec des deux petites flèches au dessus. On peut reconnaître la cathode par sa patte plus courte que celle de l’anode ou bien grâce au plat situé sur le côté de la LED. [Image de http://www.abavala.com] Copyright © 2012 ESIEESPACE 10 H – Résistances Les résistances représentent le composant le plus simple qui existe dans un montage et je ne doute pas que vous les connaissez déjà ! Cependant pour les utiliser il faut encore savoir lire le code couleur qui leur sont associé. Prenons l'exemple de la résistance ci-dessous. La première opération à réaliser est de tourner la résistance afin de placer la bande qui peut être dorée ou argentée à droite. En lisant de gauche a droite, les couleurs sont alors : VertBleu-Orange-Or. On utilise ensuite le tableau ci-dessous pour associer à chaque couleur un chiffre. 1. Le vert correspond à 5 et le bleu à 6. En accolant ces deux chiffres on obtient le nombre 56. 2. On le multiplie alors par la puissance de 10 égale au chiffre correspondant au orange, ici 3. Nous avons donc 56 * 10^3 = 56 * 1000 = 56000 qui est la valeur de notre résistance soit 36k ohms. 3. La dernière bande représente sa précision. En effet, une résistance n'est jamais exacte, sa valeur réelle peut être légèrement différente de sa valeur théorique. Dans notre exemple, la couleur dorée indique une précision de 5%. La valeur réelle de cette résistance sera donc comprise en 95% et 105% de 56000 soit entre 53200Ω et 58800Ω. [Image de http://www. logicquicklearn.com] Copyright © 2012 ESIEESPACE 11 II – Le PIC A – Introduction Les cours d’informatique sur les microprocesseurs vu en 1ère ou 2ème année à l’ESIEE vous ont peut-être permis de comprendre un problème récurent sur ce type de systèmes : il faut de nombreux périphériques pour faire fonctionner un microprocesseur comme par exemple la RAM (mémoire vive), ou la ROM (mémoire morte). Pour palier à ces problèmes, les constructeurs ont mis au point un nouveau type de composants : les microcontrôleurs. Ces systèmes regroupent en fait un microprocesseur et de nombreux périphériques. On retrouve systématiquement : • Un microprocesseur plus ou moins complexe • Une mémoire RAM (quelques Ko à de nombreux Mo) • Une mémoire ROM ou plus généralement Flash (pour contenir le programme). • Des entrées / sorties (ou I/O) qui sont généralement regroupées en ports (8 I/Os) Selon les différents microcontrôleurs, on peut aussi retrouver d’autres périphériques qui reviennent assez souvent comme : • Des entrées et/ou sorties analogiques (ADC et/ou DAC) • Des timers (pour compter le temps et gérer des interruptions) • Des générateur (ex : PWM pour contrôler des moteurs) • Des comparateurs • Des bus de données et/ou d’adresses • Des entrées d’interruptions • Des ports de communication (RS232, SPI, I²C, USB, etc…) • Et bien d’autres encore… On peut donc créer des systèmes complets et puissants rapidement à l’aide d’une seule puce. On retrouve ces microcontrôleurs dans un grand nombre d’appareils à usage quotidien allant de la télécommande au Smartphone en passant par la carte de crédit. Il existe de nombreux constructeurs plus ou moins connus : • Microchip (constructeur du fameux PIC) • NXP (filiale de Philips) • Samsung (puces des iPhones) • Texas Instrument • Freescale (filiale de Motorola) (microcontrôleurs ColdFire à base de 68k) • Cypress (microcontrôleurs USB) • Etc… Nous allons pour cette bible nous intéresser aux PICs 8bits de Microchip. Il existe plusieurs familles de PICs 8bits : les 16F (génériques), les 18F (très proches des 16F mais optimisés pour la programmation en C), les 10F et les 12F (petits microcontrôleurs à 8 pates). Copyright © 2012 ESIEESPACE 12 B – Le montage de base Avant même de commencer la programmation ou de brancher des périphériques sur le PIC, il est nécessaire d’insérer ce dernier dans un ‘montage de base’ comportant notamment une alimentation, un quartz et les condensateurs qui lui sont associés, ainsi qu’un 1 logique sur la pin reset. La comparaison avec une voiture peut-être imaginée : avant de placer un pilote, des passagers et une remorque, il faut faire le plein (alimentation), vérifier le moteur (quartz et condos) et s’assurer qu’on a bien la clef (1 logique sur le MCLR). Naturellement, la position des pins sur le PIC varie suivant le modèle, il est donc nécessaire de regarder dans la datasheet leur emplacement. Enfin, comme pour tout montage, mais plus particulièrement lorsque celui-ci comporte un PIC, il faut s’assurer que la tension d’alimentation est la bonne et qu’elle est régulée. Les entrées/sorties (I/O) d’un PIC correspondent à l’ensemble des pattes non utilisées dans ce montage de base. Elles sont regroupées en PORTs allant généralement de A à C mais pouvant aller jusqu’à E. (ex : PORTA, PORTC, …). Chaque PORT regroupe 8 pattes du PIC (de 0 à 7). Une patte sera donc identifiée par son PORT puis son numéro (ex :RB5). Copyright © 2012 ESIEESPACE 13 C – MikroC Une fois placé dans son ‘montage de base’ et que les périphériques y sont correctement reliés, le PIC nécessite d’être programmé. Cette programmation peut-être effectuée directement en assembleur ou bien en C auquel cas le programme nécessite d’être compilé en assembleur avant d’être converti en fichier hexadécimal exécutable par le PIC. Plusieurs logiciels existent pour cela notamment MPLAB et MikroC. Nous détaillerons ici les bases de l’utilisation de MirokC ainsi que les principales fonctions à connaître pour commencer la programmation sur PIC. C.1 – Nouveau projet Nota : MikroC, comme de nombreux logiciels de programmation, fonctionne par projet. Un projet peut contenir plusieurs fichiers C qui, compilés ensemble, forment un fichier exécutable par le PIC. Il faut donc faire attention lorsque l’on entame la programmation d’un nouveau PIC à créer un nouveau projet et non un nouveau fichier. À la création d’un nouveau projet (Project => New project), MikroC demande la référence du PIC, la fréquence du quatz et l’emplacement du projet sur le disque puis affiche une fonction main vide. int main(void) { } Dans un premier temps, nous placerons toutes les instructions dans cette fonction. Nous verrons ensuite comment créer de nouvelles fonctions. Avant de commencer, il est nécessaire de toujours se rappeler trois règles : - Conserver une écriture lisible, notamment en utilisant les tabulations - Placer un point-virgule à la fin de chaque instruction - Placer les instructions entre accolades {} C.2 – Entrée ou sortie ? Les registres TRIS Avant de faire communiquer le PIC avec ses périphériques, il est nécessaire de lui indiquer quelles pins correspondent à des entrées et lesquelles correspondent à des sorties. Supposons que nous souhaitions allumer une LED branchée sur la patte RA0, lorsque l’on ferme un interrupteur branché sur RB0. La patte RA0 sera donc une sortie et la RB0 une entrée. Les premières instructions à écrire seront alors : TRISA.F0 = 0 ; Copyright © 2012 ESIEESPACE 14 TRISB.F0 = 1 ; Les registres TRIS ont en effet pour rôle de spécifier la direction des informations. 0 sortie 1 entrée Pour modifier la direction des 8 pattes située sur un PORT donné, on utilise l’une des écritures suivantes TRISA = 0b00000000 ; TRISB = 0b11111111 ; ou ou TRISA = 0x00 ; TRISB = 0xFF ; Ces deux écritures sont identiques sauf que l’une est écrite en binaire et l’autre en hexadécimal. Elles ont pour effet de placer les pattes RA0 à RA7 en sortie et les pattes RB0 à RB7 en entrée. Cette nouvelle écriture revient donc à écrire TRISA.F0 TRISA.F1 […] TRISA.F7 TRISB.F0 TRISB.F1 […] TRISB.F7 = 0 ; = 0 ; = 0 ; = 1 ; = 1 ; = 1 ; Même si le programme n’utilise pas la totalité des I/O du PIC, il est conseillé d’initialiser la direction de toutes les pattes. C.3 – Modifier la valeur des I/O. Les registres PORT Une fois la direction des pattes définie (entrée ou sortie), il est possible d’en modifier la valeur (si c’est une sortie) ou d’en détecter la valeur (si c’est une entrée). Supposons que nous avons branché une LED sur chacune des 8 pattes du PORT B et que nous souhaitons toutes les allumer. Le code du programme sera alors int void(main) { TRISA = 0x00 TRISB = 0x00 TRISC = 0x00 PORTA = 0x00 PORTB = 0xFF PORTC = 0x00 } ; ; ; ; ; ; //les 8 pattes //les 8 pattes //les 8 pattes //initialisé à //les 8 pattes //initialisé à du du du 0 du 0 PORT A sont des sorties PORT B sont des sorties PORT C sont des sorties PORT B doivent être à 1 Le registre PORT fonctionne de la même façon que le registre TRIS. Par conséquent, si l’on souhaite ne modifier qu’une des pattes (ex : éteindre la première LED), on peut écrire : PORTB.F0 = 0 ; Copyright © 2012 ESIEESPACE 15 C.4 – Les opérateurs conditionnels Les conditions se présentent toujours sous la même forme opérateur(condition) { instructions ; } if(PORTB.F0==1) { PORTA.F0=1 ; } else { PORTA.F0=0 ; } Il n’y a pas de point-virgule à fin de la condition, en effet, une condition n’est pas une instruction, elle ne modifie rien. Condition if(condition) instructions ; else instructions ; Définition Exemple teste si la condition du if cf ci-dessus est vraie ou non Répète les instructions jusqu’à ce que fin soit for(début ;fin ;incrémentation) faux, en partant de début instructions ; et avec une incrémentation donnée PORTB = 0x01 ; for(int i=0 ; i<8 ; i=i+1) { PORTB = PORTB*2 ; } while(condition) instructions ; while(PORTB.F0==1) { delay_ms(1000) ; } Opérateur == (double =) != > >= < <= Répète instructions tant que condition est vrai Définition Teste l’égalité Teste la différence Teste la supériorité stricte Teste la supériorité ou l’égalité Teste l’infériorité stricte Teste l’infériorité ou l’égalité C.5 – Fonctions d’attente Fonction delay_ms(int i) delay_us(int i) Exemple delay_ms(1000) ; delay_us(200) ; Définition Fait une pause de i millisecondes Fait une pause de i microsecondes C.6 – Nouvelles fonctions Au démarrage du PIC, la première fonction exécutée est le ‘main’. Cependant, lorsqu’un projet devient conséquent, il devient intéressant de créer de nouvelles fonctions. Une fonction Copyright © 2012 ESIEESPACE 16 doit être déclarée au tout début du fichier (en dehors du ‘main’). Pour l’utiliser, il suffit ensuite de l’appeler par son nom sans oublier le point-virgule. Prenons l’exemple d’une fonction allumer_led. void allumer_led() ; //déclaration de la fonction allumer_led int main(void) { allumer_led() ; } allumer_led() { PORTA.F0 = 1 ; delay_ms(500) ; PORTA.F0 = 0 ; } //fonction main Copyright © 2012 ESIEESPACE //appelle de la fonction allumer_led //fonction allumer_led //allumage de la led //attente pendant une demie-seconde //extinction de la led 17 D – Programmation du PIC Le PIC se programme par les pates PGC, PGD et PGM (et Vpp sur la pate MCLR pour indiquer au PIC que l’on veut le programmer). Mais nous n’allons pas voir ici comment se passe la communication, nous allons simplement voir comment utiliser les programmateurs (programmateur JDM sur port série) de PICs déjà prêts. Et pour cela nous utiliserons le logiciel WinPic800. Il suffit de : • Dans MikroC, cliquer sur compiler et s’assurer qu’il n’y a pas d’erreur de compilation. Si tout s’est bien passé, MikroC doit avoir généré un fichier en “.hex“ • Dans WinPic800, choisir le hardware « JDM Programmer » dans le menu Réglages (à ne faire qu’une seule fois) • Choisir le type de PIC à droite • D’ouvrir le fichier .hex contenant le programme à charger dans le PIC • Positionner le PIC sur le programmateur, attention la position du Pic sur le programmateur varie en fonction de sa taille ! • D’écrire le programme sur la Flash du PIC (Flèche rouge) D’autres outils de programmation sont aussi disponible au sein de l’association, n’hésitez pas à demander ! NB : Le logiciel est disponible gratuitement sur internet (http://www.winpic800.com /). Copyright © 2012 ESIEESPACE 18 C’est tout ? Je ne vous promet pas que la réalisation de votre robot sumo soit maintenant un jeu d’enfant, mais vous avez au moins quelques bases et un bon manuel de référence pour commencer ! Il ne vous reste plus qu’à vous lancer et dès que cette bible ne sera plus en mesure de vous aider, les membres de l’ESIEESPACE se feront un plaisir de répondre à vos questions. Copyright « Je peux copier ? » Vous l’avez peut-être remarqué, les quelques images que j’ai prises du net ont leur source d’indiquée juste à côté. Je demanderais donc que vous en fassiez autant si vous souhaitez reprendre ce travail, ou à défaut que la mention de bas de page ne soit ni modifiée ni supprimée. Copyright © 2012 ESIEESPACE 19