TMC5240 antwortet nicht im Single Wire Uart

#7781092
Lesenswert?

Hallo zusammen,

ich versuche, den Schrittmotortreiber TMC5240 in Betrieb zu nehmen, stoße jedoch auf Schwierigkeiten und mir fehlen weitere Lösungsansätze.

Im Anhang findet ihr den Schaltplan, bei dem der TMC5240 mit unserem Microcontroller (ATSAMD21) verbunden ist. IC55 und IC58 sind nicht mehr bestückt. Aktuell sind die Widerstände R60 mit 1 kOhm und R59 mit 0 Ohm bestückt (entsprechend der Schaltung in der PDF "TMC5240-EVAL_V10 - Schematic Drawing.pdf").

Die UART-Nachricht, die vom Microcontroller gesendet wird, schaut für mich korrekt aus, und die CRC-Berechnung habe ich aus dem Datenblatt des TMC5240 übernommen. Das Oszi-Bild findet ihr im Anhang.

Die eingestellte Baudrate beträgt 512 kbit/s, mit 8 Datenbits, einem Stoppbit und ohne Paritätsbit. Die maximale Baudrate, die der TMC laut Datenblatt unterstützt, ist Clockfrequenz/16. Die interne Clock wird verwendet und läuft auf circa 12 MHz. Langsamere Baudraten habe ich ausprobiert, führten aber nicht zum Erfolg.

Das Problem ist, dass auf meiner Platine beide TMC5240-ICs nicht reagieren. Es erfolgt keine Rückmeldung, obwohl ich eine Antwort erwarte. Ich habe auch ein Eval-Board vom ATSAM mit einem TMC5240-BOB Eval-Board genauso verbunden wie im Schaltplan dargestellt, einschließlich der gleichen Widerstände. Auch bei diesem Aufbau erhalte ich keine Antwort.

Hat irgendwer eine Idee, wie ich weitermachen kann? Seht ihr einen Fehler im Schaltplan? Ist meine UART-Nachricht korrekt? Gibt es mögliche Stolpersteine, wie z.B. Timing-Probleme, Signalpegel oder zusätzliche Konfigurationen, die ich übersehen habe?

Ich freue mich über Ihre Unterstützung, da mir aktuell die Ideen ausgehen, wo der Fehler liegen könnte.

Vielen Dank für eure Hilfe!

Link zum Datenblatt: https://www.analog.com/media/en/technical-documentation/data-sheets/TMC5240_datasheet_Rev_0.pdf

Angehängte Dateien:
#7781190
Lesenswert?

Hi Frank,

SDI, SCK und CSN sind hart mit GND verbunden. SDO hängt in der Luft, ist aber glaube ich für die Adressierung in unserem Fall nicht relevant. Über den Pin können mehr als 8 TMC5240 angesteuert werden, was wir aber nicht machen. Ich habe gerade nochmal nachgeschaut und nicht gefunden, ob der irgendwie anzubinden ist, wenn er nicht verwendet wird.

Gruß

#7781256
Lesenswert?

Ich bin jetzt ein Stück weiter. Zwei Punkte:

  1. ich habe in einer Verzweilungsaktion alle Addressen ausprobiert. Das Eval-Board hat auf die Adresse 7 gehört. Im Datenblatt steht, dass die Pins einen Pull-Up besitzten. Wenn ich die Spannung an den Adresspins messe, dann messe ich aber an jedem Pin 0V. Das verstehe ich noch nicht.
  2. Das Evalboard hat erst reagiert, nachdem ich die Spannung für die Endstufe angelegt habe. Das war dann wohl mein Fehler, wobei ich es ehrlich gesagt nicht ganz nachvollziehen kann, warum ich die Arbeitsspannung brauche um mit dem Chip zu kommunizieren.

Zurück zu meiner ursprünglichen Platine: Auch hier hat ja die Adresse 0 nicht reagiert. Deswegen bin ich nochmal ähnlich vor gegangen. Beide Treiber kann ich jetzt ansprechen, allerdings mit den Adressen 3 und 4. Das ergibt für mich auch noch gar keinen Sinn.

Morgen werde ich eine neue Platine löten lassen um zu schauen, ob nicht etwas grundsätzlich schief gelaufen ist.

Gruß

#7781307
Lesenswert?

Sind das auf dem Hameg-Screenshot logische Pegel oder Spannungspegel?

Ich kenne das von früher aus den Modem-Zeiten noch so, dass eine UART auf der TTL-Seite low activ ist. Wenn das hier auch so ist und der Hameg Spannungen anzeigt, kann deine Sequenz nicht funktionieren.

Wulf

#7781521
Lesenswert?

Hi Wulf,

auf dem Bild sind die Spannungspegel der UART-Leitung erkennbar.

1
A sync nibble precedes each transmission to and from the TMC5240 and is embedded into the first transmitted byte, followed by an addressing byte. Each transmission allows a synchronization of the internal baud rate divider to the UART host clock. The actual baud rate is adapted and variations of the internal clock frequency are compensated. Thus, the baud rate can be freely chosen within the valid range. Each transmitted byte starts with a start bit (logic 0, low level on DIAG1/SW) and ends with a stop bit (logic 1, high level on DIAG1/SW). The bit time is calculated by measuring the time from the beginning of start bit (1 to 0 transition) to the end of the sync frame (1 to 0 transition from bit 2 to bit 3). All data is transmitted byte wise. The 32-bit data words are transmitted with the highest byte first.

Das ist die Stelle im Datenblatt, welche die Kommunikation beschreibt (Seite 26, 1. Absatz). Wenn ich keinen Denkfehler habe, dann sollte mein Bild auf dem Oszi dazu doch passen, oder?

Gruß

Moderator (Firma: Titel) Persönliche Seite #7781614
Lesenswert?

Marc P. schrieb:

Ich habe Pin 5 gegen Gnd gemessen.

Nur, weil es da bei Prototypen beim Lötprozess schon mal Probleme geben kann: der Pin 5 von der Stiftleiste ist tatsächlich verbunden mit dem Pin 12 vom TMC?

Ich messe sowas immer mit der Tastkopfspitze auf dem Pin. Und schon so manches Mal funktionierte die Schaltung erst dann, wenn ich mit dem Tastkopf den nicht richtig verlöteten Pin auf das Lötpad gedrückt habe...

#7781623
Lesenswert?

Marc P. schrieb:

Das ist die Stelle im Datenblatt, welche die Kommunikation beschreibt (Seite 26, 1. Absatz). Wenn ich keinen Denkfehler habe, dann sollte mein Bild auf dem Oszi dazu doch passen, oder?

Gruß

Ja du hast Recht, das passt. Ist mit der UART schon lange her, die Invertierung war auf der V.28-Seite der RS232 und nicht auf der TTL-Seite.

Das Sync und die Adresse müsste zu dem im Schaltplan passen. Es sei denn, dass schon eine 3 im NODEADDR Register steht. Sollte ja eigentlich auf 0 stehen, oder?

#7781628
Lesenswert?

Marc P. schrieb:

Zurück zu meiner ursprünglichen Platine: Auch hier hat ja die Adresse 0 nicht reagiert. Deswegen bin ich nochmal ähnlich vor gegangen. Beide Treiber kann ich jetzt ansprechen, allerdings mit den Adressen 3 und 4. Das ergibt für mich auch noch gar keinen Sinn.

Ich erhalte ja mittlerweile eine Antwort. Aber ich verstehe aktuell nicht, warum ich die Antworten erhalte, wenn ich bei den Adressen 3 und 4 anfrage (hierzu noch ein Hinweis: aktuell sind nur die Treiber mit den Adressen 0 und 1 bestückt). Die Adresspins liegen direkt auf GND bzw. 3V3, also kein Pullup dazwischen.

Ich hoffe, dass ich heute Nachmittag ein alternatives Board bekomme und eventuell die aktuellen Treiber fehlerhaft sind (zum Beispiel weil ich sie irgendwie kaputt gemacht habe).

Dein Tipp mit dem Tastkopf ist auf jeden Fall gut und ich werde ihn berücksichtigen. Ich prüfe am Nachmittag auch mal, ob die Adressierung eventuell mit deinem Tipp manipulierbar ist.

Danke schonmal.

#7782498
Lesenswert?

Hallo zusammen,

ich habe gerade eine neue Platine bekommen. Mit der funktioniert alles. Beide ICs hören auf die richtige Adresse.

Vielen Dank für eure Hilfe und tut mir Leid, dass das am Ende jetzt doch so ein komischer Fehler war. Ich habe keine Ahnung wie die Treiber beim ersten Mal kaputt gegangen sind.

Viele Grüße

#7794750
Lesenswert?

Habe meine Leiterplatten mit dem TMC2209 nun bestückt und in Betrieb genommen. Als der TMC über die UART nicht antworten wollte, habe ich nur kurz drüber nachgedacht - dank dieses Threads - und die Motorspannung angelegt.

Soweit alles gut, nur eine Frage: hast du die SW für die TMC-Ansteuerung selbst geschrieben oder nutzt du eine Lib? Wenn ja, welche?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren