- 3D-Druck Einstieg und Tipps         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 37

Thema: Schrittmotor-Problem..!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67

    Schrittmotor-Problem..!

    Anzeige

    E-Bike
    hallo,

    ich versuche einen Schrittmotor anzusteuern, aber er macht leider nur komische Halbdrehungen, woran kann das denn liegen?

    Das wichtige Teil des Codes:
    Code:
    #define F_CPU 8000000
    
    #include <avr/io.h> 
    #include <stdio.h>
    #include <stdbool.h>
    #include<util/delay.h>
    
    uint8_t step[6] = {0xE6, 0xBC, 0xE8, 0xBA, 0xBC, 0xE8};
    
    void rotate(direction)
    {
       
       int i;
       if(direction)
    	{
          
    	  PORTD |= 0x80 ;//LED1 geht an
    	  //PORTA = 0x82;
    	  //PORTA = 0x84;
           
    	   for(i=0;i<6;i++)
    	  {	  
    	   _delay_ms(250);
    	   PORTA = step[i];
              };    
    	}
       else 
        {
    	  PORTD |= 0x20;//LED2 geht an
        }
    }
    P.S: - Die 250ms habe ich nur so da eingefügt, da ich nicht weiss, wie ich diese Zeit berechnen kann.
    - ich benutze TCA3727G als Motortreiber.
    Danke.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    hier zumindest mal das datenblatt (braucht n paar sekündchen zum laden:

    http://pdf1.alldatasheet.co.kr/datas.../TCA3727G.html

    da is auch ne anschlussbelegung dabei.

    könnte es sein, dass du eine spule deines schrittmotors ausversehen an den falschen anschluss gesetzt hast, oder so....
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Danke A|KI!
    Das Datenblatt habe ich auch sorgfältig gelesen, und die Anschlussbelegung habe ich mit Multimeter Überprüft das ist Einwandfrei!
    Ich glaube aber das es an der Delay Funktion liegt
    Der Schrittmotor bekommt Die Kommandos zu schnell von dem Prozessor aber diese Verzögerungszeit kann ich leider nicht berechnen, hast du vielleicht eine Idee?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    mit prozessor proggen hab ich noch keine ahnung, aber der wird doch au irgendwo n schwingkreis (oszilator?) haben, welcher ihn taktet. vlt den mal etwas "abändern", also nen gröseren kondensator reinhaun, wenn der auserhalb liegt.

    ansonsten erkundig dich mal nach dem sleep-teil (_delay_ms_ oder was das ist) ob der richtig ist. ansonsten, dieses

    for(i=0;i<6;i++)

    ist doch irgendwie quatsch, oder? damit machst du aus i irgendwie immer 1, und dann wieder null nach dem durchlaufen der schleife, und bevor sie wieder gestartet wird, wieder 1. zumindest wärs in C++ so, oder der compiler regt sich auf...

    schau mal, wie es mit dem wär:
    Code:
    ...
    
    int i=0 ... ; //sollte glaub auserhalb der funktionen sein :-)
    
    void rotate(direction)
    {
    
    ...
    while(i<6)
    {
    PORTA =step[i];
    _delay_ms(1000);
    i++;
    }
    }
    zumindest kenn ichs so mit C++ progs
    (evtl das while durch for ersetzen)
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    step[i] ist ein array(Platzhalter) und wenn i durch 0 ersetzt ist ,heisst nicht dass step[0]=0
    sondern der inhalt von Platzhalter step[0] ,also in meinem Programm 0xE6

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    ok, und wenn du i um 1 erhöhst, dann rufst du quasi den inhalt vom nächsten platz auf?

    wenn ja, dann rufst du doch irgendwie immer das ausm platz i auf, oder blick ichs grad net?
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    genau, und so soll es auch sein.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    lol, warum so umständlich?

    wenn du doch immer dasselbe aufrufst, da i ja irgendwie immer 1 ist, warum machst du dann sowas in der art von


    Code:
    mach aus i (wieder) 0; // i=0
    zähle zu i 1 dazu; // jetzt ist i=1
    rufe i auf;
    warte Xms;
    und wieder von vorn;
    geht doch einfach so:

    Code:
    rufe i auf;
    warte Xms;
    wieder von vorn;
    was du machen wolltest, war wohl sowas:
    Code:
    while(true)
    {
    if (i<6) //du hast 5 schritte? oder nur die 4 schritte 1-5?
    {
    führe den ablauf von i aus;
    warte Xms;
    i++;
    }
    // wenn das ganze ne endlosschleife werden soll, dann noch:
    if (i=6)
    {
    i=0 // oder 1, wenn du nur die schritte 1-5 hast
    }
    }
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    die i ist doch nicht immer 1,die i kann Werte von 0 bis 5 annehmen je nachdem welche Array wir benutzen.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    ja, aber i ist doch so, wie ich deine funktion da oben verstehe, immer 1, da du aus i nach dem durchlaufen wieder 0 und gleich darauf wieder 1 machst. es ist doch nach deiner formel egal, was i nach dem durchlaufen der for() bedingung ist, denn du machst ja daraus wieder 1.

    guck dir nochmal die codes an, die ich da oben geschrieben hab. wenn ich da irgendwas falsch verstehe, sags mir.

    du willst ja nach und nach i als:
    0; 1; 2; 3; 4; 5; 1; 2; 3; 4; 5; 1; 2; undsoweiter
    haben

    nurist i bei dir, so wie ich deinen code oben verstehe

    0; 1; [wird ausgeführt]; 0; 1; [wird ausgeführt]; 0; 1; undsoweiter

    das 0; 1; passiert in der for()-funktion
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests