INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schrittmotor Problem mit LCD
30.07.2015, 15:15
Beitrag #1
Schrittmotor Problem mit LCD
Hallo Leute,
wenn ich in meinem Sketch etwas etwas auf dem LCD ausgeben lasse, habe ich timingprobleme mit meinem Schrittmotor. Die der Zeit wo die daten auf das LCD geschrieben werden, stören den Lauf des Motors. Je mehr Zeilen desto unruhiger wird der Lauf. Kann ich etwas dagen tun?

Code:
#include <AccelStepper.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Define the stepper and the pins it will use
AccelStepper stepper1(1, 9, 8);

// Define our three input button pins
#define  SHUTTER_PIN  5
#define  LEFT_PIN  4
#define  STOP_PIN  3
#define  RIGHT_PIN 2

// Define our analog pot input pin
#define  SPEED_PIN 0

// Define our maximum and minimum speed in steps per second (scale pot to these)
#define  MAX_SPEED 334
#define  MIN_SPEED 0.1



LiquidCrystal_I2C lcd(0x27,20,4);

void setup() {
  // The only AccelStepper value we have to set here is the max speeed, which is higher than we'll ever go
  stepper1.setMaxSpeed(10000.0);

  // Set up the three button inputs, with pullups
  
  lcd.init();                      // LCD wird initialisiert
  lcd.backlight();
  lcd.clear();
  
  pinMode(LEFT_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(RIGHT_PIN, INPUT_PULLUP);
  pinMode(SHUTTER_PIN, INPUT_PULLUP);


}

void loop() {
  
  static float current_speed = 0.0;         // Holds current motor speed in steps/second
  static int analog_read_counter = 1000;    // Counts down to 0 to fire analog read
  static char sign = 0;                     // Holds -1, 1 or 0 to turn the motor on/off and control direction
  static int analog_value = 0;              // Holds raw analog value.

  // If a switch is pushed down (low), set the sign value appropriately
  if (digitalRead(LEFT_PIN) == 0)
  {
    //lcd.setCursor(0, 2);
    //lcd.print("Richtung: Links ");
    sign = 1;
    
  }
  else if (digitalRead(RIGHT_PIN) == 0)
  {    
    //lcd.setCursor(0, 2);
    //lcd.print("Richtung: Rechts ");
    sign = -1;
  }
  else if (digitalRead(STOP_PIN) == 0)
  {
    //lcd.setCursor(0, 2);
    //lcd.print("Richtung: Stopp ");
    sign = 0;
  }


if (digitalRead(SHUTTER_PIN)==HIGH) while (digitalRead(SHUTTER_PIN)==HIGH);

int speed = current_speed;

  // We only want to read the pot every so often (because it takes a long time we don't
  // want to do it every time through the main loop).  
  if (analog_read_counter > 0) {
    analog_read_counter--;
  }
  
   else {
    analog_read_counter = 3000;
    // Now read the pot (from 0 to 1023)
    analog_value = analogRead(SPEED_PIN);
    
    lcd.setCursor(0, 0);
    lcd.print("Speed: ");
    lcd.print(400 / 100 * current_speed / 13.357,1);
    lcd.print("%    ");
    
    lcd.setCursor(0, 1);
    lcd.print("Time:  ");
    lcd.print(334 * 510 / speed *6.54 / 60*-1);
    lcd.print("min    ");
    
    
    
    // Give the stepper a chance to step if it needs to
    stepper1.runSpeed();
    //  And scale the pot's value from min to max speeds
    current_speed = sign * ((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED;
    // Update the stepper to run at this new speed
    stepper1.setSpeed(current_speed);

}

  // This will run the stepper at a constant speed
  stepper1.runSpeed();



}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.07.2015, 16:37
Beitrag #2
RE: Schrittmotor Problem mit LCD
Hallo,
leider kenne ich mich mit der Steuerung von Schrittmotoren nicht aus, aber kann es evtl. etwas mit der Variablen "Sign" zu tun haben, hier steht:

static char sign = 0; // Holds -1, 1 or 0 to turn the motor on/off and control direction

Und die Variable änderst du beim Beschreiben des Displays.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.07.2015, 17:54
Beitrag #3
RE: Schrittmotor Problem mit LCD
Das kann gut seinConfused
Ich habe den Code von jemanden übernommen weil er gut zu meinem Projekt passt.
Gibt es Alternative Variablen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.07.2015, 19:55
Beitrag #4
RE: Schrittmotor Problem mit LCD
Notwendige Variablen kannst du doch selbst definieren. Dazu must du aber genau verstehen was der Code macht. Ich würde die Variable "Sign" erst mal in den Displayroutinen auskommentieren und prüfen, ob der Code dann besser läuft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Endschalter für Schrittmotor clemens5555 10 621 18.04.2018 14:37
Letzter Beitrag: Tommy56
  Problem mit der Textauswertung Franz54 13 336 15.04.2018 18:17
Letzter Beitrag: Tommy56
  Problem mit RIFD UID ParadoxDev 6 241 27.03.2018 12:04
Letzter Beitrag: ParadoxDev
  Problem mit OLED 0.96" Display torsten_156 5 1.722 07.03.2018 23:27
Letzter Beitrag: Tommy56
  Ucglib Library Problem Bully 26 945 05.03.2018 18:47
Letzter Beitrag: Tommy56
  Schrittmotor mit Puls/Richtung Steuern Günni 6 600 19.01.2018 10:30
Letzter Beitrag: Tommy56
  Problem mit Wire.available() abfrage avoid 1 334 11.01.2018 13:40
Letzter Beitrag: Tommy56
  SerialComInstruments 4 Problem Darstellung Nextero 35 1.482 15.12.2017 18:51
Letzter Beitrag: ElEspanol
  Problem mit Nema17 und A4988 Philthy 6 472 08.12.2017 12:35
Letzter Beitrag: Tommy56
  Arduino -> Controllino [Problem gelöst] Cyrilsneer 17 1.348 27.11.2017 18:49
Letzter Beitrag: Franz54

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste