Re: TMC 222 an Ministation Kategorie: Sonstige Hardware (von Florian - 16.06.2011 18:57) | ||
Als Antwort auf Re: TMC 222 an Ministation von UlliS - 16.06.2011 11:48 | ||
| ||
> > Hallo zusammen, > > > > hab die Ministation und am I2C Bus einen TMC222 Controller mit Schrittmotor hängen. Leider bewegt > > sich nichts. > > > > Hardware seitig: > > > > - Spannungsversorgung TMC 222 mit 15 V über Labornetzgerät > > - OA1/OA2 OB1/OB2 und U+ und GND sind angeschlossen > > - die rote LED auf dem Board leuchtet (Was bedeutet das Leuchten Fehler oder Spannungsversorgung?) > > - I2C Bus habe ich SDA/SCL +/ GND an der Ministation angeschlossen und über den 6 poligen Stecker > > am TMC 222 gesteckt > > - Pullups sind meiner Meinung nach aktiviert JP1 & JP2 nach links gesteckt > > > > Software seitig: > > > > - Hab das Ministation Programm von dieser Homepage verwendet > > - mit Einstellung MEGA 32 kompiliert > > - Irun/Ihold auf 0xFF probeweise gesetzt um den Strom hochzusetzen > > - IDE ist die aktuellste > > > > Debug > > > > - die DATA Blöcke sind alle mit 193 (Dez) befüllt?? > > > > Was mache ich falsch - kann mir jemand Tipps geben was noch zu untersuchen oder zu tun ist? > > > > Viele Grü�e > > > > Florian > > Hallo, > > hast Du die LCD Routinen entfern? > Wenn nein, diese bitte entfernen bei der Mini-Station. > > Grü�e Ulli Hallo Ulli, die LCD Routinen sind schon entfernt - hatte ich vergessen zu schreiben hier noch kurz das Programm - ist denke ich von Dir? //Variable Declaration word ACTPOS, TARGETPOS, SECPOS, COUNTER, PosAct; byte ACTPOSH, ACTPOSL, TARGETPOSH, TARGETPOSL, SECPOSH, SECPOSL, CONFIG; byte DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7, DATA8, COMMAND; //TMC222 General Call Adress #define TMC222 0xC0 void main(void) { //I²C-INIT I2C_Init(I2C_100kHz); //I²C Bit Rate: 100 kHz //----------- POWER ON MESSAGE ------------------------ INIT_MOTOR(); RESET_POSITION(); S1REQUEST(); AbsDelay(2000); S2REQUEST(); //----------------------------------------------------- // START MAIN Loop //----------------------------------------------------- do { TARGETPOS = 0x2710; //Dez. 10.000 Steps //---------------- RUN STEPPER ------------------------ if (PosAct == TARGETPOS) { TARGETPOS=0x00; } else TARGETPOS = TARGETPOS; AbsDelay(2500); GOTO_TARGET(); RESET_POSITION(); S1REQUEST(); //---------- CHECK For TARGET REACHED ----------------- LP1: S2REQUEST(); if (PosAct != TARGETPOS) goto LP1; } while (1); } //----------------------------------------------------- // MOTOR PARAMETER SETTINGS //----------------------------------------------------- void INIT_MOTOR(void) { I2C_Start(); //Show Datasheet To TMC222 Page 34 (6.8.9) I2C_Write(TMC222); I2C_Write(0x89); //&H89 Sets Motor Parameters I2C_Write(0xFF); //N/A I2C_Write(0xFF); //N/A I2C_Write(0xFF); //Irun & Ihold | Bit0 To Bit3 = Ihold // Bit4 To Bit7 = Irun I2C_Write(0x10); //Vmax & Vmin | Bit0 To Bit3 = Vmin // Bit4 To Bit7 = Vmax I2C_Write(0x10); //Status | 10 = right // 0 = left // Bit0 To Bit3 = ACC // Bit4 = Shaft // Bit5 To Bit7 = SecPos I2C_Write(0x00); //SecurePos I2C_Write(0xE); //Step Mode | Bit2 To Bit3 = StepMode // Bit4 = AccShape I2C_Stop(); } //----------------------------------------------------- // RESET POSITION //----------------------------------------------------- void RESET_POSITION(void) { COMMAND=0x86; PUTCOMMAND(); } //----------------------------------------------------- // HARD STOP //----------------------------------------------------- void HARD_STOP(void) { COMMAND=0x84; PUTCOMMAND(); } //----------------------------------------------------- // DRIVE To SECURE POSITION //----------------------------------------------------- void GOTO_SECURE(void) { COMMAND=0x84; PUTCOMMAND(); } //----------------------------------------------------- // DRIVE To TARGET //----------------------------------------------------- void GOTO_TARGET(void) { //high And low Byte (Hex div To 4Bit) TARGETPOSH = TARGETPOS / 0x100; TARGETPOSL = TARGETPOS %0x100; I2C_Start(); I2C_Write(TMC222); I2C_Write(0x8B); I2C_Write(0xFF); I2C_Write(0xFF); I2C_Write(TARGETPOSH); I2C_Write(TARGETPOSL); I2C_Stop(); } //----------------------------------------------------- // STATUS S1 REQUEST //----------------------------------------------------- void S1REQUEST(void) { COMMAND=0x81; GETSTAT(); } //----------------------------------------------------- // STATUS S2 REQUEST //----------------------------------------------------- void S2REQUEST(void) { COMMAND=0xFC; GETSTAT(); ACTPOSH=DATA2; ACTPOSL=DATA3; } //----------------------------------------------------- // READ STATUS //----------------------------------------------------- void GETSTAT(void) { I2C_Start(); I2C_Write(TMC222); I2C_Write(COMMAND); 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(); } //----------------------------------------------------- // SEND COMMAND To TMC222 //----------------------------------------------------- void PUTCOMMAND(void) { I2C_Start(); I2C_Write(TMC222); I2C_Write(COMMAND); I2C_Stop(); } | ||
Antwort schreiben Antworten: Re: TMC 222 an Ministation (von UlliS - 17.06.2011 13:47) Re: TMC 222 an Ministation (von Florian - 17.06.2011 20:33) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum