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

Schrittmotor Impulserzeug. / Timer ISR zu langsam Kategorie: CC-Pro Unit & Appl.Board (von Jürgen - 15.12.2008 9:27)
Ich nutze:
CC-Pro 32 Application Board
Hallo Forenuser,
 
ich benötige erneut eure Hilfe, hatte den Beitrag schon mal gepostet aber keine zufriedenstellende
Antwort erhalten (Ulli: vielen Dank für Deinen Tipp: der Nachteil an PWM ich kann die Pulse nicht
genau zählen was aber Bedingung ist oder ?????)

Ich möchte eine Schrittmotoransteuerung mit dem CControl realisieren. Die Endstufenkarte des
Steppers verlangt ein Step/Direction Signal. Mein Frage ist dabei wie kann ich solche Steps
erzeugen die im Bereich von  0..25kHz.Bedingung ist das ich genau weis wieviele Pulse ausgegeben
wurden= Weginfo.  
- Ist es sinnvoll das mit dem Timer zu realisieren oder mit Absdelay?
- Gibt es eventuell eine Lib oder Funktion dafür?
- Mein Beispiel von unten funktioniert einwandfrei, ist nur viel zu langsam. Egal welchen Preteiler /
  Zählkonstante ich verwende, diese Routine mit ISR kommt nicht über 800Hz!
- Gibt es eine andere Lösung?
- Kann ich diese ISR mit Timer mit der neuen IDE in Assembler programmieren und ist sie dann
  schneller? Gibt es evtl. schon Assembler Doku mit Beispielen für die neue IDE??

Schon mal vielen Dank für die Hilfe
Jürgen
 
Beispiel:
#define AnzSteps = 2000                   // Anz.Steps bis Schleife abbricht
byte busy;                                  // globale Variablendeklaration
word stepcount;                             // zählt die anzahl der perioden = steps

void Timer0_ISR(void)
{
    busy=0;
    //Timer_T0Stop(); //das bring nichts, laut beispiel!?
    Irq_GetCount(INT_TIM0COMP);
}

void main(void)
{
    stepcount=0;
    Port_DataDirBit(PORT_LED1,PORT_OUT);     // PORT für Ausgabe vorbereiten
    Irq_SetVect(INT_TIM0COMP,Timer0_ISR);   // Interrupt Service Routine definieren
    Port_DataDirBit(PORT_LED2,PORT_OUT);    // Ausgabe vorbereiten
    Port_WriteBit(PORT_LED2,PORT_ON);       // Ausgang Led2 einschalten

    while (stepcount     {
        Timer_T0Time(150,PS0_8);
        Port_WriteBit(PORT_LED1,0);          // Ausgang auf 0 setzen
        busy=1;
        while (busy);
        Timer_T0Time(150,PS0_8);
        Port_WriteBit(PORT_LED1,1);          // Ausgang auf 1 setzen
        busy=1;
        while (busy);
        stepcount++;
    }
    Port_WriteBit(PORT_LED2,PORT_OFF);      // Ausgang LED2 ausschalten
}



    Antwort schreiben


Antworten:

Re: Schrittmotor Impulserzeug. / Timer ISR zu langsam (von Jo - 15.12.2008 17:44)