Forum: Mikrocontroller und Digitale Elektronik TMC222 auslesen


von Jens (Gast)


Lesenswert?

Hallo ihr klugen Köpfe da draußen,
ich versuche mich gerade in der Ansteuerung eines TMC222. Mein Motor 
läuft auch soweit, doch nun versuche ich die aktuelle Position des 
Motors herauszulesen.
Hintergrund des ganzen ist, dass ich gerne wüsste wann mein Motor sich 
an einer bestimmten Position befindet um davon abhängig zu reagieren.
Nun stell ich mich leider ein wenig unbeholfen an.
Ich hab ein Beispielprogramm aus dem Netz verwendet und die Funktion für 
GetFullStatus2 (dort befindet sich laut datenblatt die aktuelle 
Position) sieht wie folgt aus:
1
int GetFullStatus2(int *TargetPosition, int *SecurePosition)
2
{
3
  while(TWIInUse);              //Wait until TWI is free
4
5
  //Send GetFullStatus2 command (0xfc) to the TMC222
6
  TWIMasterSendBuffer[0]=TWI_ADDR;  //Address byte
7
  TWIMasterSendBuffer[1]=0xfc;  //Command byte for GetFullStatus2
8
  TWIMasterSendCount=2;
9
  TWIInUse=TRUE;
10
  TWCR=0xA5;                    //start TWI communication
11
  while(TWIInUse);              //and wait until done.
12
13
  //Read back 8 bytes from the TMC222
14
  TWIMasterSendBuffer[0]=TWI_ADDR|0x01;  //Address byte (with read bit set)
15
  TWIMasterReceiveCount=8;      //8 bytes are to be read
16
  TWIInUse=TRUE;
17
  TWCR=0xA5;                    //Start TWI communication
18
  while(TWIInUse);              //and wait until done.
19
20
  //Return the position values
21
  if(TargetPosition!=NULL) *TargetPosition=(TWIMasterReceiveBuffer[3]<<8) | TWIMasterReceiveBuffer[4];
22
  if(SecurePosition!=NULL) *SecurePosition=((TWIMasterReceiveBuffer[6] & 0x06)<<8) | TWIMasterReceiveBuffer[5];
23
  return (TWIMasterReceiveBuffer[1]<<8) | TWIMasterReceiveBuffer[2];
24
}

Kann mir jemand helfen, wie ich nun die aktuelle Position auslesen kann?

Ich danke euch

von Azan (Gast)


Lesenswert?

Hallo Jens !
Ich habe auch Problem mit der Steuerung von TMC222. Ich benütze ATmega88 
und seit 10 Tagen kann nicht das Motor zum Laufen bringen. Du sagtest, 
dass bei dir es (Motor) läuft. Bitte stelle doch den ganzen Quellcode 
als Anhangdatei!

Danke Azan

von ... (Gast)


Lesenswert?

Jens schrieb:
> Kann mir jemand helfen, wie ich nun die aktuelle Position auslesen kann?

Aem, indem Du genau die von Dir gepostete Funktion aufrufst? Die liefert 
Dir doch die aktuelle Position zurück.

PS: Wenn man schon fremden Code benutzt sollte man auch die Kommentare 
darin lesen.
1
/*****************************************************************************
2
   Function: GetFullStatus2()
3
   Parameters: *TargetPosition: Pointer to variable for the target position
4
                                or NULL.
5
              *SecurePosition: Pointer to variable for the secure position
6
                               or NULL.
7
8
   Return value: actual position
9
10
   Purpose: Read all TMC222 position registers (using the GetFullStatus2 command).
11
            NULL can be used for values that are not needed.
12
******************************************************************************/
Insbesondere die Zeile, die mit "Return value:" anfängt.

Der Vollständigkeit halber hier auch noch der Link zum kompletten 
Originalcode:
http://www.trinamic.com/tmc/media/Downloads/integrated_circuits/Tmc222/Application_notes/TMC222_Lib_AVR.zip

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.