- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 30

Thema: Programm ablauf langsam

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242

    Programm ablauf langsam

    Hallo,

    ich habe ein Baggermodell mit Arduino MEGA und 6 Schrittmotoren. Fast alles klappt zZ prima mit einer Ausnahme.
    Für die Schrittmotoransteuerung habe ich ein selbsterstelltes Unterprogramm geschrieben, dessen Aufruf für einen Motor z.B. so aussieht:

    M1_drive(41, 43, 45, 47, n, 30, 0); // 41, 43, 45, 47 sind die Ausgänge, n = Anzahl der Umdrehungen,
    // 30 = Anzahl der Umdrehungen/min; 0 = Drehrichtung

    Mit den Geschwindigkeiten, die die Zahnstangenantriebe fahren, bin ich für den normalen Ablauf zufrieden. Es gibt jedoch eine Unterprogramm "Justierung" mit dem ich nach einander alle Antriebe in eine definierte Ausgangsstellung fahren kann. Bei dieser Betriebsart schleichen die Antriebe jedoch nur, auch wenn ich den Parameter für die U/min in den entsprechenden Aufrufen vergrößere. Die Unterprogramme Mx_drive benutze ich in jedem Fall, jedoch für jeden Motor ein separates.
    Zunächst hatte ich die Library Bounce2 in Verdacht, mit der ich das Prellen eines Tasters, der mit Erreichen der Grundstellung eines Antriebs betätigt wird, unterdrücken will. Die Einstellung von 1 ms reichte dafür aus. Aber auch wenn ich 100 ms einstellte, liefen die Antriebe nicht langsamer, so dass ich meine, dass diese Library den normalen Programmzyklus nicht verzögert. Oder liege ich da falsch?

    Evtl. fällt jemandem spontan auf, was die Ursache für diese unterschiedlichen Geschwindigkeiten sein könnte.

    Ich habe den Teil des Codes für Motor1 aus dem Unterprogramm Justierung angefügt und ein Bild des entsprechenden Flussdiagramms.

    Code:
    //  **************************************   UP Justierung   **************************************
    
    void Justierung() {
      static boolean M1_fertig = false;
      static boolean M2_fertig = false;
      static boolean M3_fertig = false;
      static boolean M4_fertig = false;
      static boolean M5_fertig = false;
      static boolean M6_fertig = false;
      static boolean M1_laeuft = false;
      static boolean M2_laeuft = false;
      static boolean M3_laeuft = false;
      static boolean M4_laeuft = false;
      static boolean M5_laeuft = false;
      static boolean M6_laeuft = false;
      static boolean Z_EIN;               //  true, solange Timer 1 läuft
    
    
      if (M1_fertig == true)  {
    
    
        goto M2_Sprung;    // M1 wird übersprungen
      }
    
      if (JustPin == HIGH)    {
        M1_laeuft = true;
    
        M1_drive(41, 43, 45, 47, 30, 3, 1);   //   41, 43, 45, 47, Mx_n, Mx_v, Mx_dir  ;  für den MEGA
     
    
        return;
    
      }    //  *********** ENDE  if (JustPin == HIGH)
    
    
      if (Zeit_EIN(M1_laeuft) == true)   {    //  Aufruf des UPs Zeit_EIN(), das die Zeit startet, in der JustPin LOW sein muss, damit eine Motor übersprungen wird.
    
        return;   // Sprung aus UP Justierung
      }
    
    
    
       timer1.disable(zeitId);         // Timer1 löschen
    
      M1_fertig = true;        // wenn Auftrag vom Hauptprogramm erledigt ist
      M1_Start ==  true;
      Zeitueberlauf = false;    // eigenes Zeitsignal löschen
      TimerAktiv  = false;
      lzahn1_alt = 1.0;
    
      digitalWrite(41, LOW);   // alle LOW, damit der Motor im Stillstand stromlos ist.
      digitalWrite(43, LOW);
      digitalWrite(45, LOW);
      digitalWrite(47, LOW);
    
    
    
    
    M2_Sprung:      // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          ab hier Start Motor 2
    Klicke auf die Grafik für eine größere Ansicht

Name:	Scannen0001.jpg
Hits:	9
Größe:	74,6 KB
ID:	31958

    Mir ist klar, dass das mit diesen Informationen keine einfache Frage ist.

    Welche Möglichkeiten kennt ihr, den Verursacher zu finden?

    Noch zur Erklärung:
    Zahnstangengeschwindigkeit von 13 mm/s ist ok
    Bei Justierung nur ca. 2 mm/s

    vG

    fredyxx
    Geändert von fredyxx (28.08.2016 um 11:53 Uhr)

Ähnliche Themen

  1. UART, zeitlicher Ablauf Subprogramme
    Von mollyman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.06.2013, 18:10
  2. Programm-Ablauf wird nicht eingehalten.
    Von RobbyMartin im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 11.06.2011, 16:39
  3. Programm zu langsam?
    Von Hübi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 05.03.2009, 18:03
  4. Ablauf von Programmen generell
    Von The Man im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 18.08.2007, 15:21
  5. Ablauf der IRSs mit SIGNAL
    Von weijr im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 03.12.2006, 22:47

Berechtigungen

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

12V Akku bauen