Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: unerwünschter Pilgerschritt Kategorie: Programmierung (von Matthias Koch - 8.12.2004 21:11)
Als Antwort auf unerwünschter Pilgerschritt von Stefan - 7.12.2004 17:08
Ich nutze:
C164CI-ControllerBoard, OSOPT_V2
> Hallo Leute,
>
> meine C-Control wird als Impulsgeber fĂĽr ein Schrittmotorenapplikation eingesetzt.
> Die Impulse werden über den Zählereingang erfasst.
> Der Motor soll eine vorgegebene Schrittzahl in die eine Richtung laufen unnd dann die gleich
> Schrittzahl in die entgegengesetzte Richtung.
> Leider zeigt sich so etwas wie eine Art Pilgerschritt - will heissen die eine Richtung wird etwas
> mehr bevorzugt, als die andere.
>
> Wie kann ich die Steuerung (Programm) dazu bringen, links wie rechts gleich weit "zu laufen" ?
>
> Die Externe Anzeige zeigt, soweit ich sehe, keine Abweichung.
>
> Hier der Quellcode:
>
>
> /********************************
>     Port8.c2
>     Interrupt-Pulszählung
>     Eingänge P1H.0 und P1H.1
>    
>     richtung: r
>     schrittzahl: sr
> ********************************/
>
> //------------
>   thread main
> //------------
> {
>   long z1;
>   int r,sr,p,EndEL;
>       r=0;                                 //Drehrichtung links
>       p=2;      // ist port 2
>       sr=300;  // schrittzahl
>       plm.settimebase(0,plm.BASE_400);
>       plm.setmode(0,0);
>       plm.setperiod (0,100000);
>       plm.out (0,10);
>       pcflcd.setpcf(1);// I2C LCD-Anzeige adressieren
>       pcflcd.init();
>       sleep 35;
>       pcflcd.clear();
>       pcflcd.setLight(1);         //LCD-Beleuchtung: 0=AUS, 1=EIN
>      
>   loop
>     {
>       EndEL =(ports.get(9) and 1);
>       if EndEL == 0 z1=0;         //Näh.Schalter stellt Zähler auf Null
>       if (z1<=sr) & (r==0) z1 = z1 + ports.getcount (p);
>         else r=1;
>         ports.set(6,r);      //Ausgabe des Richtungsbits
>         {
>           z1 = z1 - ports.getcount (p);
>
>           EndEL =(ports.get(9) and 1);
>           if EndEL == 0 z1=0;     //Näh.Schalter stellt Zähler auf Null
>
>           pcflcd.goto(1,0);
>           pcflcd.ziff(r);          //Testanzeige des richtungsbits
>           pcflcd.ziff(EndEL);      //Testanzeige der Nullstellers
>           ports.set(6,r);     //Ausgabe des Richtungsbits
>
>           if z1 <= -sr r = 0;
>
>           ports.set(6,r);       //Ausgabe des Richtungsbits
>           pcflcd.goto(3,0);
>           pcflcd.zahl(z1);
>         }
>     }
> }
>
>
> PS: Wie bringe ich den Quellcode richtig (mit Tags) in dieses Fenster ???
>
>
> GrĂĽsse ....Stefan

Hallo Stefan,
das Poblem, welches du beschreibst, ist hinreichend bekannt.
Insbesondere beim Richtungswechsel von Schrittmotoren einfacherer Bauart
tritt ein Schrittverlust auf.
In professionellen Anwendungen kann man deshalb angeben, wieviele "BONUS_STEPS"
man je Richtung und auch je Richtungwechsel zugeben  möchte.

kurz und knapp: 2500 Step´s  "rechtsrum" - 2500 Step`s "linksrum" fĂĽhren
nicht unbedingt auf die Ausgangsposition zurĂĽck. Du muĂ?t den Schrittverlust in Ab-
hängikeit des Richtungswechsels ermitteln und ggf. kompensieren.

Ich hoffe, ich habe Dir einen Lösungsansto� gegeben.
mit freundlichen GrĂĽĂ?en,
Matthias Koch


    Antwort schreiben


Antworten:

Re: unerwünschter Pilgerschritt (von Stefan - 9.12.2004 11:39)
    Re: unerwünschter Pilgerschritt (von Felix W. - 9.12.2004 14:06)
        Re: unerwünschter Pilgerschritt (von Stefan - 9.12.2004 20:06)
            Re: unerwünschter Pilgerschritt (von Matthias Koch - 9.12.2004 21:54)
                Re: unerwünschter Pilgerschritt (von Felix W. - 9.12.2004 22:58)
                    Re: unerwünschter Pilgerschritt (von Felix W. - 9.12.2004 23:08)
                       Re: unerwünschter Pilgerschritt (von Stefan - 12.12.2004 19:27)