-         
+ Antworten
Ergebnis 1 bis 5 von 5

Thema: Schrittmotor läuft nur sehr sehr langsam

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.11.2003
    Beiträge
    28

    Schrittmotor läuft nur sehr sehr langsam

    Hallo,
    ich habe mir mal zu Testzwecken auf Steckbrett einen L293D an einen Atmega16 angeschlossen, daran einen Schrittmotor aus dem tecshop:



    Der Motor funktioniert auch tatsächlich un dreht sich - einziges Problem: Das ganze funktioniert nur wenn ich die Abstände zwischen den Poländerungen rel. lang mache. Ich weis jetzt überhaupt nicht wieso dieses Problem auftritt bzw wo ich suchen muss ... vl ist es was triviales und ich bin einfach nur zu müde aber ich stehe im Moment einfach ziemlich im Wald.

    So funktioniert der Motor:

    Code:
    #include <io.h>
    
    unsigned int beats;
    unsigned int counter;
    unsigned int nop;
    
    int main(void) {
    	outp(0xff, DDRA);
    	while(1)
    	{
    		outp(0x5,PORTA);
    		wait(40000);
    		outp(0x6,PORTA);
    		wait(40000);
    		outp(0xA,PORTA);
    		wait(40000);
    		outp(0x9,PORTA);
    		wait(40000);
    	}
    }
    
    void wait(beats) {
    	for(counter = 1;counter > beats;counter = counter + 1) {
    		nop++;
    	}
    }
    (Den n00b-haften Code bitte ich zu entschuldigen - bin in sachen C noch blutiger Anfänger)

    Ändere ich die wait Attribute jedoch auf sagen wir 5000 oder so bewegt sich der Motor einfach nicht mehr. Ich habe auch leider kein Oszi da um ohne Motor die Ausgänge zu überprüfen aber irgendwie kann ich mir die Ursache dieses Fehlers nicht erklären.

    Ich hoffe jemand kann mir helfen. Danke schonmal !

    Mfg
    Johannes

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Schau dir doch mal die erzeugte .lss Datei ( da steht der erzeugte Assemblercode drin ) an oder häng sie hier an. Es kann sein, dass GCC Warteschleifen wegoptimiert wenn sie "sinnlos" sind .
    Eine Möglichkeit wäre die counter Variable als "volatile unsigned int counter;" zu deklarieren.

    Meckert der Compiler eigentlich nicht, dass die Funktion "wait" nicht deklariert ist ??
    Eigentlich gehört an den Anfang ein "void wait(unsigned int beats);" oder so was in der Art.

    Noch ein paar allgemeine Anmerkungen:
    Benutzt doch bitte:
    #include <avr/io.h>
    und zum Beispiel
    PORTA = 0x50;

    Die anderen Schreibweisen sind veraltet und werden irgendwann nicht mehr unterstüzt werden...

    Und um noch was konstruktives beizutragen :
    Code:
    #include <avr/io.h>
    
    #define	SYSCLK	4000000				// Taktfrequenz
    
    void wait(unsigned int us);
    
    int main(void) 
    {
    
    	DDRA = 0xff;
    	
    	while(1)
    	{
    		PORTA = 0x05;
    		wait(100);
    		PORTA = 0x06;
    		wait(100);
    		PORTA = 0x0A;
    		wait(100);
    		PORTA = 0x09;
    		wait(100);
    	}
    }
    
    /* Wartet us µSekunden */
    void wait(unsigned int us) 
    {
    	unsigned int zaehler;
    	
    	while (us) 
    	{
    		zaehler = SYSCLK / 5000000;
    		while (zaehler) 
    		{
    			asm volatile ("nop");
    			zaehler--;
    		}
    		us--;
    	}
    }
    MfG Kjion

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.11.2003
    Beiträge
    28
    Hey danke für die Unterstützung .. hat geklappt

    Danke & n8

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.03.2004
    Beiträge
    201
    ich hab auch n problem mit Schrittmotoren unzwar dieses:


    der eine motor hat mehr kraft als der andere...

    woran kann das liegen?

    ich geh mit 9V und 3,5A auf die Motortreiber (motoren spannung)

    es kommt von einer spannung aus also einem spannungsteiler.

    ausserdem dreht sich der eine motor geschmeidiger als der andere.

    selbst phase vertauschen bringt nix. wenn ich die motoren gegeinander tausche an dem stecker hat der der zuvor zuwenig hatte das was der andere hatte also ist so die kraft wieder auf dem motor aber nicht auch den anderen..

    was ist falsch was kann sowas verursachen
    ?
    der motor :

    http://www.kemo-electronic.com/p5336_d.html

  5. #5
    Hallo Becherglas
    ich bin ein absoluter Anfänger auf dem Gebiet, kannst du vielleicht mal deine Ansteuerschaltung ins Forum stellen?

    MfG CastorTroy

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •