Surchauffe Nema 17 pas à pas L298N

Bonjour à tous,

Je me suis lancé sur un projet qui nécessite deux moteurs pas à pas.

Pour cela j'ai acheté deux moteurs pas à pas Nema 17 bipolaire (ref 17HM15-0904S)

https://www.gotronic.fr/art-moteur-17hm15-0904s-23049.htm

Ainsi qu'un driver L298N pour chaque moteur.

Voici le schéma du montage :Imgur: The magic of the Internet

Et le code de contrôle :

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

# GPIO
# 17, 22, 23, 24

# Physical pins
# 11, 15, 16, 18

class Motor:
    def __init__(self, steps, delay, pinsMotor):
        self.steps = steps
        self.delay = delay
        self.setupPins(pinsMotor)
    
    def get_steps(self):
        return self.steps
    
    def setupPins(self, pinsMotor):  
        self.M_IN1 = pinsMotor[0]
        self.M_IN2 = pinsMotor[1]
        self.M_IN3 = pinsMotor[2]
        self.M_IN4 = pinsMotor[3]
        
        GPIO.setup(self.M_IN1, GPIO.OUT)
        GPIO.setup(self.M_IN2, GPIO.OUT)
        GPIO.setup(self.M_IN3, GPIO.OUT)
        GPIO.setup(self.M_IN4, GPIO.OUT)
    
    def setStep (self, w1, w2, w3, w4):
        GPIO.output(self.M_IN1, w1)
        GPIO.output(self.M_IN2, w2)
        GPIO.output(self.M_IN3, w3)
        GPIO.output(self.M_IN4, w4)
        
    def forward (self):
        for i in range(0, self.steps):
            self.setStep(1,0,1,0)
            time.sleep(self.delay)
            self.setStep(0,1,1,0)
            time.sleep(self.delay)
            self.setStep(0,1,0,1)
            time.sleep(self.delay)
            self.setStep(1,0,0,1)
            time.sleep(self.delay)

Le problème est que les drivers et les moteurs deviennent extrêmement chaud. Je ne sais pas à quelle température exactement mais je ne peux plus poser mes doigts dessus.

Mon alimentation 12V/5A est censée fournir 2A aux drivers et ces drivers vont délivrer 1A aux moteurs. Je pense que si les moteurs chauffent c'est à cause d'un surplus de courant. Mais ils ne peuvent pas avoir plus que ce dont ils ont besoin ?

Les moteurs deviennent inutilisables au bout d'un moment lorsqu'ils chauffent trop ...

J'aurais aimé avoir des conseils / critiques sur mon montage pour savoir si j'utilise les moteurs correctement et si mes composants sont adaptés à ce type de montage.

Merci d'avance,

Cordialement.

Le problème vient du fait que le L298 n’est pas un « driver » de moteur pas à pas mais « seulement » un double pont en H, du coup il n’est pas capable de limiter le courant.

Tourne toi vers un driver type A4988 ou drv8825.

Salut merci @Jambe pour la réponse !

Je vais regarder ça ! Est-ce que je peux te demander pourquoi faut-il limiter le courant sur un moteur pas à pas et pas sur un moteur DC classique ? J'ai vu beaucoup de montages DC moteur avec le composant L298N, je pensais donc qu'il aurait été adapté à un moteur pas à pas ... :confused:

Merci d'avance !

Bonjour,
Je vais répondre de façon, disons, peu scientifique.

Les moteurs PAP en fonctionnement sont caractérisés par une FCEM qui vient s'opposer à la tension du générateur. Pour compenser cette FCEM, on augmente la tension du générateur pour pouvoir atteindre le courant désiré.
C'est pour cela que les alims des drivers de moteur PAP sont de tension relativement élevée, cad. bien supérieure à celle normalement requise pour le moteur PAP en question. Bien entendu, les drivers spécialisés contrôlent de courant de manière à optimiser le fonctionnement du moteur et à éviter de l'endommager.

Si tu drive ton moteur PAP avec un module qui ne contrôle pas le courant, tu risques en effet une chauffe excessive (ce qui n'est pas forcément le cas car ton moteur peut bien chauffer un peu)

Dans le cas d'un moteur DC, la tension d'alim est adaptée à la tension max du moteur, ce qui élimine le risque de destruction (sauf aussi dans certains cas comme moteur bloqué et courant non limité)

Bonjour,

Merci pour ta réponse. Ce qui m'amène à une dernière question, les L298N consomment 2A max et mes Nema 17 0,9A max.

Je pensais que les composants ne pouvaient recevoir que l'intensité maximum dont ils avaient besoin. Hors si mes moteurs chauffent c'est parce qu'ils ont trop d'intensité. Cela veut dire que les L298N envoient la totalité de leur puissance aux moteurs ?

0,9A c'est le courant admissible, celui qu'il ne faut pas dépasser sous peine de dégrader les bobinages.
Si tu regardes les caractéristiques de tes moteurs, tu vas voir que leur résistance est très faible, de l'ordre de 1,5 Ohms environ. Donc, sous 12V en continu c'est 8A!!! C'est pour ça qu'on limite le courant.

Pour info (trouvé sur un site de vente de moteur pas-à-pas):
Caractéristiques:

  • Norme du moteur pas à pas: NEMA 17
  • Dimensions: 42.3x42.3x48mm
  • Poids: 350g
  • Diamètre de l'axe: Ø5 x ~24 mm
  • Nombre de phase: 2
  • Voltage standard: 2,8 V
  • Nombre de pas: 200
  • Pas angulaire: 1,8° (+/-5%)
  • Couple de maintien: 50N.cm soit 70oz.in
  • Connection: 4 fils molex ou dupont
  • Résistance/phase: 1,65 Ohm par phase
  • Inductance/phase: 2,8 mH par phase
  • Courant/phase: 1,68 A par phase

Effectivement je ne voyais pas les choses comme ça ... D'où l'intérêt d'avoir un potentiomètre sur les drivers A4988 ...

Je vais acheter ce genre de driver et changer mon montage voir ce que ça va donner :slight_smile:

Merci pour vos conseils !

Bonjour,

J'ai à peu près le même problème que Hurobaki... un projet avec 2 stepper, 2 driver L298N (monté sur une carte VELLEMAN L298N avec le L298N justement : https://www.velleman.eu/downloads/29/vma409_a4v01.pdf

Les moteurs et drivers chauffent beaucoup, après 15 tours je ne mets plus le doigt dessus. J'ai cramé plusieurs L298N.

Ca marchait bien avec une alim qui ne fournissait pas trop de courant, ce qui est logique d'après ce que je lis, et quand je passe avec une alim de table type PC, sans limitation ça surchauffe direct.

Pouvez vous transmettre votre schéma avec les drivers qui limitent le courant svp à base d'A4988 ?

Ceci dit j'ai plusieurs questions :
Pourquoi on trouve sur internet que le L298N peut piloter des moteurs pas à pas ? et dans quel cas ça va marcher ?

Quand le moteur est à l'arrêt, la bibliothèque stepper.h laisse 2 sorties à l'état 1. Ce qui fait aussi chauffer très vite le driver. et consommer de l'énergie.
Y a-t-il une fonction qui repasse les sorties à 0V ?
Je bidouille dans le programme pour repasser à 0V les sorties mais ce n'est pas très propre. il y a aussi les broches enable que je pilote, c'est toujours plus propre.

merci de vos réponses !
Vincent

Pourquoi on trouve sur internet que le L298N peut piloter des moteurs pas à pas ?

Parce qu'il y a pleins de gens comme moi qui ne le savait pas.

Quand le moteur est à l'arrêt, la bibliothèque stepper.h laisse 2 sorties à l'état 1. Ce qui fait aussi chauffer très vite le driver. et consommer de l'énergie.
Y a-t-il une fonction qui repasse les sorties à 0V ?

Si on n'alimente pas le moteur, il est en roue libre. Le laisser alimenté permet de garder sa position exacte.
En principe, on le laisse toujours alimenté

Pourquoi on trouve sur internet que le L298N peut piloter des moteurs pas à pas ? et dans quel cas ça va marcher ?

En fait sur internet ...... on trouve également la Notice technique du L298N , notice ou l'on voit en page 8 que son constructeur avait prévu la commande de moteurs pas à pas bipolaires en associant au L298 , par exemple, un L297 pour gérer le courant. (image ci-dessous)

C'est la fonction qu'il faut ajouter d'une manière ou d'une autre au L298 pour la commande de moteurs pas à pas.
pasapas.png

pasapas.png

Merci de vos retours,

J'avais bien vu dans la datasheet l'exemple avec L297 et L298, mais il y a une telle quantité de tuto sur l'utilisation du L298 seul que s'en est vraiment troublant cette histoire.

et puis je pensais que le module VELLMAN que j'ai acheté était plug and play. perdu, c'est un peu frustrant... Il y a quand même des jumpers ceci dit pour mettre les fameuses Rsense.

du coup j'ai plusieurs options.

1ere option : j'ai lu (sur internet...) qu'on pouvait mettre des résistance en série sur la charge pour limiter le courant dans la charge. 22 ohms jusqu'à 100 ohms, donc connecté entre Rsense et la masse.
==> ok, c'est une solution un peu brouillon, on limite le courant mais on n'a pas de retour.

2e option, je me procure les L297 et je me lance dans la manip.
==> Une idée s'il y a déjà une bibliothèque arduino pour piloter un L297 en lien avec un L298 ? je ne trouve pas.

3e option, dans la datasheet du L298 il y a un exemple avec le L6506. ce qui permet si je ne m'abuse de ne pas changer l'interface (déjà existante) avec le L298 et de piloter de la même façon.
Et le comparateur interne au L6506, avec les résistance permet de limiter le courant via la PWM dans le L298. j'ai bon ?

et moi qui pensais que ça aller marcher directement sans avoir à se creuser le ciboulot !

merci à vous !
Vincent

Bonjour à tous, pour que ça puisse servir à l'avenir,

J'ai mis en oeuvre une solution moindre coût sans avoir à (trop) changer le HW : j'ai branché les broches enable du L298N sur une sortie PWM de l'arduino la 5 et la 6, de ce que je lis avec une fréquence de 980Hz.

Je génère un PWM actif à 25%,ou 33% et ma foi, ça marche, le moteur et le driver ne chauffent plus (le courant n'a pas le temps de s'établir dans la self qu'il est déjà coupé)

je fais 2 tour/ secondes, je ne perds pas de pas...

Bon, la vitesse max du moteur et le rapport cyclique de la pwm restent à ajuster au moteur, expérimentalement en fonction des bobines, (moins le courant met de temps à s'établir, plus le courant va augmenter rapidement et donc plus ça va faire chauffer), et pour ne pas perdre de pas... il faut expérimenter un peu !

et on doit aussi forcément perdre en couple... c'est forcément plus propre d'associer le L297...
Bonne journée,

Vincent

vainse76:
Bonjour à tous, pour que ça puisse servir à l'avenir,

J'ai mis en oeuvre une solution moindre coût sans avoir à (trop) changer le HW : j'ai branché les broches enable du L298N sur une sortie PWM de l'arduino la 5 et la 6, de ce que je lis avec une fréquence de 980Hz.

Je génère un PWM actif à 25%,ou 33% et ma foi, ça marche, le moteur et le driver ne chauffent plus (le courant n'a pas le temps de s'établir dans la self qu'il est déjà coupé)

je fais 2 tour/ secondes, je ne perds pas de pas...

Bon, la vitesse max du moteur et le rapport cyclique de la pwm restent à ajuster au moteur, expérimentalement en fonction des bobines, (moins le courant met de temps à s'établir, plus le courant va augmenter rapidement et donc plus ça va faire chauffer), et pour ne pas perdre de pas... il faut expérimenter un peu !

et on doit aussi forcément perdre en couple... c'est forcément plus propre d'associer le L297...
Bonne journée,

Vincent

Bonjour...
C'est la 1er fois que je poste sur ce forum. Sais pas trop si vous me lirez...
Meme probléme que vous . Mais votre solution m'interroge !
Brancher les broches enable du L298N sur une sortie PWM de l'arduino la 5 et la 6, de ce que je lis avec une fréquence de 980Hz.
Ca me parle pas du tout.

Génerer un PWM actif à 25%,ou 33% ?
Vous pouvez essayer de développer ?
Merci !

Bonjour,

La fonction
analogWrite(numéro de broche, rapport cyclique);
permet de générer un signal carré de type PWM, avec un rapport cyclique (temps haut / temps bas) qui varie en fonction de ce qu'on met dans l'appel à la fonction analogWrite. il doit y avoir des tutos sur ce sujet.

en gros si on met rapport cyclique = 50% (soit une valeur à 128 dans le arduino, car le max est à 255), avec une fréquence de 1000Hz, on aura un signal à 1 pendant 0.5ms et à 0 pendant 0.5ms.
si on met 25% (valeur de 64) on a un signal a 1 pendant 0.25ms et à 0 pendant 0.75ms.
etc. le arduino gère cette sortie automatiquement, sans bloquer le programme.

Si on alimente la broche enable, (autorisation) du L298 avec une PWM, on alimente que pendant une portion de temps le moteur. et le courant n'a pas le temps de s'établir dans les self du moteur.
Car une self en mode "freine" l'établissement du courant qui veut passer. par contre, une fois qu'il s'est établi, il est à sa valeur max. le contraire d'une capa.

Mais, comme je l'ai précisé, il faut trouver le bon rapport cyclique par l'expérimentation, ça va dépendre du moteur, de ce qu'il doit entrainer (et donc du couple demandé), et de la vitesse qu'on demande au moteur.
je répète, c'est moins propre que la solution avec le L297 qui va gérer un rapport cyclique automatiquement en fonction du courant qui passe dans le moteur pour le limiter.

bon courage...
Vincent