[Tutorial] ESP32 und ein Schrittmotor

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Zurück zum Inhaltsverzeichnis

    Um ein paar Schrittmotoren zu testen, brauchte ich ein Testgerät.
    Ich habe dann mal ein bißchen exprimentiert und bin dann auf folgende Lösung(en) gekommen.

    Dazu noch eine Anmerkung: Auf der Seite von ReRap über das Breakoutboard TMC2100
    werden verschiedene Bilder der Treiberkarte gezeigt, das Bild mit der Beschriftung "Pin-Belegung" ist aber fehlerhaft.
    Der "dir"-Pin liegt nicht auf dem Ende der Karte an dem auch das Poti einelötet ist, also Achtung.

    Soll-Vorgaben

    Es sollte:

    • eine über ein Poti regelbare Geschwindigkeit haben
    • Rechts- und Linkslauf haben
    • Über eine Rampe hochgefahren werden
    • Optional eine Anzeige zur eingestellten Geschwindigkeit

    Vorhandene Hardware

    Benötigt werden:

    Diverse Ideen

    Optional:

    Minimale Ausstattung

    • Die 5 Leuchtdioden mit den 1kΩ Widerständen (R1-R5) dienen erstmal nur zur Anzeige zum Testen ohne Motor
    • Die LC-Anzeige kann ebenfalls entfallen, der Motor läuft auch ohne
    • Wird der ESP32 von einem anderen Rechner angesteuert, kann der Taster und die beiden 10kΩ Widerstände (R6,R7) entfallen

    Schaltpläne

    Breadboard

    Nun zur Schaltung auf dem Breadbord:
    Der Step-Down-Spannungsregler (12V/24V -3.3V ist aus Platzmangel hier nicht eingezeichnet:
    Der untere Teil des Breadboards ist die 3.3V-Schiene, die obere Schiene ist für 12V, beide sind über GND miteinander verbunden
    Die Leitungen sind farblich gekennzeichnet:

    Code
    Rot     +  3.3V
    Cyan    + 12V
    Blau    GND
    Schwarz Motorleitungen
    Grün    Taster und Mittelanzapfung des Potis
    Violet  Drehrichtungsanzeige
    Braun   Steuer- und Anzeigeleitungen des TMC2100

    Anstelle des Tasters habe ich eine 3 pol. Stiftleiste eingefügt, aber der Taster, den ich benutzt habe fand sich nicht in der Library von Fritzing.

    Normaler Schaltplan

    Und nun noch der Schaltplan, auch hier gibt es die gleiche Farbzuordnung.
    Eigentlich nichts besonderes.

    Die Leiterplatte

    Ich habe mir mal die Mühe gemacht eine Leiterplatte zu entwerfen. Ein Test bei Fritzing ergab einen Preis von etwa 34€ für 3 Stück.

      

    Erst das Layout, dann Bestückungsseite und die Lötseite

    Und hier noch die Fritzing-Dateien zum selbermachen: Schrittmotor.zip

    Wo kann man eigentlich bei Fritzing die Leiterbahnbreite einstellen?

    Zusätzliche Option

    Falls jemand noch den I2C-Bus anschliessen möchte, SDA liegt an IO21 und SCL an IO22.

    Hier kann man hier noch ein 1602-LCDisplay anschliessen. Die entsprechende Software ist bereits vorbereitet,

    benötigt wird nur eine Anzeige, das I2C-Modul und ein zweikanaliger Levelshifter.

    Angezeigt wird allerdings nur die Stellung des Potis zwischen ganz langsam (1) und höchstmöglichen Geschwindigkeit(1000).

    Software

    Erstellt wurde die Firmware mit Hilfe der Arduino-IDE, wie man die ESP32 Umgebung einrichtet, wird woanders besser beschrieben.

    Beschreibung der Software

    Die Library "Wire.h" wird für den I2C-Bus gebraucht, die Lib "LiquidCrystal_I2C.h" zum Ansteuern der Anzeige.
    Darunter folgen die IOs (nicht die Pins) an dem die LEDs, Taster und der Motortreiber angeschlossen wird.
    Danach folgen eine Reihe globaler Variablen, global aus Geschwindigkeitsgründen. An folgenden Variablen kann gedreht werden:

    • (ms) Entprellzeit wird in den Interrupt-Routinen als Entprellzeit benutzt
    • (μs) mit RAMPE wird ein Zähler gestellt, der den Schrittmotor von einer niedrigen Drehzahl auf die Soll-Drehzahl beschleunigt
      • Kann bei massearmen Motoren entfallen. Wenn sich der Motor sich nicht bewegt und nur brummt kann man hier dran drehen
    • (μs) Delay_on stellt die Zeit, mit der der Step-Pin des TMC2100 minimal "HIGH" sein muss
      • Zu niedrige Werte bemerkt man hier wenn der Motor Schritte verliert und "ruppig" läuft
    • (μs) Delay_off stellt die Zeit, mit der der Step-Pin des TMC2100 minimal "LOW" sein muss
      • Zu niedrige Werte bemerkt man hier wenn der Motor Schritte verliert und "ruppig" läuft

    Ansonsten wird die Drehgeschwindigkeit nur durch "void loop()" bestimmt.
    In der "void loop()" ist nochmal eine Verriegelung vorgesehen weil es hier mehrmals vorgekommen ist die Variable left oder right
    trotz loslassen des Taster auf HIGH geblieben sind. Somit wäre der Motor einfach weitergelaufen.

    Die Anzeige wird nur während des Motorstillstands aktualisiert, jetzt ist es nur die Enstellung des Potis, im Bereich von 1 - 1000.
    Wenn man aber die 3 Zeilen unter "//Debug auf LCD" aktiviert, sieht man den gesamten "Delay_off" + "Rampe".
    Die Aktualisierung der Anzeige über den I2C-Bus braucht sehr viel Zeit und verzögert die Geschwindigkeit des Motors erheblich.
    Die Geschwindigkeit kann man aber regeln während der Motor läuft.

    Die anderen Zeilen unter "//Debug" sind für die serielle Konsole gedacht, sie wurde in der "void setup()" mit 115200 Baud voreingestellt.

    Fazit

    Die Ansteuerung eines Schrittmotors funktioniert, ist aber nicht der Renner.
    Für Prüfzwecke brauchbar wenn keine hohen Geschwindigkeiten gefordert werden.
    Der ESP32 ist hier einfach nicht schnell genug. Es ist aber durchaus möglich, das sich die Software noch optimieren läßt.
    Ärgerlich war das falsche Anschlussbild bei ReRap, das einen ESP32-Pico und ein TMC2100-Board den magischen Rauch aus der Schaltung freigelassen hat.

    MfG

    Jürgen

    Edit: Ich vergass die Quelle der Schrittmotoren: Und wieder nahm das jährliche Ritual unserer Firma seinen Lauf,

    Edit_2: Pläne ausgetauscht, Layout und Fritzing-Archiv hinzugefügt.

    Edit_3: Fehler in der Beschreibung korrigiert, der sich mit neuen Software eingeschlichen hatte.

  • eine über ein Poti regelbare Geschwindigkeit haben

    [Klugshicer ON]

    Ein Poti ist ein Stellglied also richtig wäre "eine über ein Poti stellbare Geschwindigkeit haben"

    regeln ist das vergleichen von Sollwert (Stellvorgabe) und Istwert (Rückführung).

    https://www.sbz-monteur.de/2013/08/22/wor…ern-und-regeln/

    [/Klugshicer OFF]

    trotzdem danke, ich nutze je gerade den ESP32 zur Ansteuerung von I2C und WS2812B, zur bidirektionalen I2C Umsetzung einer RTC an 5V nutze ich:

    https://www.mikrocontroller.net/attachment/231…_.wikipedia.PNG

    und weil es so bequem ist auch für die WS2812B

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ein Poti ist ein Stellglied also richtig wäre "eine über ein Poti stellbare Geschwindigkeit haben"

    Sehe ich anders.

    Zitat

    eine über ein Poti regelbare Geschwindigkeit

    bezieht sich IMHO auf die Geschwindigkeit, die geregelt werden soll, nicht auf das Poti, welches als Stellglied fungiert.

    :baeh2:

    Edit:

    Zitat

    Bei einem 12V Netzteil könnte der Motor zu wenig Drehmoment haben.

    Ich musste auch schon feststellen, dass die Schrittmotoren wenig Drehmoment haben, für mein Projekt benötige ich wohl ein selbsthemmendes Getriebe, falls jemand eine Quelle hat, bitte mir melden.

    Diese Schneckengetriebe sind relativ teuer:

    https://de.aliexpress.com/item/0-5-Modul…2930524746.html

  • Sehe ich anders.

    kannst aber zeige im Schaltplan den Ist-Wertaufnehmer?

    Da es den nicht gibt ist es nur eine Stellung und keine Regelung, es fehlt die Rückkopplung eines Istwertes und somit die Regelung.

    bezieht sich IMHO auf die Geschwindigkeit, die geregelt werden soll

    ach und wenn ich die Schrittmotorachse blockiere, wer soll da regeln, wo wird die Geschwindigkeit der Schrittmotorachse gemessen?

    Es ist so KEINE Regelung, das ist in der Regelungstechnik klar definiert.

    Wir können aber immer weiter über Stromspannung und Wi'e'derstände und Stromstärken in mAh diskutieren, nur wem nutzt das?

    ich schrieb ja: "[Klugshicer ON]"

    Es soll eine Hilfe sein um irgendwann richtige Begriffe zu verwenden denn nur wenn alle ein gemeinsames Sprachniveau finden klappt das besser mit der Verständigung.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • zur bidirektionalen I2C Umsetzung einer RTC an 5V nutze ich

    Die Bezugsquellen des Shifters befinden sich im oberen Bereich unter "Diverse Ideen", nicht jeder lötet die Teile selbst zusammen.

    In den Quellen finden sich zum Teil auch die Bauteilangaben. Vom Schaltplan sind beide gleich.

    für mein Projekt benötige ich wohl ein selbsthemmendes Getriebe

    Ich habe noch einen 24V Getriebemotor in der Krabbelkiste, kannst Du damit etwas anfangen?

    Er wurde mal aussortiert, weil eine Zugentlastung für das grüne Kabel abgebrochen ist. Aber wenn man nicht daran zieht ...

    Lt. Aufkleber wurde die Antriebswelle gekürzt und es gibt eine Fläche auf Welle.

    MfG

    Jürgen

  • Ein blockieren ist in der Theorie nicht vorgesehen

    gibt es in der Praxis sowie verlorene Schritte, deswegen ist eine Regelung immer mit Rückkopplung.

    Sag mal willst du den Thread unbedingt kaputtmachen?

    Was ist gegen eine gemeinsame Sprachregelung und Lernen für andere einzuwenden?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • regeln ist das vergleichen von Sollwert (Stellvorgabe) und Istwert (Rückführung).

    In diesem Fall bin ich der Dir noch fehlende Teil des Regelkreislaufes, denn ich entscheide wie schnell und in welche Richtung er läuft.

    [/Klugshice]

    Ich habe jetzt testweise einen anderen Schrittmotor angeschlossen, einen "Pacific scientific M21NRXC",

    aber damit wird die Stepperkarte sehr schnell sehr heiss. Lt. Datenblatt und Aufdruck will er 3.05A.

    Gibt es noch andere Treiberstufen, die sich ähnlich ansteuern lassen wie der TMC2100, die ein bißchen mehr Ampere vertragen?

    MfG

    Jürgen

    Edit: Frage eindeutiger formuliert

  • ziemlich teuer, ich habe die günstiger gesehen

    die alten L298 gehen ja auch, aber die sind ziemlich unmodern, neuere mit MOS sind effektiver, ich müsste suchen.

    Wer natürlich mit den Verlusten leben kann und den L298 kühlt und zusätzlich eine Strombegrenzung einbaut kann es leichter haben.

    Ich hatte meine Versuche immer am Labornetzeil, Phasentrom max machte die Strombegrenzung und wenn die Induktion zu hoch wurde konnte ich einfach die Spannung hochdrehen so das auch der Haltestrom nicht überschritten wurde.

    Höhres Tempo, höhere Gegenindunktion -> Strom sinkt wegen XL, Abhilfe Spannung hochdrehen, aber bei Stillstand, keine Gegeninduktion droht Stromüberschreitung deswegen Ikonst. Regelung.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • hast Du statt dessen mal über einen -> BigEasy <- Treiber nachgedacht?

    Hat auch nur 2A, max 2.5A. ist für meine Anwendung zuwenig.

    Ich habe hier einen Motor, der hat unipolar 2.48A und bipolar 3.50A.

    MfG

    Jürgen

  • Der evtl. ?

    Mit einem Pegelwandler könnte es funktioneren, aber nicht mehr vor Weihnachten.

    Hier schlägt in Kürze eine 480G SSD auf, ich will dann meinen Webserver auf einen RPi 3B+ migrieren.

    Der Webserver läuft noch auf einen RPi3B unter Jessie, SD-Karte und einer 500G USB-Platte.

    Meinen ersten Beitrag zu diesem Thema habe ich gerade upgedatet, den NAV-Switch habe ich durch eine Steckleiste ersetzt.

    Zusätzlich ist noch ein Layout hinzugekommen und die Fritzing-Datei als Zip-Archiv in den Beitrag eingefügt.

    MfG

    Jürgen

  • Ich habe jetzt testweise einen anderen Schrittmotor angeschlossen, einen "Pacific scientific M21NRXC",


    aber damit wird die Stepperkarte sehr schnell sehr heiss.

    Ich habe dem TMC jetzt einen Kühlkörper verpasst, damit hält sich die Temperatur in Grenzen.

    Allerdings ist das nicht der (Feigenblatt-)Kühlkörper, der zum aufkleben meist mitgeliefert wird,

    sondern eine Eigenkonstruktion.

    Und jetzt ist trotz 12V ordentlich Drehmoment dahinter.

    MfG

    Jürgen

  • Hier schlägt in Kürze eine 480G SSD auf, ich will dann meinen Webserver auf einen RPi 3B+ migrieren.

    Der Webserver läuft noch auf einen RPi3B unter Jessie, SD-Karte und einer 500G USB-Platte.

    ob das so eine gute Idee ist, ob nun SSD oder SD, Schreibcyclen halten alle weniger aus ein eine magn. Platte.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • ob das so eine gute Idee ist,

    Der Webserver ist nur für den internen Gebrauch.

    Er ist zwar (eingeschränkt) öffentlich zugänglich, aber die Adresse ist nicht weit verbreitet.

    Wenn eine Anfrage kommt, ist sie in der Regel über eine IP-Adresse. und dann war es ein Script.

    Derzeit liegen die Amis auf Platz 2 der Script-Kiddies, dicht gefolgt von China:

    Code
     #    Seiten     Anfragen     Dateien       Datenmenge     Land
     2  952  2,50%  984  0,18%   94  0,02%    6,77 MB   0,33%  USA
     3  880  2,31%  931  0,17%   52  0,01%    6,66 MB   0,33%  Volksrepublik China
     4  756  1,99%  803  0,15%   39  0,01%    5,76 MB   0,28%  Vereinigtes Königreich Großbritannien und Nordirland
     5  337  0,89%  358  0,07%   31  0,01%    2,50 MB   0,12%  Frankreich
     6  336  0,88%  352  0,07%   30  0,01%    2,45 MB   0,12%  Indien
     7  322  0,85%  342  0,06%    9  0,00%    2,50 MB   0,12%  Thailand
     8  281  0,74%  305  0,06%    3  0,00%    2,23 MB   0,11%  Hongkong
     9  203  0,53%  204  0,04%   72  0,02%  930,07 kB   0,05%  Russland
    10  147  0,39%  532  0,10%  490  0,12%  299,24 MB  14,75%  Deutschland

    Platz 1 belege ich.

    Zum eigentlichen Thread-Thema, ich habe jetzt einen NEMA17 Motor angeschlossen.

    In der 12V-Spannungsversorgung habe ich mal ein Ampermeter gehängt.

    Im Leelauf bei voller (hier möglichen) Geschwindigkeit habe ich 0.2A gemessen,

    bei Belastung etwa 0.8A, dann blieb der Motor stehen.

    Bei der kleinsten Geschwindigkeit etwa 1.7A, auch unter Last.

    Die Grundlast lag etwa bei 50mA, mit LCD und ohne den ESP32.

    MfG

    Jürgen

  • Servus Jürgen,

    naja ... was willst Du uns jetzt mit dem Vergleich zu einem NEMA 17 sagen?

    Der hat halt dann ein geringeres Drehmoment, eine geringere Drehzahl oder beides ...

    Wenn der für Dich ausreicht, dann würde ich den in Verbindung mit einem BigEasy-Treiber nehmen.

    //EDIT: vom BigEasy gibt's spottbillige Clones ... aber das hast Du nicht von mir ;)

    cu,

    -ds-

  • was willst Du uns jetzt mit dem Vergleich zu einem NEMA 17 sagen?

    Grenzen beim TMC2100 ausloten. Aber der NEMA17-Motor hat ein wesentlich höheres Drehmoment als der kleine Janome.

    Und ich hätte nicht gedacht, das der TMC den NEMA17 aushält.

    Und nebenbei, das ist mein erstes Arduino bzw. ESP32 Projekt, da man wird ja noch ein bißchen spielen dürfen.

    MfG

    Jürgen

    P.S.: Ich hatte noch 2 TMCs in Reserve

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!