Ardu? No!Les moteurs pas à pasSchémas de câblagePour unipolaires ≫ Avec un ULN2003

Schémas de câblage des unipolaires avec un ULN2003

Schéma de base

Je pense plutôt au ULN2803, mais il y a plusieurs circuits presque équivalents. Le ULN2803 est un réseau de 8 transistors darlington, ce qui permet de commander jusqu'à 2 moteurs pas à pas, si les courants ne sont pas trop importants.
ULN2003: 50V, 7 sorties, entrées 0/5V
ULN2803: 50V, 8 sorties, entrées 0/5V
SN75423: 100V, 8 sorties, entrées 0/5V
Ces circuits ont une entrée 0/5V, dite TTL, et sont donc commandable directement par l'Arduino. Le ULN2002 doit être commandé en 14/25V et est donc inutilisable en sortie de l'Arduino.

ULN2003 et ULN2803 sont équivalent, et si il n'y a qu'un seul moteur à commander, on peut prendre l'un ou l'autre. Notez que les sorties inutilisées peuvent être utilisées à d'autres fins (commander un moteur CC, une led de puissance...).

Pour le courant maximum utilisable, c'est un peu plus compliqué. Il ne faut pas dépasser les 500mA par sortie d'une part, ni dépasser la température maximale de fonctionnement. Supposons que l'on souhaite brancher 2 moteurs qui consomment 350mA par phase. On alimente au maximum 2 enroulement par moteur (si on utilise le mode demi pas ou le mode deux phases à la fois), sinon c'est un seul enroulement par moteur. Pour 350mA en sortie, le constructeur donne une tension maximale de 1,6V (typique de 1,3V), ce qui fait 0,56W par sortie au maximum. Si on utilise deux moteurs en mode deux phases à la fois, on a 4 sorties utilisées en même temps, on va dissiper 2,25W. Avec une résistance thermique donnée de 62.7°C/W, la température de la jonction s'élève de 140°C ce qui est trop si la température ambiante est supérieure à 10°C car on dépasse la température de fonctionnement maximale de 150°C. Et encore le constructeur précise qu'"Un fonctionnement à la température de jonction maximale absolue de 150°C peut affecter la fiabilité". En conclusion, avec un ULN2803, on doit pouvoir commander deux moteurs sous 200mA maximum ou un seul moteur de 500mA.

Utiliser deux sorties ensemble pour commander les enroulement devrait permettre de monter le courant aux alentours de 600mA, mais sans aucune garantie. Un ULN2803 pourra alors commander un seul moteur. Utiliser deux sorties ensembles permet de faire passer moins de courant dans les sorties, ce qui diminue la tension de déchet, et par la même la puissance dissipée. Si vous utilisez une carte toute faite, en principe c'est un ULN2003 (7 sorties) qui est utilisé, et on ne peut pas doubler les sorties.

Les diodes de roue libre nécessaires entre les sorties et la masse sont déjà présentes dans le circuit. Connecter la sortie COM au + de l'alimentation permet de faire des court-circuits quand on alimente une bobine et je le déconseille, bien que certains sites l'utilisent. Si vous souhaitez utiliser cette possibilité, il faut mettre une zéner en série.

Commande à deux fils

On peut remarquer que si le courant dans le moteur ne dépasse pas les 500mA, on peut utiliser une sortie par fil moteur, et que l'on a alors des sorties inutilisées. On peut aussi remarquer que l'on avait besoin de 4 commandes pour le moteur, une par bobine. Mais si on utilise le mode deux phases à la fois (car le couple est plus important) et que le moteur est constamment sous tension (ce que l'on fait en général car le couple de maintien du moteur non alimenté est faible), on s'aperçoit que pour une phase on commande soit une bobine, soit l'autre. On a donc besoin que d'une information binaire au lieu de deux pour une phase donnée (soit deux sorties de l'Arduino au lieu de 4). Et on va profiter des darlingtons non utilisés pour faire les inversions. En effet la bobine N°2 d'une phase a sa commande inversée par rapport à la bobine N°1. Voici ce que cela peut donner pour une seule phase (il faut doubler le schéma pour un moteur, et on peut utiliser n'importe quelle porte; ces schémas ne sont pas à recopier tels quels, il ont pour objectif de vous montrer ce que l'on peut choisir).

Ce schéma montre l'alimentation d'une phase. A été rajouté la zéner facultative dont le seuil doit être au moins de la valeur de VAlim. On a deux commandes de l'Arduino qui sont opposées.

Montage N°1

Ce montage N°1 va utiliser l'inversion d'un darlington pour commander le deuxième. Il faut par contre garantir que la première sortie ait un potentiel de sortie (VCEsat) au maximum de 1,2V sinon la deuxième porte ne se bloquerait pas. C'est donc utilisable si le courant de sortie ne dépasse pas 300mA.

La tension de sortie de la porte vaut 1V ou VAlim. Or le circuit est prévu pour admettre en entrée du 0/5V. Si VAlim est supérieur à 5V, la résistance R est possible (sous 5V, on relie directement la sortie 18 à l'entée 2, c'est à dire on prend R=0). Ne pas oublier que du fait que le VCEsat est de l'ordre du volt, un moteur 5V sera légèrement sous-alimenté si VAlim est de 5V. Si on prend une alimentation de 6V, on peut se passer de R. Dans le cas contraire, le ULN2008 ayant un courant de l'ordre de 1,4mA, on peut facilement déterminer R: la tension à ses bornes devra être de VAlim-5V Sa valeur est donc approximativement de (VAlim-5V)/0,0014A. Pour 5V, prendre 0Ω, pour 12V prendre 4.7kΩ (valeur normalisée la plus proche de 5kΩ). Si sous 12V on met une résistance nulle, il y aura un courant de base de 11V/2,7kΩ soit d'environ 2,3mA. C'est un courant plus grand que nécessaire, mais bien en dessous du courant limite de 25mA permis par le circuit. On dissipe un peu plus qu'utile, mais on économise une résistance. Sous 12V, on peut se permettre de mettre 0Ω (un simple fil).

Voici une réalisation simple pour n'utiliser que deux pins de l'Arduino:

J'ai supprimé deux broches sur le connecteur d'entrée et relié avec deux fils directement sur le ULN2003 les broches 3 à 18 et 4 à 17. Cela fonctionne parfaitement avec un 28BYJ-48 en 12V. Avec un moteur plus puissant (500mA), comme prévu les darlington ne bloquent pas assez.

Montage N°2

Le montage N°2: si le courant du moteur est de l'ordre de 500mA, la tension de déchet sera supérieure à 1,2V et ne permet plus de bloquer le deuxième darlington. Pour assurer le fonctionnement, on peut alors placer une diode en série avec l'entrée, qui bloquera le darlington jusqu'à un VCEsat de 1,8V. Seul le seuil de la diode m'importe, une diode signal convient (1N914 ou 1N4148), mais une diode de redressement fait l'affaire (1N400?). La formule pour calculer R devient (VAlim-5,6V)/0,001A ce qui ne change quasiment pas.

Montage N°3

Plutôt que d'utiliser une diode, on peut si on n'a qu'un seul moteur, utiliser un darlington supplémentaire. C'est le montage n°3. On va donc utiliser une sortie du ULN2003/ULN2803 pour la puissance et une sortie pour faire l'inversion. La sortie de cette porte supplémentaire étant à collecteur ouvert, il faut une résistance de rappel à VAlim pour pouvoir délivrer le courant de base du darlington suivant.
- si A=low la sortie 17 du darlington est en haute impédance (transistors bloqués) et on alimente l'entrée 3 au travers de la résistance.
- si A=high la sortie 17 impose un état bas en sortie et sous quelques mA, on sera bien en dessous du seuil des 1,2V
La formule pour calculer R est la même que pour le montage N°1: R=(VAlim-5V)/0,001A. Mais pour une tension de 5V on ne peut plus mettre 0Ω. On mettra alors un minimum de 470Ω (passera 10mA au maximum, soit 10 fois ce que consomme l'entrée). Plus cette résistance est grande, moins les darlington aura le bon courant de base, et si elle est trop faible, cela consomme du courant pour rien.

On trouve sur le net ce schéma. Je ne l'aime pas pour plusieurs raisons:
- le croquis du moteur ressemble plus à un moteur à deux enroulements que celui qui est censé être représenté qui comporte 4 enroulements; il s'agit bien ici d'un moteur 6 fils, les deux du bas sont les deux points communs (que j'avais pris au départ pour la masse); en principe, les potentiels d'alimentation positifs sont dessinés en haut, ici ils sont en bas, d'où ma confusion au départ
- il faut une alimentation supplémentaire de 5V pour ce montage alors que VAlim convient mieux
- la diode telle qu'elle est dessinée ne sera jamais conductrice, elle ne sert à rien: il y a dans le ULN2803/ULN2003 des diodes en série dans l'autre sens; ou bien il s'agit de ma fameuse zéner qui est mal dessinée
- le ULN2004 ne convient pas car il risque de ne pas "saturer" avec une tension de 5V
- les deux résistances de 1kΩ de gauche ne servent à rien
- les deux résistances de droite ont pour moi une valeur trop importante. Des 470Ω seraient plus appropriées surtout si on veut pouvoir utiliser un moteur consommant 500mA.