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
  Schrittmotor mit Puls/Richtung Steuern Günni 6 427 19.01.2018 10:30
Letzter Beitrag: Tommy56
  Problem mit Wire.available() abfrage avoid 1 248 11.01.2018 13:40
Letzter Beitrag: Tommy56
  SerialComInstruments 4 Problem Darstellung Nextero 35 1.204 15.12.2017 18:51
Letzter Beitrag: ElEspanol
  Problem mit Nema17 und A4988 Philthy 6 363 08.12.2017 12:35
Letzter Beitrag: Tommy56
  Arduino -> Controllino [Problem gelöst] Cyrilsneer 17 1.113 27.11.2017 18:49
Letzter Beitrag: Franz54
Question Problem beim seriellen Einlesen von RFID-Reader Bezel 5 502 05.11.2017 22:37
Letzter Beitrag: Tommy56
  Schrittmotor Geschwindigkeit mit Wägezelle + HX711 Modul steuern Schrittmotor 10 1.510 30.08.2017 23:45
Letzter Beitrag: hotsystems
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 767 22.08.2017 15:17
Letzter Beitrag: Tommy56
  Problem mit LSM 303 Snörb 1 473 22.08.2017 14:16
Letzter Beitrag: Snörb
  Problem mit externem Interrupt manfred474 13 1.529 13.08.2017 08:54
Letzter Beitrag: MicroBahner

Gehe zu:


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