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?
