[Tutorial] ESP32 und ein Schrittmotor

  • 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:

    • Ein ESP32 (Fast egal, Hauptsache er läßt sich programmieren)
    • Ein Treiberbaustein auf Basis TMC2100
    • Schrittmotor (hier: JANOME 4SQ-120B)
    • 5 LEDs
    • 5 Widerstände 1kΩ
    • 2 Widerstände 10kΩ
    • 1 Elko 100µF
    • 1 Poti (1kΩ)
    • 1 Taster 2*ein mit Mittelstellung
    • 1 Step-Down-Spannungsregler für 3.3V des ESP32
    • 1 12V oder 24V Schaltnetzteil
      • Bei einem 12V Netzteil könnte der Motor zu wenig Drehmoment haben.

    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
    1. Rot + 3.3V
    2. Cyan + 12V
    3. Blau GND
    4. Schwarz Motorleitungen
    5. Grün Taster und Mittelanzapfung des Potis
    6. Violet Drehrichtungsanzeige
    7. 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.

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


    Edited 3 times, last by Jürgen Böhm ().

  • 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/201…schen-steuern-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.ne…gelwandler_.wikipedia.PNG


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

    lasst die PIs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr

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

    Sehe ich anders.

    Quote

    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:

    Quote

    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…be-Welle/32930524746.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 am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr

  • 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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


  • 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 am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr

  • 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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


    Edited once, last by Jürgen Böhm ().

  • 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 am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr

  • 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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


  • 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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


  • 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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


  • 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 am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr

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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar


  • 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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wusste das nicht, und hat es dann einfach gemacht.

    Meine Projekte

    Avatar