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 l298n Sequenz huber5093 10 430 26.04.2017 15:06
Letzter Beitrag: huber5093
Question Problem beim Hochladen auf AtTiny45. Hilfe -.- Jonas Lindenblatt 17 798 16.04.2017 12:58
Letzter Beitrag: Jonas Lindenblatt
  ESP8622 - 01 sendet UDP - Problem WLan Kriskind 37 2.946 14.03.2017 19:49
Letzter Beitrag: Tommy56
  Smart Home Webserver Basic Authentication Problem Osotastic 21 761 20.02.2017 18:00
Letzter Beitrag: Tommy56
  Problem mit Sketch senden an Uno feuerwehr 5 586 31.01.2017 20:41
Letzter Beitrag: Tommy56
  Beim Hochladen USB Problem Nils 10 906 29.12.2016 21:05
Letzter Beitrag: renid55
  Haltestrom Schrittmotor reduzieren TimF 3 664 24.10.2016 12:33
Letzter Beitrag: Binatone
  Problem mit SD Card Library BennIY 4 511 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Schrittmotor Clemens55555 9 1.278 25.08.2016 10:15
Letzter Beitrag: Binatone
  Problem mit SD.remove Eichner 6 383 22.08.2016 19:42
Letzter Beitrag: Eichner

Gehe zu:


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