Introduction
1
1. Cahier des charges technique Le but du projet est de créer des cocktails de boisson à partir de quatre liquides en précisant le pourcentage de chacune des boissons rentrant dans la constitution du cocktail final. 1. Définition de l’interface Homme / Machine L’interface se compose de cinq boutons et de deux afficheurs sept segments à LED : - Bouton incrément - Bouton décrément - Bouton OK - Bouton Retour - Bouton ON / OFF - Afficheur des dizaines programmable -
Afficheur des unités forcé au chiffre 0
1.1. Mise en route / initialisation Après avoir raccordé l’alimentation, l’appareil est prêt à recevoir le volume de liquide total souhaité. La LED de définition du volume doit s’allumer, permettant à l’utilisateur de choisir un volume prédéfini (10, 12, 25 ou 50cl). Par souci de simplicité, le volume n’est définissable qu’au démarrage de l’appareil. 1.2. Saisie du volume final L’utilisateur doit appuyer sur le bouton d’incrémentation noté « + » jusqu’au volume désiré. En cas d’erreur il peut diminuer ce volume avec le bouton de décrément noté « - «. Une fois le volume choisi, l’utilisateur doit appuyer sur le bouton OK afin de passer à la sélection du pourcentage des liquides : la LED correspondant au liquide numéro 1 doit alors s’allumer. 1.3. Affichage L’afficheur commandé doit afficher des nombres de 0 à 9 ainsi qu’un R pour le remplissage, un U pour le volume et un C pour la calibration. 1.4. Saisie des pourcentages La séquence débute par la saisie du pourcentage du premier liquide.
2
L’utilisateur appuie sur le bouton « + » jusqu’à arriver au pourcentage du premier liquide souhaité du volume total. En cas d’erreur il peu appuyer sur « -«. Le bouton OK permet de passer à la sélection du pourcentage du liquide suivant, la LED correspondant s’allume alors. Le bouton « Retour » permet de revenir à la sélection du pourcentage du liquide précédent. Il n’est pas possible de rentrer plus de 100% de liquide total, ainsi l’incrémentation du liquide en cours sera bloquée pour respecter cette contrainte. Par exemple si l’utilisateur demande 30% du liquide 1 et 40% du liquide 2, l’incrémentation du liquide 3 sera bloquée à 30%. 1.5. Remplissage Une fois les quatre pourcentages choisis, l’utilisateur est invité à appuyer une nouvelle fois sur OK afin de valider sa sélection et de commencer le remplissage. Il peut également choisir de revenir à l’étape précédente en appuyant sur « retour » et ainsi retourner à la sélection du pourcentage du volume du liquide 4. 2. Pilotage du volume de remplissage Le volume de remplissage dépend du temps d’ouverture de la pompe qui contrôle l’arrivée d’un liquide. 3. Calibration des pompes La calibration des pompes doit être gérée par le logiciel : en cas de remplacement d'une des pompes, le temps d'ouverture pour obtenir un volume donné n'est pas le même. 4. Sécurité Un dispositif interdira le remplissage en l’absence de verre. 5. Architecture La maquette comprendra donc essentiellement : - 4 boutons poussoir - 1 bouton ON / OFF - 2 afficheurs 7 segments à LED - 4 pompes pour les liquides - Un Microcontrôleur pour commander l’interface Homme / Machine et les pompes - Alimentation de l’ensemble - 4 LEDS 3
-
Un microrupteur pour détecter la présence du verre.
2. Analyse fonctionnelle Une analyse fonctionnelle de type SADT a été effectuée afin de bien décomposer les différentes parties du projet. Voir SADT en annexe Au final, le projet doit effectuer toutes les fonctions suivantes A compléter
4
3. Architecture L'ensemble des fonctions est gérée par le Microcontrôleur, qui doit être capable d'effectuer des mesures de temps, de gérer les commandes d'ouverture de pompes, piloter un afficheur 7 segments, permettre la calibration des pompes et mémoriser cette calibration dans sa mémoire interne. Par souci de simplicité, il est essentiel de réduire au maximum le nombre de composants utilisés. C'est pour cette raison que les pompes sont multiplexées : afin de séparer l'allumage d'une LED correspondant à un liquide de l'ouverture de la pompe correspondant à ce liquide, un transistor est situé en aval des transistors de commande des pompes, permettant à la LED de s'allumer sans que la pompe ne soit en fonctionnement. Seule la détection de présence du verre n'est pas gérée par le Microcontrôleur, mais par un contacteur à lamelle directement placé en série avec l'alimentation. Par souci de commodité, le choix s'est porté sur une carte Microchip KIT afin de pouvoir câbler sur cette carte la partie de faible intensité, c'est à dire les afficheurs, et de mettre la partie alimentation et commande des pompes sur une autre carte. L'autre utilisé d'adopter cette solution est de pouvoir traiter la partie électronique et la partie programmation indépendamment, et ainsi de pouvoir dépanner le programme sans avoir besoin de l'alimentation provenant de la partie puissance. Cela fait partie de notre démarche d'abstraction, dont le principe est de valider les parties les unes après les autres avant de les joindre entre elle.
5
4. Choix des composants Les composants électroniques à utiliser dans la réalisation de notre projet ne se choisissent pas au hasard : en effet, énormément de paramètres rentrent en compte tels que les tensions ou intensités supportés par le micro contrôleur, les afficheurs sept segments ou encore les pompes.
1. Choix des pompes Le choix des pompes est guidé par un souci de coût : en effet afin de respecter le budget imposé lors du projet, les pompes utilisées sont des produits bon marché. Le choix s'est donc fait sur des pompes consommant 0,7A avec une plage de tension de fonctionnement comprise entre 6V et 12V. Il faut donc maintenant s’intéresser à l’interface entre le micro contrôleur et la pompe. Pour faire le lien entre ces deux éléments, un transistor est donc indispensable. Le choix du transistor est conditionné par sa tenue en tension, en courant, en gain ainsi qu’en dissipation thermique. Tous ces éléments font donc que le choix s’est porté sur un boitier de type TO220 pour dissiper la chaleur, plus précisément sur le TIP232, un NPN. Ce transistor est un Darlington, l’équivalent de deux transistors en cascade, le coefficient d’amplification de courant β d’un transistor classique ne suffisant pas. Le principe étant de contrôler l’ouverture ou la fermeture de la pompe par l’intermédiaire de ce transistor, ce dernier sera utilisé en mode bloqué/saturé et non en mode linéaire. Les caractéristiques de tensions de saturation du transistor sont donc nécessaires pour tous les calculs ultérieurs (voir annexe). Le transistor choisi possède donc un Vbe(sat) de 2V et un Vce(sat) de 1,4V. La puissance dissipée par le transistor est de : 1,4V × 700mA = 1W Or le transistor choisi possède une capacité de dissipation thermique de 78°C/W ce qui donnerait un transistor qui chaufferait beaucoup trop. C’est pourquoi un radiateur qui dissipera 38°/W sera utilisé, ramenant ainsi le transistor dans une plage de température convenable. Une fois le transistor complètement choisi, il faut maintenant calculer la valeur de la résistance venant se placer entre la patte du PIC et la base du transistor T1. La chute de tension due au transistor est de : Vce(sat)+Vbe(sat)=3,5V Sachant que la pompe est alimentée en 12V et que le PIC délivre du 5V, la loi d’Ohm donne donc : R = U I = 3,2kΩ 6
Schéma
Bien évidemment, ce montage est reproduit quatre fois (une pour chaque pompe). Enfin, afin de séparer l’allumage de la LED correspondant à chaque pompe de la mise en marche de cette pompe, un deuxième transistor aurait été nécessaire. Mais par manque de sorties disponibles sur le micro contrôleur, les quatre transistors précédents ont été multiplexés par un cinquième transistor possédant exactement les mêmes caractéristiques, au travers duquel le micro contrôleur n’autorisera la circulation du courant que lorsque l’allumage des pompes sera souhaité. La résistance de polarisation de la LED se calcule comme suit : R = U / I = 680Ω
Schéma 7
2. Choix des afficheurs Des afficheurs à cathode commune sont utilisés. Le choix s’est porté sur un afficheur rouge de 12,7mm La documentation technique (voir annexe) donne la caractéristique de brillance des segments en fonction de l’intensité, puis la caractéristique de tension de jonction de LED en fonction du courant. Il a été estimé qu’une brillance correspondant a un courant de 5mA était suffisante, ce qui correspond a une tension de polarisation de 1,7V Ainsi, il est possible de calculer la différence de potentiel entre la sortie du micro contrôleur et les LEDs, et ainsi déterminer la résistance nécessaire à insérer. R = U I = (5 − 1,7)V 5mA = 680Ω Schéma
3. Choix de l’alimentation Le choix de l’alimentation dépend de beaucoup de critères, il faut donc effectuer un bilan énergétique. Dans le pire des cas, les éléments fonctionnant simultanément sont : - le transistor de multiplexage en mode saturé - un transistor de commande de pompe en mode saturé (un seul à la fois). - une pompe (une seule à la fois) - une LED (une seule à la fois) - l’afficheur piloté par le micro affichant un 8. - l’afficheur forcé à 0. Comme expliqué précédemment, le transistor dissipe une puissance de 1W, donc le transistor de commande des pompes et le transistor de multiplexage dissipent à eux deux 2W. Dans le pire des cas 13 segments sont allumés sur les deux afficheurs. La puissance nécessaire est donc : 13 × 1,7V × 5mA = 110,5mW 8
Une LED dissipe au maximum 87mW (voir documentation technique en annexe). Enfin une pompe consomme d’après la documentation technique 0,7A sous une tension de 12V, la tension dissipée est donc de : 12 * 0.7 = 8,4W . Au final une alimentation pouvant fournir environ 10,6W est nécessaire, possédant deux sorties : - 12V pour l’alimentation des pompes - 5V pour le micro contrôleur et les afficheurs Il faut alors calculer le transformateur ainsi que la valeur des condensateurs de redressement. Lorsqu’une tension passe au travers d’un pont de diode, sa valeur efficace est multipliée par 2 . Ainsi pour obtenir un peu plus de 12V il faut un transformateur avec une tension au secondaire de 9V. En effet la tension en sortie ainsi obtenue sera de 13,5V. Un condensateur de redressement de 2200 µ F ainsi qu’un fusible pour protéger le montage sont également utilisés. Pour obtenir maintenant une tension de 5V, il faut abaisser la tension de 13,5V via un régulateur 5V. Le régulateur 5V est protégé par deux petits condensateurs dont la valeur est donnée dans la documentation technique (voir annexe). Entre le 13,5V et le 5V, une chute de tension de 8,5V s’effectue au travers du régulateur, traversé par une intensité maximale de 65mA (treize fois l’intensité d’une LED des afficheurs). La puissance dissipée par le régulateur est donc : 8,5V × 65mA = 0,55W Schéma de l'alim.
4. Boutons et contacteurs
9
Aucune précaution particulière n’est à prendre pour ces composants puisque pour les boutons sont gérés par un micro contrôleur pour la détection des 0 et des 1 correspondant respectivement a des potentiels de 5V et 0V. La seule contrainte au niveau du contacteur est la rigidité du ressort de la lamelle qui doit être suffisamment faible afin de permettre à un verre vide de pousser la lamelle et de la maintenir enfoncée.
5. Choix du Micro C’est la partie la plus délicate car elle dépend d’énormément de paramètres. La première étape est de déterminer combien d’entrées et sorties sont nécessaires pour le micro contrôleur : il faut quatre entrées pour les boutons, ainsi que douze sorties, sept pour l’afficheur et cinq pour les transistors. Ensuite, le micro contrôleur doit pouvoir commander des afficheurs en direct. Il doit également posséder une EEPROM afin de garder en mémoire la calibration des pompes. Il doit posséder une taille mémoire suffisante (il faut prendre de la marge car il n’est pas possible de déterminer à l’avance quelle taille mémoire va être nécessaire) pour accueillir le programme tout en étant programmable en C avec un outil de développement simple et économique. Le fait d’avoir une carte de teste livrée avec la chaine de développement est également un grand avantage, permettant de tester le programme sans avoir besoin de la partie électronique, uniquement en utilisant le débuggeur. Cela fait partie du principe d’abstraction, permettant de valider la partie électronique et le programme indépendamment. Ensuite, il doit posséder des pull up intégrés afin de faciliter la gestion des boutons. Enfin il doit être disponible chez Radiospares. Tout ces éléments font que le choix s’est porté sur la famille PIC de Microchip, et plus précisément sur le 16F689. Voici donc le tableau des entrées/sorties avec leur broche du PIC affectée et leur sens :
1
Nom de la broche
Fonction dans le montage
Sens
RA0
Anode A
Sortie
RA1
Anode B
Sortie
RA2
Anode C
Sortie
RA3
Bloquée en entrée
RA4
Anode D
Sortie
RA5
Anode E
Sortie
RB4
Bouton OK
Entrée
RB5
Bouton PREC
Entrée
RB6
Bouton PLUS
Entrée
RB7
Bouton MOINS
Entrée
RC0
Transistor de commande 1
Sortie
RC1
Transistor de commande 2
Sortie
RC2
Transistor de commande 3
Sortie
RC3
Transistor de commande 4
Sortie
RC4
Transistor de multiplexage
Sortie
RC6
Anode F
Sortie
RC7
Anode G
Sortie
RC5
11
5. Programmation du PIC Avant tout le programme en C doit être compréhensible comme du français avec des noms de fonctions et des commentaires explicites permettant à toute personne n’ayant pas participé à sa réalisation de comprendre le programme. C’est pourquoi toutes les constantes sont définies en tête de fichier C à chaque fois afin de n’avoir à ne modifier sa valeur qu’une seule fois dans tout le programme si le besoin s’en fait sentir. Le programme se décompose en cinq modules : - gestion des afficheurs - gestion des boutons - gestion des pompes - gestion de l’EEPROM - le Main A chaque module (fichier .c) sera associé sa bibliothèque (fichier .h) permettant aux différents modules de communiquer les uns avec les autres.
1. Gestion des afficheurs La première chose à faire est de regarder ce qui doit être affiché : des nombres de 0 à 9 ainsi que le C de calibration, le R de remplissage et le volume qui sera représenté par un U (c’est ce qui ressemble le plus à un V sur un afficheur 7 segments). Il faut donc créer un tableau permettant d’associer chaque nombre ou lettre à son code en hexadécimal sur les ports A et C. Un souci provient du fait que la broche RA3 est bloquée en entrée et ne pourra donc pas être utilisée pour commander une LED de l’afficheur. Voici le tableau associant chaque caractère souhaité à sa valeur en binaire en en hexadécimal dans les registres A et C :
1
Caractère
Equation
Reg A (bin)
Reg C (bin)
Reg A (héxa)
Reg C (héxa)
0
abcdef
0011 0111
0100 0000
0x37
0x40
1
ef
0000 0110
0000 0000
0x06
0x00
2
abdeg
0011 0011
1000 0000
0x33
0x80
3
abcdg
0001 0111
1000 0000
0x17
0x80
4
bcfg
0000 0110
1100 0000
0x06
0xC0
5
acdfg
0001 0101
1100 0000
0x15
0xC0
6
acdefg
0011 0101
1100 0000
0x35
0xC0
7
abc
0000 0111
0000 0000
0x07
0x00
8
abcdefg
0011 0111
1100 0000
0x37
0xC0
9
abcdfg
0001 0111
1100 0000
0x17
0xC0
C
adef
0011 0001
0100 0000
0x31
0x40
R
abef
0010 0011
0100 0000
0x23
0x40
V
bcdef
0010 0111
0100 0000
0x27
0x40
Ces valeurs sont stockées dans un tableau et on passe par l’index de ce tableau pour afficher le chiffre souhaité. Une fonction doit permettre de bloquer l’afficheur lorsque la sélection des volumes a débuté. Par exemple, l’utilisateur ne doit pas pouvoir sélectionner plus de 70% pour la 2 ème cuve s’il a déjà sélectionné 30% pour la 1ère. Une autre fonction permet l’affichage en clignotement du pourcentage possible restant avant la sélection du volume de chaque cuve. Dans l’exemple précédent un 7 doit clignoter brièvement avant de choisir le volume de la 2 ème pompe. Ce clignotement est géré grâce à une temporisation ainsi qu’une fonction d’extinction et d’allumage de l’afficheur. De plus, il faut également utiliser un masque afin de ne pas toucher aux bits du port C qui ne font pas partie de l’affichage. L’affichage permet aussi d’afficher des grands nombres (utile pour la calibration des pompes notamment) : d’abord le plus grand nombre puis en décroissant jusqu’aux unités. Par exemple pour afficher 1842, un 1 sera d’abord affiché puis un 8, un 4 et un 2.
2. Gestion des boutons Le but est ici de forcer par défaut à 1 l’entrée du micro contrôleur qui n’est pas définie, il faut donc utiliser une résistance de pull up. En effet lorsque le bouton est appuyé, l’entrée du micro contrôleur est forcée à 0 et un courant circule dans le pull up.
1
Le grand problème de la gestion des boutons consiste en la compensation du phénomène de rebond. En effet, lorsque l’utilisateur appuie une fois sur le bouton d’incrémentation, l’afficheur augmente de plusieurs unités d’un coup. Ceci est du au fait que le contact d’un bouton n’est pas franc, des rebonds peuvent être perçus comme une suite d’état d’ouverture et de fermeture. Ce problème se gère en attendant grâce à une temporisation et à la détection du bouton relâché avant toute nouvelle action afin d’en acquérir un état stable. C’est dans la bibliothèque des boutons que l’on associe la détection d’un 1 sur une broche du microcontrôleur à un bouton spécifié. Enfin, il suffit de définir quelle action entraine l’appui de chaque bouton, avec une particularité lorsque l’utilisateur souhaite rentrer en mode calibration des pompes : celui-ci doit appuyer sur un bouton avant de mettre la machine en tension, une détection de bouton appuyé doit donc s’effectuer dès l’allumage.
3. Gestion des pompes La gestion des pompes s’effectue par l’envoi ou non via la broche du PIC d'un état de 5V pour saturer les transistors, ce qui se traduit dans le programme par mettre un bit à 1. Les pompes sont contrôlées par un temps d'ouverture reposant sur le pourcentage demandé par l'utilisateur et la calibration de la pompe. Le module doit donc gérer cette calibration, le grand problème étant que le PIC ne possède pas la division, la calibration des pompes s’effectue en centaines de ms. Le temps d’ouverture d’une pompe se calcule de la manière suivante : temps = volume_verre* calibration_pompe temps = temps *pourcentage_souhaité temps = temps/100 temps = temps /25cl
4. Gestion de l’EEPROM L’intérêt d’utiliser l’EEPROM du PIC est de garder en mémoire la calibration des pompes à chaque extinction de l’appareil ou coupure électrique : en effet la calibration ne doit être effectuée qu’en cas de remplacement d’une des pompes.
5. Le Main Le main fait le lien entre les différents modules du programme explicités précédemment. Il s’occupe juste d’initialiser le PIC, c'est-à-dire configurer les différents ports en entrée ou en sortie, d’activer les pull-up ou encore de forcer le port b (celui des boutons) en digital et pas en analogique comme il est configuré par défaut. C’est également dans le main que le pourcentage qu’il est encore possible de sélectionné est recalculé. Enfin le main reprend 1
toutes les fonctions des autres modules afin d’aboutir au mélange du cocktail puis au remplissage du verre.
6. Problèmes rencontrés 1. Choix des composants Tout d’abord il faut rappeler que le projet ne débute de rien. La première chose à faire est de réaliser un cahier des charges. Après avoir longuement hésité entre des électrovannes et des pompes, le coût des deux solutions a forcé le choix sur les pompes. Ensuite, il faut déterminer quel schéma électronique permet d’effectuer toutes les fonctionnalités souhaitées. L’erreur initiale a été de choisir un PIC afin de décider des composants autour de ce PIC. Finalement, la démarche à effectuer était de d’abord décider du schéma électronique, puis enfin de choisir le PIC, en fonction de l’analyse, de l’architecture du nombre de pattes d’entrée/sortie nécessaires. Carte d eval plus de vingt pines Aussi le nombre de broches disponibles sur le PIC a introduit une contrainte électronique : le multiplexage des transistors fait que les émetteurs des quatre transistors n'étaient plus reliés à la masse mais au collecteur de cinquième transistor.
2. Respect du budget A l’origine le projet devait être plus élaboré qu’il ne l’est au final : un clavier devait servir d’interface en lieu et place des boutons et le menu proposant les différents cocktails devait dérouler sur un afficheur LCD. Etant donné que la solution choisie dépasse déjà le budget autorisé de 230€ (voir annexe sur les bons de commande), cette solution aurait été beaucoup trop chère.
3. Programmation du PIC Cette partie a été une grande difficulté pour plusieurs raisons : - Le choix du PIC s'était fait selon une volonté de programmer en C mais une fois installée, la licence gratuite fournie avec le programme ne gérait pas le 16f689 utilisé pour notre projet. Différents forums sur les Pics ont permis de résoudre ce problème et de trouver la chaine de compilation gratuite Sourceboost. - La plaque de test jouait les programmes de démonstration en assembleur fournis avec mais pas le programme en C consistant simplement à afficher des chiffres de 0 à 9. Il y avait un problème dans l'initialisation du PIC que la l'instruction # pragma résout, permettant de forcer 1
l’organisation interne du PIC dans la programmation et pas uniquement dans l'exécution, tels que des paramètres d'horloge interne par exemple. Voici cette ligne de code, recopiée directement à partir des programmes en assembleur : #pragma DATA _CONFIG, _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF Un autre souci pour exécuter ce programme était que le bit RA3 n'est pas utilisable en sortie, ce qui avait pour résultat que le segment D de l'afficheur ne s'allumait jamais. - La gestion des boutons : lorsque l’on souhaitait incrémenter l’afficheur d’une unité, celui-ci s’emballait et grimpait de plusieurs unités d’un coup. Ceci était du a un souci de rebonds, que nous avons réglé grâce à une temporisation et la configuration des pull up internes du PIC, ainsi que par l'utilisation de masques sur les bits concernés. Aussi une fonction interdit l'incrémentation avant de recevoir la confirmation via une fonction que le bouton est relâché.
- La gestion du temps : des problèmes de troncature nous ont obligés à définir les nombres comme des long (32 bis) et pas des unsigned (16 bits). Il faut aussi bien choisir l'ordre des opérations à effectuer car effectuer toutes les multiplications dans un premier temps ne rentrerait pas dans un format de 8 bits.
- La gestion de l'EEPROM : il est très simple de gérer une EEPROM sur un octet mais le programme nécessite de l'utiliser sur 8 octets ( 4 × 2 unsigned) afin de garder en mémoire la calibration des quatre pompes. Ainsi, les forums sur les Pics ont permis de découvrir que la solution consistait à introduire une temporisation plutôt que de gérer des bits de fin d'interruption.
7. Améliorations possibles 1. Performances La contrainte du budget a forcé le choix des pompes sur des produits bon marché : ainsi, le remplissage des verres est relativement long. Les pompes souhaitées initialement coutaient 40€, celles utilisées au final coutent 15€.
2. Interface Encore une fois avec plus de budget, l'interface aurait été différente : au lieu de boutons et d'afficheurs sept segments, le choix du cocktail aurait été préenregistré dans le micro contrôleur et la sélection se serait effectuée par l'intermédiaire d'un écran LCD proposant les différents choix disponibles et d'un clavier permettant à l'utilisateur de formuler son choix.
1
Conclusion
1