-         

Ergebnis 1 bis 5 von 5

Thema: Beschleunigungsrampe für Schrittmotor (ohne Timer bitte!)?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685

    Frage Beschleunigungsrampe für Schrittmotor (ohne Timer bitte!)?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Moin!

    Ich bin immer noch im Optimierungswahn und habe eine Weile recherchiert, wie man denn so eine Beschleunigungsrampe umsezt, allerdings finde ich hauptsächlich Lösungen, die mit zwei Timern arbeiten. In meinem Fall sind aber keine Timer nínvolviert, sondern einfach eine Schleife mit Verzögerung nach jedem Step. Ich habe dazu folgenden Code (c, aber eigentlich leicht zu durchschauen):
    Code:
     
    for (cnt=0;cnt<steps;cnt++)
     {
      step_x(dir);
     
      //accelerate
      if (cnt < 64)
      {
       delay=speed + pgm_read_byte(&(ramp[cnt]));
      }
    
      //brake
      if (steps-cnt < 64)
      {
       delay = speed + pgm_read_byte(&(ramp[64-(cnt & 31)]));
      }
    
      //topspeed
      if ( (cnt>= 64) & (steps-cnt <= 64))
      {
       delay = speed + pgm_read_byte(&(ramp[63]));
      }
      _vdelay_us(delay);
    delay=speed + pgm_read_byte(&(ramp[cnt]));
    liest den We an Stelle cnt aus
    Code:
    unsigned char ramp[64]PROGMEM =
    {
    255,170,128,102,85,73,64,56,51,46,42,39,36,34,32,30,28,26,25,24,23,22,21,20,19,18,18,17,17,16,16,15,15,14,14,13,13,13,12,12,12,11,11,11,11,10,10,10,10,10,9,9,9,9,9,8,8,8,8,8,8,8,8,7
    };
    aus.

    Nun der Knackpunkt : wie kriege ich da vernünftige Werte rein, um eine lineare Rampe (oder auch gleichmäßige Beschleunigung) über die ersten 64 Schritte zu bekommen? Irgendwie reicht mein Mathe dafür nicht aus.
    Und ja, bei weniger als 128 Schritten gehts im Moment schief, aber das kommt später

    Danke an Euch Genies!!!

    - - - Aktualisiert - - -

    Achso, im Anhang mal meine bisherigen Überlegungen in éinem Diagramm festgehalten.....

    Jetzt habe ich aber wieder das Problem, das meine Rampe nicht abhängig von der Zeit sein soll, sondern über z.B. die ersten 64 Schritte gehen soll....
    irgendwie steh ich auf dem Schlauch...
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Unbenannt.jpg  
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    21.03.2013
    Beiträge
    86
    Hi,
    ich mache es immer so:
    void move_steps()
    {
    output_low(Driver_dir); // Links oder rechts
    step16=0; // Variablen mit Startwerten besetzen
    step_delay=step_delay_max; // Pause für low speed
    while (step16<steps_to_go) // X Schritte gehen
    {
    output_high(driver_step); // Schritteingang des Treibers
    delay_us(step_delay);
    output_low(driver_step);
    if (step_delay > step_delay_min) step_delay--; // step_delay_min= Pause für max speed
    }
    }

    Funktioniert prima!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    Hi,

    ganz anderer Ansatz ohne Timer: Schittmotor in Kombination mit einem Drehgeber ansteuern!

    Der eingehende Puls des Gebers wird dazu verwendet den nächsten Schritt auszugeben. -> Hardwarebasierte Rampe -> Lastunabhängig!!!

    Wurde bei alten Druckern so gemacht!

    Gruß Joe

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    21.03.2013
    Beiträge
    86
    Ganz so einfach ist es nicht. Funktioniert theoretisch nur dann, wenn die Anzahl der Pulse des Drehgebers identisch mit der Anzahl der (Mikro-) Schritte des Steppers sind (und dazu die Phasenlage passt), bei 3200 Steps pro Umdrehung wird die Auswahl der Drehgeber sehr gering.
    In der Praxis wird ein anderer (komplexerer) Algorithmus bei einem geschlossenen Regelkreis mit Stepper und Encoder verwendet.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    Hi Indeas,

    da hast du vollkommen recht, Impulse müssen natürlich zu den Schritten passen...sollten am besten Fall aber sogar deutlich mehr als Schritte am Motor sein (Phasenlage).

    3200 Steps ist jetzt nicht die Herausforderung. Impulsgeber mit 2500 Impulse/Umdrehung gibts es gebraucht für 10-20 Euro. Mit Quadraturauswertung kann ich hier schon 10000 Steps bedienen!

    Klar gibt es diverse unterschiedliche Algorithmen: Stichwort "Close-Loop-Regelung" von Schrittmotoren.

    Aber so viel geht ja aus der Anfrage von Klaffe auch nicht hervor...

    Mir fehlen hier entscheidende Hinweise zur benötigten Auflösung, Kostenramen, Anwendungszweck...der Klassiker halt!

    Gruß

Ähnliche Themen

  1. Atmega 168 bei Beschleunigungsrampe ausgelastet - Abhilfe
    Von erik_wolfram im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 23
    Letzter Beitrag: 27.02.2011, 20:08
  2. Tachosignal ohne Timer
    Von BoGe-Ro im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 06.09.2010, 10:40
  3. Timer & LCD anspruchsvoll bitte lesen
    Von Larzarus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 01.01.2008, 15:03
  4. Timer-Interrupt ohne Funktion ?
    Von Technikus im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 08.08.2006, 10:37
  5. RN Motor ST232 mit VB steuern: Beschleunigungsrampe
    Von kuma im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 1
    Letzter Beitrag: 06.06.2006, 12:11

Berechtigungen

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