Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > 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)