Stepper driver met ESP32 (TMC5160 + DM542?)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Fietstasss
  • Registratie: Maart 2010
  • Laatst online: 14-05 19:15
Hi allen!

Ik ben bezig met een project om een stappenmotor via Artnet/DMX aan te sturen.
Hiertoe gebruik ik een WT32-ETH01 als microcontroller, en een DM542 als stepper-driver (komt een behoorlijke NEMA23 of misschien zelfs NEMA34 aan te hangen).

Nu loop ik tegen het probleem aan dat de ESP niet zo lekker gaat op het afhandelen van allerlei taken en ook nog consistente pulsen genereren.
Om die reden ben 'k van plan de pulsen extern te laten genereren, en de ESP alleen commando's te laten sturen.

Gaat 't mogelijk zijn om een TMC5160T te gebruiken om dit te regelen, en deze dan vervolgens als input voor een DM542 te gebruiken (step/dir).

Alvast super bedankt!

Acties:
  • 0 Henk 'm!

  • jbhc
  • Registratie: Juli 2007
  • Laatst online: 13-05 18:11
Een TMC moet je ook gewoon aansturen. Het is niet alsof je Gcode naar zo'n driver toe stuurt.

Dit is denk ik de verreweg meest gebruikte driver voor de TMC's:

https://github.com/teemuatlut/TMCStepper

Acties:
  • 0 Henk 'm!

  • Fietstasss
  • Registratie: Maart 2010
  • Laatst online: 14-05 19:15
Dat begrijp ik, maar als ik daar commandos heen kan sturen als:
Ga naar positie X
Stel Max speed in op Y
Gebruik acceleratie Z
Ga continuous Clockwise runnen

En als die TMC dan zelf de pulses genereert, ben 'k van 't probleem van live pulsen genereren (en bijkomende timing issues in combinatie met andere taken) op de ESP af.

Acties:
  • 0 Henk 'm!

  • AlphaRomeo
  • Registratie: Maart 2007
  • Laatst online: 19:15

AlphaRomeo

FP PowerMod
Een ESP32 heeft twee cores. Je kunt de stepper aansturing verplaatsen naar een eigen taak.

Acties:
  • 0 Henk 'm!

  • Fietstasss
  • Registratie: Maart 2010
  • Laatst online: 14-05 19:15
Hi, dit heb ik geprobeerd, echter maakt dit het nog niet vlekkeloos. Vandaar de reden om de TMC5160 te gebruiken.

Heb ook een topic hierover op GitHub gemaakt, is iemand in de gelegenheid om te kijken of ik ergens iets mis, om de motor aan de gang te krijgen?
https://github.com/teemuatlut/TMCStepper/issues/310

Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Fietstasss schreef op dinsdag 29 april 2025 @ 18:53:
Hi, dit heb ik geprobeerd, echter maakt dit het nog niet vlekkeloos. Vandaar de reden om de TMC5160 te gebruiken.

Heb ook een topic hierover op GitHub gemaakt, is iemand in de gelegenheid om te kijken of ik ergens iets mis, om de motor aan de gang te krijgen?
https://github.com/teemuatlut/TMCStepper/issues/310
Wat heb je zelf al gedaan? ik wil best even meekijken, maar iets meer inzet dan "jo hier is mijn code, go fix en dank je wel afhaalchinees" wordt gewaardeerd ;)

Ik heb elektra-inbouwmaterialen over? Kopen? Zie: hier


Acties:
  • 0 Henk 'm!

  • Fietstasss
  • Registratie: Maart 2010
  • Laatst online: 14-05 19:15
Boudewijn schreef op dinsdag 29 april 2025 @ 19:02:
[...]

Wat heb je zelf al gedaan? ik wil best even meekijken, maar iets meer inzet dan "jo hier is mijn code, go fix en dank je wel afhaalchinees" wordt gewaardeerd ;)
Hi Boudewijn,
Terecht punt, zeker.
Heb inmiddels al erg veel geprobeerd.

Zo heb 'k verschillende codes gebruikt om de TMC aan 't aandrijven te krijgen, vooralsnog allemaal zonder ander resultaat dan hetgeen beschreven.

Heb ook geprobeerd de TMC in step/dir mode te gebruiken, hiermee ging de motor wél aan het draaien. Dat wil zeggen, het power-stage gedeelte lijkt werkend (desalniettemin komen er morgen of overmorgen nog een aantal nieuwe TMC5160T Plus modules binnen om hardware defecten uit te sluiten).

De TMC blijft errors geven in de serial-readout, wanneer deze als motion-controller gebruikt wordt.
Voornamelijk de T157 error (ook als
code:
1
driver.ot()
'false' teruggeeft).
Hiertoe heb 'k geprobeerd de driver te resetten in loop, met
code:
1
writeRegister(0x01, 0b111)
.

Ook geprobeerd CLK naar GND te trekken, of juist niet aan te sluiten, maar al met al nog niets verder te komen.
Via de feedback (via serial monitor) lijkt het er op dat er iets niet in gereedheid is om te starten met motion generen, maar ik kan de vinger er niet op gelegd worden wat dit is.
Ook grote vriend ChatGPT heeft al menig uurtje met me meegekeken, maar helaas dus nog niets verder gekomen.

Zou super zijn als je met me mee kunt kijken, zodat dit object toch nog kan gaan draaien.

Acties:
  • 0 Henk 'm!

  • skimine
  • Registratie: Januari 2016
  • Laatst online: 19:35
Is er een reden dat je niet de standaard SPI-pins hebt gebruikt? Zie: https://randomnerdtutoria...no/#esp32-spi-peripherals Geeft mogelijk niet gelijk de verklaring voor je problemen, maar vaak is dat wel een goede start omdat die sowieso werken. Voor CS heb je nu GPIO2 gebruikt. Vaak zit hier de interne LED aan vast, dit kan nog wel eens problemen geven.

Hieronder de code uit je GitHub-Issue:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <TMCStepper.h>

#define R_SENSE 0.075f
#define TMC_CS 2
#define TMC_MOSI 4
#define TMC_MISO 12
#define TMC_SCK 15

TMC5160Stepper driver = TMC5160Stepper(TMC_CS, R_SENSE, TMC_MOSI, TMC_MISO, TMC_SCK);

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("\nInitializing TMC5160 internal motion mode...");

  pinMode(TMC_CS, OUTPUT);
  pinMode(MISO, INPUT_PULLUP);
  SPI.begin();

  driver.begin();
  driver.toff(3);
  driver.blank_time(24);
  driver.rms_current(600);
  driver.microsteps(0);
  driver.en_pwm_mode(false);
  driver.pwm_autoscale(true);

  // Use internal motion
  driver.GCONF(driver.GCONF() | (1UL << 5)); // internal_step_mode = 1
  driver.RAMPMODE(2);  // velocity mode (continuous)
  driver.XACTUAL(0);
  driver.VMAX(10000);  // Positive for one direction, negative for the other

  Serial.println("Driver configured for continuous rotation.");
}

void loop() {
  static uint32_t lastPrint = 0;
  if (millis() - lastPrint > 1000) {
    lastPrint = millis();

    uint32_t drv = driver.DRV_STATUS();
    Serial.print("DRV_STATUS: 0x"); Serial.println(drv, HEX);
    Serial.print("Driver.ot: "); Serial.println(driver.ot());
    Serial.print("SG_RESULT: "); Serial.println((drv >> 22) & 0x3FF);
    Serial.print("CS_ACTUAL: "); Serial.println((drv >> 15) & 0x1F);

    if (drv & (1UL << 2)) Serial.println("CSACTIVE: Chopper active");
    else                  Serial.println("CSACTIVE: Chopper off");

    if (drv & (1UL << 20)) Serial.println("FSACTIVE: Driver moving");
    else                   Serial.println("FSACTIVE: Driver inactive");

    if (drv & (1UL << 0)) Serial.println("S2VSB: Short to supply B");
    if (drv & (1UL << 1)) Serial.println("S2VSA: Short to supply A");
    if (drv & (1UL << 3)) Serial.println("T157: >157C - Shutdown!");
    if (drv & (1UL << 11)) Serial.println("OT: Overtemp shutdown");
    if (drv & (1UL << 12)) Serial.println("OTPW: Overtemp warning");

    
    Serial.println("----");
  }
}


Op regel 16/17 snap ik niet zo goed wat je doet, MISO is nergens gedefinieerd. Verder hoef je als het goed is zelf niks te configureren aan de pinmodes van SPI-pins. SPI.begin() regelt dat als het goed is zelf.

Ben bang dat dit je problemen niet compleet op gaat lossen, maar het is het proberen waard ;)

Edit:
Ben verder ook wel benieuwd wat je uiteindelijk gaat maken. Stappenmotor + DMX klinkt mij als een vet project :9

Acties:
  • 0 Henk 'm!

  • Fietstasss
  • Registratie: Maart 2010
  • Laatst online: 14-05 19:15
Thanks voor de input! Ga 'k morgen gelijk even proberen!

Wordt uiteindelijk een deco-object voor een evenementje wat we organiseren. Gaat via een vertraging een soort van lichtgewicht rad mee draaien in een podium'pje.
Via positie-control kan 'ie dan mooi 'recht' of op andere specifieke posities gezet worden, en via speed/continuos-control kan 'ie dan fijn continue ronddraaien, met specifieke snelheden, acceleraties, etc.
Evenementje is wel al over circa anderhalve week, dus het wordt wat krap om 't nog allemaal af te krijgen met dergelijke 'issues'.
Gaat dan uiteindelijk via de licht-technicus bediend worden.

Overigens wel zojuist bevestigd gekregen dat de nieuwe drivers morgen binnenkomen.
Pagina: 1