Un ami, collectionneur d'objets anciens et étranges, avait un vieux
grille-pain sans arrêt automatique, qu'il oubliait toujours
d'arrêter à temps, récupérant donc des blocs de charbons à la place
des tartines. Je le taquinais là-dessus, lui promettant de lui
fabriquer une minuterie moderne et électronique, solution à laquelle
il était assez réticent. Finalement, il a accepté l'idée, à une
condition: que pour faire contre-poids au grille-pain antique, la
minuterie paraisse issue d'un film de science-fiction.
J'ai relevé le défi, et voici le résultat, on dirait vraiment que ça
va exploser (comme dans un film de suspense):
affichage du temps restant (jusqu'à 9 minutes, 99 secondes)
sur un afficheur vert
programmation du temps de grillage avec un clavier
téléphonique (taper "123" pour 1 mn 23 s, et ça démarre tout
seul)
une fois à 0 mn 00 s, ça s'arrête: le grille-pain s'arrête, et
le minuteur aussi
consommation de veille strictement nulle (il faut appuyer sur
le bouton rouge pour remettre en service)
coupure bipolaire, jusqu'à 8 ampères
Le système est basé sur un CPLD (composant de logique
programmable), qui remplace ici un microcontrôleur. C'est même
pour cette raison que je mets le schéma sur internet: peu
d'amateurs bricolent les CPLD et les FPGA, alors que beaucoup
mettent des microcontrôleurs à tort et à travers, je voudrais leur
donner l'envie de se mettre à la logique programmable. Même si, en
réalité, pour un tel circuit il est nettement plus simple
d'utiliser un microcontrôleur (par exemple un STM32 par exemple
sur une carte Blue Pill, un Atmel sur une carte Arduino, ou un PIC
de chez Microchip).
Avertissement: J'ai créé cette page pour quiconque sera
intéressé, mais sachez que la réalisation du circuit nécessite
quelques connaissances en électronique, et que le composant de
logique programmable (un CPLD) que j'ai utilisé, le MAX3064A de
chez Altera (aujourd'hui racheté par Intel) n'est plus fabriqué,
et que le MAX7064AE qui est compatible est devenu difficile à
trouver et deviendra certainement obsolète).
Il s'agit donc plutôt d'un exercice de style destiné à faire
connaître cette technologie: la logique programmable est
indispensable dans beaucoup de cas, par exemple pour des systèmes
d'acquisition très rapides, mais pour un simple minuteur il est
plus simple d'utiliser un microcontrôleur.
Étapes de la réalisation
Écriture du code pour la logique programmable (en langage
VHDL)
Compilation du code VHDL, afin de choisir le circuit CPLD
adapté et d'être bien certain que le brochage choisi conviendra
Fabrication du circuit: une partie 220V + alimentation, une
partie logique basse tension
Programmation du CPLD
Fabrication du boîtier et montage
Code VHDL
Parlez-vous le VHDL? Ce langage à la syntaxe tordue ressemble à des
langages informatiques (ADA en particulier, paraît-il). Méfiez-vous
des apparences, il s'agit ici d'un langage qui décrit un montage
électronique, et pas du tout d'un programme exécuté par un
ordinateur. En bref: chaque ligne de code correspond à des portes
logiques qui seront créées dans un circuit intégré.
Voici le code: coupatan.vhd (on peut le
lire avec n'importe quel éditeur de fichiers texte). Et en voici son
principe de fonctionnement:
Horloges: le système est cadencé à 256 Hz (pour faire marcher
l'afficheur et scanner le clavier) et reçoit un signal à 2 Hz
(pour cadencer le minuteur proprement dit)
Clavier: on utilise un clavier de téléphone, organisé en 3
colonnes de 4 lignes. Chaque colonne est successivement activée,
et on regarde à chaque fois si une ligne bouge en conséquence
Timer: quand on appuie sur un chiffre, celui-ci est mis dans
la valeur affichée et les chiffres en place sont décalés vers la
gauche; quand on arrête de manipuler le clavier, le décompte
commence, et va jusqu'à "000"
7 segments: les valeurs binaires sont convertis dans les codes
nécessaires pour les afficheurs 7 segments. Les chiffres sont
affichés successivement (assez vite pour que le clignotement ne
se remarque pas), ce qui permet d'avoir un seul décodeur pour 3
chiffres.
séparateur: quand le décompte fonctionne, le point entre
minutes et secondes clignote à 1 Hz
buzzer: une sortie collecteur ouvert permet de déclencher un
buzzer jusque avant l'arrêt de la minuterie
marche/arrêt: à la fin du décompte, un signal repasse à zéro
ce qui arrête le grille-pain ainsi que le montage
Le VHDL est un langage très déconcertant, en particulier pour les
informaticiens (moins mais quand même pas mal pour les
électroniciens). À mon avis, il est très difficile de l'apprendre
par internet, mieux vaut acheter un livre bien pédagogique sur le
sujet.
Compilation du code VHDL
La compilation dépend du composant visé. J'ai choisi un petit CPLD
de chez Altera, de la famille MAX3000A, à 64 éléments logiques, en
boîtier PLCC44: ça donne la référence EPM3064ALC44, qui est
disponible à l'épicier du coin (6 euros chez Electronique Diffusion:
c'est cher pour ce que c'est, mais on est bien content qu'ils aient
ça en stock).
Pour compiler le code, il faut donc utiliser le compilateur de chez
Altera. On peut utiliser soit l'ancienne version (MaxPlus-II), soit
la nouvelle (Quartus-II). Mais en fait, seul Quartus-II est assez
efficace pour faire rentrer tout le code dans le composant choisi et
en respectant le brochage demandé, donc utilisez Quartus-II.
Quartus-II est disponible gratuitement (en version "Web edition")
sur le site www.altera.com,
attention c'est énorme (196 Mo), ça ne fonctionne que sous Windows
NT/2000/XP (les versions Unix sont payantes), et il faut demander
une licence valable 6 mois (gratuite et renouvelable à l'infini). Et
Quartus-II n'est pas un modèle de convivialité, bien au contraire!!!
Il faut aussi indiquer sur quelles pattes du composant on veut faire
arriver les différentes entrées/sorties.
Au final, on récupère 2 choses:
Le programme qu'il faudra mettre dans le composant CPLD: coupatan.pof (c'est un fichier
binaire)
Rien de bien particulier, si ce n'est qu'il faut travailler
proprement sur la partie en 220V, car sinon c'est dangereux.
Cette partie-là nous interrompt dans la mise en ouvre du CPLD.
Oui, mais si on n'avait pas d'abord compilé le code VHDL, on
aurait couru le risque de ne pas utiliser le bon circuit. Et si on
ne construit pas au moins une partie du circuit, on n'a aucune
chance d'arriver à programmer le CPLD. Donc voilà!
Il y a deux parties:
la partie 220V (relais, transformateur, alimentation), qui ne
pose guère de problème. Elle est reliée à l'autre partie par
uniquement 3 fils: la masse, l'alimentation 3.3V pour la
logique (le CPLD n'accepte pas le 5V, donc j'ai tout mis en
3.3V), et le fil par lequel le CPLD décide s'il faut ou non
couper le courant.
la partie logique, qui mérite plus d'attention.
Au milieu de la partie logique, le CPLD. Il est monté sur
support, car pour bricoler c'est plus facile.
Le CPLD a plusieurs fils d'alimentation, certains pour le coeur
(VCCINT), certains pour les sorties (VCCIO): ici tout est en 3.3V,
donc tout est relié, mais il ne faut pas négliger de mettre un
petit condensateur de 100nF sur chaque alimentation.
Quatre fils vont du CPLD à un petit connecteur marqué "JTAG":
c'est par là qu'on va programmer le CPLD, sans avoir à le retirer
du montage.
On note le quartz 32768 Hz (récupéré dans une vieille montre)
qui cadence tout le système.
À noter aussi: les mêmes fils servent à balayer les colonnes du
clavier et à commander l'allumage successif des 3 afficheurs.
Petite vacherie: les transistors que j'ai utilisés, marqués
PH2222 et PH2907 (compatibles avec les références stnadard 2N2222
et 2N2907), ne sont pas dans le boîtier habituel TO-92 mais dans
le boîtier TO-92S qui est plus plat. Or le côté plat le plus large
du TO-92S est du côté opposé au côté plat du TO-92. Si on n'y
prend pas garde, on se retrouve donc à inverser les broches 1 et 3
(c'est-à-dire, pour ces deux transistors, l'émetteur et le
collecteur). Ceci vous explique pourquoi j'ai indiqué l'annotation
«inversé?» sur le schéma, comme je n'avais pas compris ce détail.
Boîtier TO-92 (à gauche) et boîtier TO-92S (à droite), vus
de dessous (source: document Texas Instruments)
Programmation du CPLD
La solution "normale" consiste à acheter le câble "ByteBlaster"
chez Altera/Intel. On le branche d'un côté au port parallèle du
PC, de l'autre au connecteur JTAG à 10 points qui est sur le
montage. Puis on lance Quartus-II (ou MaxPlus-II), on lui signale
qu'on a une chaîne JTAG contenant un unique composant (un
EPM3064ALC44) et qu'on veut le programmer avec le fichier
"coupatan.pof".
Petit détail technique: c'est le CPLD lui-même qui décide qu'il
faut laisser le montage allumé, donc avant qu'il soit programmé
cela ne peut pas fonctionner. C'est pour cela qu'il y a un
cavalier nommé "marche forcée" sur la partie 220V: mettez ce
cavalier, branchez le courant, appuyez sur le bouton poussoir: ça
s'allume, pour ne s'éteindre que lorsqu'on retirera la prise. Ceci
permet d'effectuer la programmation, une fois que c'est fini (et
débranché du secteur!), on peut retirer le cavalier.
Concernant le câble de programmation:
À l'époque où j'ai réalisé le montage et écrit cette page, les
PC avaient un port parallèle, et le câble ByteBlaster-II ou
ByteBlaster-MV, vendu par Altera se connectait à ce port
parallèle
Ce câble était assez cher, pour un bricoleur n'utilisant ce
câble que sur des circuits alimentés uniquement en 3.3V, il
était très facile et économique de fabriquer soi-même le câble
en utilisant deux buffers 74HC244. Le schéma était disponible
dans le manuel
du câble ByteBlaster-II, et dont j'ai recopié les 3 pages
intéressantes ici. Quelques petits condensateurs doivent
être ajoutés pour améliorer la fiabilité.
Aujourd'hui, les PC n'ont plus de port parallèle, il faut
utiliser des câbles sur USB, qui peuvent être très simples
(basés sur une puce FTDI FT232R ou FT245R en mode "synchronous
bit-bang"), mais parfois coûteux. Altera/Intel propose une
version de base «Intel FPGA Download Cable» (anciennement
«Altera USB-Blaster»), et une version améliorée et un peu moins
chère «Intel FPGA Download Cable II» (anciennement Altera
USB-Blaster II»). Mais il est beaucoup plus avantageux d'acheter
le câble «Terasic USB Blaster», strictement identique au câble
vendu par Altera/Intel et 6 fois moins cher, qui fonctionne avec
le driver fournit par Intel/Altera pour le câble USB-Blaster.
Fabrication du boîtier et montage
Là, à chacun de se débrouiller. Les critères à respecter sont:
Bien protéger le 220V: je conseille fortement les boîtiers
tout en plastique. Sinon, il faut obligatoirement un fil de
terre qui soit relié à toutes les parties métalliques du
boîtier. Éviter aussi les contacts entre le 220V et les parties
basse tension!
Bloquer les fils dans le boîtier pour qu'on ne puisse pas
provoquer de court-circuit en tirant dessus: un noeud sur le fil
peut suffire.
Pour l'afficheur, il faut mettre une fenêtre transparente
(j'ai pris un bout de boîtier de CD pour cela)
Le clavier peut être fixé sur le boîtier, ou bien à
l'intérieur du boîtier (dans ce cas il faut créer une ouverture
ayant exactement la bonne taille: c'est ce que j'ai fait).
Ma solution:
la carte 220V fixée dans le fond du boîtier
la carte logique fixée au couvercle du boîtier. L'afficheur et
le clavier sont fixés directement sur cette carte.
le bouton-poussoir de démarrage est fixé au couvercle, mais
relié à la carte qui est au fond du boîtier
Conclusion
Apprenez le VHDL et jouez avec des composants de logique
programmable. C'est un monde que vous ne soupçonnez pas si vous ne
connaissez que les microcontrôleurs!
Je vous pardonne d'avance si vous trouvez qu'il est stupide de faire
un tel montage pour une minuterie de grille-pain.
Montage terminé le 15 février 2005, page écrite
le 22 février 2005.
Fait
à l'aide du programme prehtml -
Hébergement et statistiques: