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