Forum: Mikrocontroller und Digitale Elektronik TMC5240 antwortet nicht im Single Wire Uart


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marc P. (marc_p649)



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

von Björn M. (bjrn_m252)


Lesenswert?

Hallo Marc

wenn ich das richtig sehen sendest du dem TMC als erste 4 bits die folge 
0101
auf Seite 26 im Datenblatt steht allerdings das der für den Sync 1010 
erwartet.

Gruß Björn

von Marc P. (marc_p649)


Lesenswert?

Hey Björn,

danke für deine Antwort. Ich bin mir allerdings nicht sicher, ob ich sie 
richtig verstehe. Ich interpretiere das Signal als 1010. Das erste Bit 
(das in dem Bild low ist) müsste doch das Startbit sein?

Gruß

von Frank K. (fchk)


Lesenswert?

Ist denn die Node Address, die durch die Signale am SPI-Interface 
eingestellt wird, korrekt? CS, SCK und MOSI sollten auf GND, damit eine 
Node Address von 0 entsteht.

fchk

von Marc P. (marc_p649)


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ß

von Marc P. (marc_p649)


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ß

von Wulf D. (holler)


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

von Marc P. (marc_p649)


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ß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wulf D. schrieb:
> Sind das auf dem Hameg-Screenshot logische Pegel oder Spannungspegel?
Es sind offensichtlich Spannungspegel eines LVTTL-UART.

Marc P. schrieb:
> dann sollte mein Bild auf dem Oszi dazu doch passen, oder?
Nur zur Sicherheit: wo hast du da gemessen? Am µC oder am TMC?

von Marc P. (marc_p649)


Lesenswert?

Im Schaltplan "Schematic.pdf" gibt es auf Seite 3 einen Pinheader JP54. 
Ich habe Pin 5 gegen Gnd gemessen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

: Bearbeitet durch Moderator
von Ron-Hardy G. (ron-hardy)


Lesenswert?

IC58 Pin4 Y arbeitet doch voll GEGEN den 1Wire wenn der TMC sendet?

von Wulf D. (holler)


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ron-Hardy G. schrieb:
> IC58 Pin4 Y arbeitet doch voll GEGEN den 1Wire
Wie schon ganz weit oben

Marc P. schrieb:
>>>> IC55 und IC58 sind nicht mehr bestückt.

Davon abgesehen würde man eine solche Buskollision ganz leicht am 
"dubiosen Pegel" erkennen.

: Bearbeitet durch Moderator
von Marc P. (marc_p649)


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.

von Marc P. (marc_p649)


Lesenswert?

Wulf D. schrieb:
> 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?

So wie ich es verstehe ja.
Ich habe gestern das Adressregister des Chips, der auf die Adresse 3 
hört, ausgelesen und der Wert, den ich zurück erhalte, ist 0. :(

von Wulf D. (holler)


Lesenswert?

Bin auf die Lösung des Rätzels gespannt: werde demnächst einen TMC2209 
mit ganz ähnlichem Interface konfigurieren und hatte noch nie mit 
Schrittmotoren zu tun.
Erwarte meine Leiterplatten Anfang Dezember.

von Marc P. (marc_p649)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.