Le ULN2803A réunit dans un boîtier DIP-18 de la taille d’un ongle huit paires de transistors Darlington, chacune capable de laisser passer jusqu’à 500 mA sous une tension de maintien de 50 V. Un microcontrôleur comme l’Arduino ne peut pas sortir plus de 20 mA par broche : le ULN2803A est exactement l’étage qui manque entre une sortie logique et un moteur, un relais ou une rangée de LED. Le circuit vendu ici est le ULN2803APG de Toshiba, en boîtier DIP-18 traversant, la référence dont la sérigraphie est lisible sur le boîtier.
C’est un abaisseur de courant : ses sorties ne fournissent pas de tension, elles relient leur charge à la masse. On parle de sortie à collecteur ouvert. La charge se branche donc entre le pôle positif de son alimentation et la sortie du circuit — un point qui surprend au premier montage, et qui explique la moitié des câblages qui ne fonctionnent pas.
Chaque canal contient aussi une diode de roue libre, reliée à une cathode commune (broche 10). Branchée au pôle positif de la charge, elle absorbe le pic de tension que renvoie une bobine à l’extinction : c’est ce qui permet de piloter directement un moteur ou un relais sans ajouter de diode externe.
Caractéristiques techniques
| Référence | ULN2803APG (sérigraphie du boîtier) — 8ch Darlington Sink Driver, Toshiba |
|---|---|
| Boîtier | DIP-18 traversant, pas de 2,54 mm, 18 broches (9 par rangée) |
| Canaux | 8 paires Darlington NPN, à collecteur ouvert |
| Courant de sortie | 500 mA maximum par canal |
| Tension de sortie | 50 V maximum entre le collecteur et la masse |
| Résistance de base d’entrée | 2,7 kΩ, intégrée au circuit |
| Compatible logique | TTL et CMOS 5 V ; tension d’entrée de conduction 2,4 V maximum à 200 mA, donc pilotable aussi en 3,3 V |
| Courant d’entrée | 0,35 mA typique sous 5 V — aucune résistance de limitation à prévoir |
| Tension de saturation | 1,3 V typique à 350 mA (la tension perdue entre la charge et la masse) |
| Diodes de roue libre | Intégrées, cathode commune sur la broche 10 (COM) |
| Dissipation maximale | 1,47 W à 25 °C (boîtier DIP-18), à répartir entre les canaux |
| Commutation | 0,1 µs à l’enclenchement, 0,2 µs au déclenchement |
| Température de fonctionnement | −40 à +85 °C |
| Protections internes | Aucune contre les surintensités et les surtensions |
Brochage du boîtier DIP-18
La broche 1 se repère au repère de l’encoche ou du point rond. Vue de dessus, les huit entrées occupent les broches 1 à 8, la masse la broche 9, puis les sorties descendent en ordre inverse de la broche 11 à la broche 18 — le canal 1 sort sur la broche 18, en face de la broche 1.
| Broches 1 à 8 | 1B à 8B — entrées de commande des canaux 1 à 8 |
|---|---|
| Broche 9 | GND — émetteur commun aux huit canaux, à relier à la masse du montage |
| Broche 10 | COM — cathode commune des diodes de roue libre, à relier au pôle positif de la charge |
| Broche 11 | 8C — sortie du canal 8 |
| Broche 12 | 7C — sortie du canal 7 |
| Broche 13 | 6C — sortie du canal 6 |
| Broche 14 | 5C — sortie du canal 5 |
| Broche 15 | 4C — sortie du canal 4 |
| Broche 16 | 3C — sortie du canal 3 |
| Broche 17 | 2C — sortie du canal 2 |
| Broche 18 | 1C — sortie du canal 1 |
Une entrée au niveau haut rend son canal conducteur : la sortie correspondante passe à la masse et le courant circule dans la charge. Une entrée au niveau bas bloque le canal, et la sortie reste flottante. C’est l’inverse de l’intuition : pour allumer, on écrit HIGH sur l’entrée.
Le brochage en miroir est le piège du boîtier. Entre le schéma d’un module du commerce et la broche du circuit seul, le canal 1 change de côté : sur la broche 18 pour le boîtier DIP-18, en face de la broche 1. Et un boîtier monté à l’envers met la masse et le pôle positif là où le circuit attend le contraire : il ne survit pas à la mise sous tension.
Applications courantes
- Relais et contacteurs : une bobine 5 V ou 12 V se pilote directement depuis une sortie du microcontrôleur, la diode interne éteignant le pic de coupure.
- Moteurs pas à pas unipolaires à 5 ou 6 fils : quatre canaux pilotent les quatre bobines, en séquence.
- Moteurs à courant continu en tout ou rien, ou en modulation de largeur d’impulsion sur une seule sortie.
- Électrovannes, gâches, solénoïdes, qui sont tous des charges inductives.
- Rangées de LED et d’afficheurs : 500 mA par canal laissent passer plusieurs dizaines de LED, ou l’alimentation d’une cathode commune.
- Buzzer et petits haut-parleurs de forte intensité, que la broche d’un microcontrôleur ne pourrait pas alimenter.
- Multiplexage de matrices et d’afficheurs à cathodes communes : huit cathodes pilotées par un seul circuit.
Mini-projet : piloter un moteur pas à pas unipolaire 28BYJ-48
C’est le montage qui justifie ce circuit : les quatre bobines d’un moteur pas à pas unipolaire demandent à être mises à la masse l’une après l’autre, chacune sous un courant que l’Arduino ne peut pas absorber. Le ULN2803A s’en charge, et le programme tient en quinze lignes.
Ce qu’il faut
| Le circuit | Le ULN2803A de cette page |
|---|---|
| Le moteur | Moteur pas à pas 28BYJ-48 5 V, à cinq fils |
| Le cerveau | Uno R3 + câble USB |
| Le support | Plaque d’essai 830 points, pour loger le boîtier à cheval sur la gouttière centrale |
| Les liaisons | 10 câbles Dupont mâle-mâle et mâle-femelle |
Le montage fonctionne avec la même famille en module : le ULN2003A Driver Moteur Pas à pas est la version sept canaux de ce circuit, sur carte, déjà raccordée pour ce moteur. Le 28BYJ-48 livré avec son driver ULN2003A est la version prête à brancher. Prendre le circuit seul n’a d’intérêt que si l’on câble soi-même, ou si l’on a besoin du huitième canal.
Le câblage
Le boîtier se place à cheval sur la gouttière centrale de la plaque d’essai, repère de la broche 1 vers la gauche. Les entrées sont sur la rangée inférieure : broche 1 à la ligne 1, et ainsi de suite jusqu’à la broche 9 au fond de la gouttière. Les sorties sont sur la rangée supérieure, dans l’ordre inverse.
Broche 9 du ULN2803A (GND) | → masse de l’Arduino |
|---|---|
Broche 10 du ULN2803A (COM) | → +5 V du montage (c’est ce qui met les diodes de roue libre en service) |
Broches 1, 2, 3, 4 du ULN2803A (1B à 4B) | → sorties numériques D8, D9, D10, D11 de l’Arduino |
Broches 18, 17, 16, 15 (1C à 4C) | → les quatre fils de bobines du moteur, dans cet ordre |
| Fil rouge du moteur | → +5 V du montage ; c’est le point milieu commun, jamais une sortie du circuit |
Les masses doivent être communes. Le courant du moteur revient par la broche 9 du circuit : si cette masse n’est pas reliée à celle de l’Arduino, les sorties logiques n’ont aucune référence et le moteur vibre sans tourner.
La broche 10 n’est pas facultative sur une bobine. Sans elle, les diodes de roue libre ne sont reliées à rien : à chaque coupure de courant, la bobine renvoie un pic de tension qui traverse le Darlington et finit par le percer. Sur une simple rangée de LED, cette broche peut rester non connectée ; sur un moteur, un relais ou une électrovanne, elle doit aller au pôle positif de la charge.
Le courant du moteur peut venir de la broche 5 V de l’Arduino pour un essai au banc. Si la carte est alimentée par USB et que d’autres éléments consomment déjà, une alimentation 5 V séparée est préférable — les ensembles moteur et driver vendus dans la boutique fonctionnent très bien ainsi.
Le programme
À téléverser par USB. La bibliothèque Stepper est fournie avec l’environnement Arduino, rien à installer.
/*
* Moteur pas a pas unipolaire 28BYJ-48 pilote par un ULN2803A
* Carte : Arduino Uno R3
* Montage : entrees 1B a 4B (broches 1 a 4) sur D8 a D11,
* sorties 1C a 4C (broches 18, 17, 16, 15) sur les quatre bobines,
* masse du circuit (broche 9) sur la masse, COM (broche 10) sur le +5 V
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "Stepper.h"
const int PAS_PAR_TOUR = 2048; // 28BYJ-48 : 32 pas par tour moteur, reducteur 1 sur 64
const int VITESSE = 10; // tours par minute ; au-dela, le moteur decroche
Stepper moteur(PAS_PAR_TOUR, 8, 9, 10, 11);
void setup() {
moteur.setSpeed(VITESSE);
Serial.begin(9600);
Serial.println("Banc moteur pret");
}
void loop() {
moteur.step(PAS_PAR_TOUR); // un tour complet dans un sens
delay(1000);
moteur.step(-PAS_PAR_TOUR); // un tour complet dans l'autre sens
delay(1000);
Serial.println("Aller-retour termine");
}Comment ça marche
- Un moteur pas à pas unipolaire à cinq fils possède deux bobines, chacune coupée en son milieu : le fil rouge est ce point milieu et le reste des fils sont les quatre extrémités. Le moteur tourne quand on met ces extrémités à la masse dans un ordre précis — le fil rouge, lui, reste au +5 V en permanence.
- Le constructeur
Stepperreçoit le nombre de pas par tour puis les quatre broches de commande. La bibliothèque produit elle-même la séquence sur ces quatre broches : le ULN2803A ne fait que la traduire en courant. PAS_PAR_TOURvaut 2048 pour un tour de l’arbre de sortie : le moteur interne fait 32 pas par tour, et le réducteur intégré multiplie par 64. Le nombre change si le moteur n’est pas un 28BYJ-48.moteur.setSpeed()attend des tours par minute. En dessous de cinq tours par minute, le moteur devient saccadé ; au-delà d’une quinzaine, il vibre sur place et perd des pas. Entre les deux, il tourne doucement et régulièrement.- La vitesse ne règle pas la force. Un moteur pas à pas fournit son couple à l’arrêt et le perd progressivement quand la fréquence des pas augmente. Un moteur qui « saute » des pas se règle en baissant la vitesse, jamais en augmentant le courant.
- Le circuit ne chauffe pas dans ce montage : chaque bobine du 28BYJ-48 demande bien moins que les 500 mA que le canal supporte.
Si le moteur vibre sans tourner
Trois causes, dans l’ordre de fréquence. L’ordre des bobines sur les sorties n’est pas le bon : permuter deux fils voisins, ou intervertir les groupes de deux. La vitesse est trop élevée pour le couple demandé : descendre VITESSE à 5 et réessayer. Le fil commun n’est pas au +5 V : le moteur ne reçoit alors aucun courant, et les quatre bobines se contentent de tirer la sortie du circuit vers la masse sans rien produire.
Variante : un relais ou une autre charge inductive
Le câblage d’un relais est le même, en un seul canal. La bobine du relais 5 V se branche entre le +5 V et une sortie du circuit, l’entrée correspondante part sur une broche de l’Arduino, et la broche 10 va au +5 V. Une sortie à HIGH colle le relais, une sortie à LOW le relâche.
Le module 1 relais et le module 4 relais font la même chose avec leur transistor et leur diode déjà montés. Prendre le circuit seul et le relais nu revient moins cher au canal, et le ULN2803A commande alors jusqu’à huit relais avec un seul composant — c’est le montage classique des cartes de commande domestique.
Pour une charge qui demande plus que les 500 mA d’un canal, le circuit ne convient pas : il faut passer à un transistor de puissance TIP120, qui absorbe cinq ampères avec le même type de câblage, ou à un relais statique pour du courant alternatif.
Questions fréquentes
Ce circuit peut-il alimenter un moteur au lieu de le mettre à la masse ?
Non. Les sorties sont à collecteur ouvert : elles relient la charge à la masse, elles ne fournissent aucune tension. Un moteur branché directement entre une sortie et la masse ne tournera pas — il faut toujours le brancher entre le pôle positif de son alimentation et la sortie.
Le ULN2803A peut-il piloter un moteur pas à pas bipolaire ?
Non. Un moteur bipolaire à quatre fils — les Nema 17 en font partie — a besoin d’inverser le courant dans ses bobines, ce que des sorties à collecteur ouvert ne savent pas faire. Il faut un pont en H : un driver A4988 ou un module L298N, qui inversent le courant dans chaque bobine. Le ULN2803A ne convient qu’aux moteurs unipolaires, ceux qui ont cinq ou six fils.
Puis-je le piloter depuis un ESP32 ou un module 3,3 V ?
Oui. La tension d’entrée nécessaire pour rendre un canal conducteur est de 2,4 V au maximum, bien en dessous des 3,3 V d’un ESP32. Le courant d’entrée, lui, ne dépasse pas 0,5 mA : une sortie logique peut commander plusieurs entrées du même circuit sans faiblir.
Faut-il des résistances entre l’Arduino et les entrées ?
Non. Les 2,7 kΩ nécessaires sont intégrés dans le circuit, canal par canal. C’est précisément ce qui le distingue d’un montage à transistors séparés, où chaque base réclame sa résistance.
Peut-on commander les huit canaux en même temps ?
Électriquement oui, thermiquement non. Chaque canal peut conduire 500 mA, mais le boîtier ne peut dissiper que 1,47 W au total. Comme chaque canal perd environ 1,3 V à 350 mA, huit canaux chargés simultanément dépassent cette limite et le boîtier chauffe dangereusement. En pratique, on en commande deux à quatre à la fois, ou l’on alterne. Pour huit charges lourdes simultanées, il faut répartir sur deux circuits, ou prévoir une plaque qui évacue la chaleur.
Pourquoi une broche COM sur ce circuit alors que d’autres n’en ont pas ?
Parce que les diodes de roue libre y ont leur cathode commune. Le ULN2003A, le modèle à sept canaux de la même famille, possède aussi cette broche ; ce sont les petits modules du commerce qui la relient d’office au pôle positif de leur alimentation. Sur le circuit seul, c’est à vous de le faire.
Le boîtier chauffe un peu en fonctionnement, est-ce normal ?
Oui, à condition de rester tiède. La chute de tension dans un Darlington se transforme en chaleur : c’est le revers du gain en courant. Un boîtier qui devient brûlant signale un canal trop chargé ou trop de canaux actifs en même temps : c’est le moment de compter les courants.
Comment le monter sur une carte définitive ?
Le boîtier se soude directement, ou se loge dans un support DIP-18 si l’on veut pouvoir le remplacer. Attention : un support pour boîtier 14 broches ne conviendra pas, l’écartement des rangées est le même mais il manque deux broches de chaque côté. Le circuit se place toujours repère de la broche 1 vers le même côté, sur le support comme sur la carte.
À combiner avec
Pour le mini-projet de cette page, il faut le moteur 28BYJ-48, un Uno R3, une plaque d’essai 830 points et des câbles Dupont. Si le montage doit tenir dans un boîtier, préférer l’ensemble 28BYJ-48 avec son driver ULN2003A, déjà raccordé et prêt à brancher. Côté charges, le relais 5 V et le module 1 relais se commandent directement, comme le ventilateur 5 V et le moteur réducteur à courant continu. Pour des charges plus lourdes, le TIP120 prend le relais au-delà des 500 mA par canal, et pour un moteur bipolaire il faut un driver de type ULN2003A pour l’unipolaire ou un pont en H pour le bipolaire.









