TMC222 Statusantwort ist immer 0xC1 (193)

TMC222 Statusantwort ist immer 0xC1 (193)

Postby schelle » 14 Jun 2012, 11:16

Hallo,

ich habe ein kleines Programm geschrieben, um einen Schrittmotor über einen TMC222 anzusteuern. Ich verwende die C-Control von Conrad und programmiere in C. Das Schrittmotormodul ist über einen I2C-Bus an das Application Board der C-Control angeschlossen.

Frage ich Status Flags (GetFullStatus1), oder die aktuelle bzw. Zielposition (GetFullStatus2) ab, ist die Antwort stets für alle Bytes 193, was "zufällig" der Ausleseadresse des TMC222 entspricht.

Der erste Befehl, den ich nach der Initialisierung der I2C-Schnittstelle und dem Setzen der benötigten Pullup-Widerstände und der Festlegung der Motorparameter eingebe, ist GetFullStatus1:
Code: Select all
//Sequenz lt. TMC222-Datenblatt S.27 (Tab.19 & 20)
    //muss abgefragt werden, um Chip zu initialisieren
    I2C_Start();
    I2C_Write(TMC222);             //TMC222 wurde vorher als 192 definiert (= Default-Adresse des Chips)
    I2C_Write(0x81);
    I2C_Stop();

    I2C_Start();
    I2C_Write(TMC222+1);
    DATA1 = I2C_Read_ACK();
    DATA2 = I2C_Read_ACK();
    DATA3 = I2C_Read_ACK();
    DATA4 = I2C_Read_ACK();
    DATA5 = I2C_Read_ACK();
    DATA6 = I2C_Read_ACK();
    DATA7 = I2C_Read_ACK();
    DATA8 = I2C_Read_NACK();
    I2C_Stop();


Die Adresse des TCM222 wurde nicht verändert (192). HW ist auf GND gesetzt.

Größere Positionieraufgaben sind somit meines Erachtens nach nicht möglich. Die aktuelle Position kann zu keinem Zeitpunkt ausgelesen werden und somit auch nicht mit der Zielposition verglichen werden.
Positionieranweisungen im kleinen Rahmen (bis ca. 6.500 Schritte) funktionieren, in beide Richtungen, allerdings entspricht der Drehwinkel nicht dem erwarteten. Lautet die Anweisung "mach 400 Schritte" (entspr. 360° im Halbschrittmodus), ist das Resultat etwa eine 1/8-Drehung (ca. 45 Schritte).

Da ich nur einen einzigen Chip betreibe, habe ich auch schon mit 0x00 und 0x01 als Schreibe- und Leseadresse versucht. Das Resultat ist im Prinzip das gleiche, die Statusausgabe ist dann analog auf allen Bytes 1.

Hat jemand eine Idee für mich? Ist an meinem Code ein Fehler?
schelle
User
User
 
Posts: 4
Joined: 14 Jun 2012, 09:52

Re: TMC222 Statusantwort ist immer 0xC1 (193)

Postby schelle » 20 Jun 2012, 09:52

Update:

Die Statusabfrage nach einem Befehl gibt stets ein "quittiert mit NACK" zurück.
Dies geschieht sowohl nach der Adressierung des Chips zum Schreiben oder Lesen, als auch nach dem Befehl I2C_Read_ACK();

Ist euch das schon mal untergekommen, bzw hat jemand eine Idee, woran es liegen könnte?
schelle
User
User
 
Posts: 4
Joined: 14 Jun 2012, 09:52

Re: TMC222 Statusantwort ist immer 0xC1 (193)

Postby Dr.LarsLarsson (TRINAMIC) » 20 Jun 2012, 12:42

Mit GetFullStatus2 kann man die aktuelle Position ActPos auslesen. Ich vermute, dass die Kommunikation noch nicht richtig funktioniert. Die testweise Kommunikation mit Adressen 0x00 und 0x01 mit nur einem TMC222 ist gut, um einen Freiheitsgrad zu reduzieren. Das Zwei-Draht-Interface des TMC222 funktioniert nur bis 350 kbps. Welche Übertragungsrate verwenden Sie?

Schrittangaben beim TMC222 sind immer 1/16 Schritte. Eine Voll Umdrehung mit 200 Vollschritten entspricht daher 200 * 16 = 3200 (Mikro-)Schritten.
User avatar
Dr.LarsLarsson (TRINAMIC)
Site Admin
 
Posts: 323
Joined: 21 Jul 2006, 14:46

Re: TMC222 Statusantwort ist immer 0xC1 (193)

Postby schelle » 20 Jun 2012, 13:27

Hallo,

dass die Schrittangaben immer in 1/16 Schritten gegeben werden, wusste ich nicht. Das löst ja schon mal einen Teil des Problems.

Der andere, weitaus wichtigere Teil bleibt ungelöst:
GetFullStatus2 sollte die ActPos sowie auch die TARGETPOS und die SecPos ausgeben, tut es aber nicht. Der Ausgabewert ist leider, wie oben beschrieben, immer identisch zur Leseadresse.
Bei der Initialisierung lege ich eine Übertragungsrate von 100kHz fest, daran kann es also nicht liegen.

Wie kommt es, dass alle meine Befehle mit NACK quittiert werden?
Weißt das eher auf einen Hardware- oder einen Software-Fehler hin? (falls man das pauschal sagen kann)

Danke für Ihre Bemühungen.
schelle
User
User
 
Posts: 4
Joined: 14 Jun 2012, 09:52

Re: TMC222 Statusantwort ist immer 0xC1 (193)

Postby Dr.LarsLarsson (TRINAMIC) » 21 Jun 2012, 12:16

Mit 100kHz sind sie auf der sicheren Seite. Könnten Sie mit einem Digital-Scope einen Screenshot von der Kommunikation aufnehmen?
User avatar
Dr.LarsLarsson (TRINAMIC)
Site Admin
 
Posts: 323
Joined: 21 Jul 2006, 14:46

Re: TMC222 Statusantwort ist immer 0xC1 (193)

Postby schelle » 22 Jun 2012, 14:45

Gern.
Es folgen 3 ausgewählte - hoffentlich charakteristische - Beispiele.
Die gelbe Kurve gibt dabei das Signal für SCL aus. Die blaue Kurve steht für SDA.

Schreibe-Adresse (0x00):
Image

Der Befehl GetFullStatus1 (0x81):
Image

Auslese-Adresse (0x01):
Image

Alle Zwischenbefehle, wie das Auslesen der einzelnen Bytes, erzeugten kein Signal auf dem Oszilloskop.
schelle
User
User
 
Posts: 4
Joined: 14 Jun 2012, 09:52

Re: TMC222 Statusantwort ist immer 0xC1 (193)

Postby TRINAMIC_BD » 28 Aug 2012, 13:02

Hallo, ist zwischenzeitlich geklärt?
User avatar
TRINAMIC_BD
Site Admin
 
Posts: 2450
Joined: 25 Jul 2006, 12:21
Location: Hamburg (Germany)


Return to TMC222 / TMC223 / TMC211

Who is online

Users browsing this forum: No registered users and 1 guest

cron