Motorsteuerung für einen Motor

Hallo, ich weiss es ist viel verlangt aber eventuelle hat doch jmd Lust und Zeit sich folgenden Code einmal anzusehen -währe echt dankbar.

Syntax ist lt. der IDE richtig aber kann das von der Logik so funktionieren ??

es soll mittels RPM1 bis 4 ein Vorschub eingestellt werden ( nur jeweils 1 Taster )
S_* sind endschalter
M_* sind Steuerleitungen zum Motortreiber

#include <AccelStepper.h>
AccelStepper Motor(AccelStepper::DRIVER, 31, 33);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 20 chars and 4 line display

// Eingänge
const int S_Links_Pin = 53;
const int S_Rechts_Pin = 51;
const int Links_Pin = 49;
const int Rechts_Pin = 47;
const int Man_Pin = 45;
const int RPM1 = 43;
const int RPM2 = 41;
const int RPM3 = 39;
const int RPM4 = 37;

//Ausgänge
const int M_ENA = 35;
const int M_DIR = 33;
const int M_PUL = 31;

// Variabeln
float current_speed = 0.0;
int Status = 0;
void setup()
{
  digitalWrite(M_ENA, HIGH); // Entstufe abgeschaltet

  // Set up the button inputs, with pullups
  pinMode(S_Links_Pin, INPUT_PULLUP);
  pinMode(S_Rechts_Pin, INPUT_PULLUP);
  pinMode(Links_Pin, INPUT_PULLUP);
  pinMode(Rechts_Pin, INPUT_PULLUP);
  pinMode(Man_Pin, INPUT_PULLUP);
  pinMode(RPM1, INPUT_PULLUP);
  pinMode(RPM2, INPUT_PULLUP);
  pinMode(RPM3, INPUT_PULLUP);
  pinMode(RPM3, INPUT_PULLUP);

  lcd.init();                      // initialize the lcd
  lcd.setCursor(3, 0);
  lcd.print("Vorschub: 0 M/Minute");
  lcd.setCursor(3, 2);
  lcd.print("Betrieb: ");
}

void loop()
{
  // Holds current motor speed in steps/second
  static char sign = 0;                     // Holds -1, 1 or 0 to turn the motor on/off and control direction

  if (digitalRead(Man_Pin) == 0 ) {
    current_speed = 0;
    digitalWrite(M_ENA, HIGH);
    lcd.setCursor(12, 2);
    lcd.print("Manuell");
    delay(500);
  }

  if (digitalRead(RPM1) == 0 && digitalRead(RPM2) == 1 && digitalRead(RPM3) == 1 && digitalRead(RPM4) == 1) { // Vorschub 1,8 M/min
    current_speed = 8000;
    lcd.setCursor(3, 0);
    lcd.print("Vorschub: 1,8 M/Minute");
  }

  if (digitalRead(RPM1) == 1 && digitalRead(RPM2) == 0 && digitalRead(RPM3) == 1 && digitalRead(RPM4) == 1) { // Vorschub 3,6 M/min
    current_speed = 16000;
    lcd.setCursor(3, 0);
    lcd.print("Vorschub: 3,6 M/Minute");
  }

  if (digitalRead(RPM1) == 1 && digitalRead(RPM2) == 1 && digitalRead(RPM3) == 0 && digitalRead(RPM4) == 1) { // Vorschub 5,4 M/min
    current_speed = 24000;
    lcd.setCursor(3, 0);
    lcd.print("Vorschub: 5,4 M/Minute");
  }

  if (digitalRead(RPM1) == 1 && digitalRead(RPM2) == 1 && digitalRead(RPM3) == 1 && digitalRead(RPM4) == 0) { // Vorschub 7,0 M/min
    current_speed = 32000;
    lcd.setCursor(3, 0);
    lcd.print("Vorschub: 7,0 M/Minute");
  }
  if (digitalRead(S_Links_Pin) == 1 or digitalRead(S_Rechts_Pin) == 1) {
    Motor.stop();
    delay(1000);
    Status = 0;
  }

  if ( digitalRead(Links_Pin) == 0 && digitalRead(Rechts_Pin) == 1 && digitalRead(S_Rechts_Pin) == 1 && Status == 0) {
    Status = 1;
    current_speed = current_speed * 1;
    digitalWrite(M_ENA, LOW);
    lcd.setCursor(3, 3);
    lcd.print("läuft links");
  }

  if ( digitalRead(Rechts_Pin) == 0 && digitalRead(Links_Pin) == 1 && digitalRead(S_Links_Pin) == 1 && Status == 0) {
    Status = 2;
    current_speed = current_speed * -1;
    digitalWrite(M_ENA, LOW);
    lcd.setCursor(3, 3);
    lcd.print("läuft rechts");
  }
   Motor.setSpeed(current_speed);
  Motor.run();

}

Mach Dir bitte die Mühe Dein Projekt besser und genauer zu erklähren. Ich habe keine Lust die Sachen zu erraten nur weil Du unzureichende Infos gibst.
Welchen Motor hast Du und welchen Motortreiber? Schaltng.
Grüße Uwe

µC: Arduino Mega2560
Motorendstufe: Leadshire M542
Enable- Pins s. Quellcode
Pulse "---"
Dir "---"

  • liegt gemeinsam auf +5V

Motor: Sanyo 103H7126-1740

wo die Taster angeschlossen sind steh ebenfalls im Quellcode

I2C- Display liegt an SDA u. SCL

Eingangstaster und Endschalter schalten gegen GND

Was das Ganze machen soll, bleibt geheim? Da wird es knapp mit der Hilfe.
Du gibst Dir sichtlich Mühe, dem Forum so wenig Infos zu geben, wie möglich. Das wird eine gute Basis für die weitere Zusammenarbeit.

Gruß Tommy

Hi,

ich hab eigendlich nicht verstanden was Du machen willst. Was ich versanden habe Du hast 4 Sollwerte für Geschwindigleiten die Du irgendwie auf einen Antrieb geben willst. Dazu hast Du verschieden If Bedingungen geschaffen in denen Du was machst.

Wenn Du wissen willst ob das so klappt dann probiere es doch einfach aus.

also mittels der RPM Taster wird eine "Drehzahl eingestellt

mittels Rechts o. Links läuft der Motor dann in selbige Richtung bis zum jeweiligen Endtaster dann soll der Motor anhalten

Mittels Manuell wird die Endstufe abgeschaltet damit man die Handkurbe drehen kann

das ganze soll ein Vorschub für eine Fräßtisch werden

Hi

Code nicht angeschaut, da ich bisher kein wirkliches Interesse, uns durch Infos der Sache näher zu bringen.

Nun denn - Du hast drei/vier Taster für Geschwindigkeiten in der Einheit rpm - also was in der Art 10, 15, 20 Umdrehungen die Minute.
Weiter hast Du einen Taster für die Drehrichtung und einen Taster/Schalter für den manuellen Modus.

Du willst:

  • Drehzahl vorgeben
  • Drehzahl am Motor nach Vorgabe einregeln
  • an den jeweiligen Endtastern anhalten
  • bei manuellem Verfahren den Motor 'abschalten', damit Du Diesen eben beim Kurbeln antreiben kannst.

Habe ich Das so halbwegs interpretiert?

Wenn Da noch was fehlt - jetzt wäre die Zeit, Das zu nennen.

MfG

ja aber für die Richtung habe ich 2 Taster

also eine für Linkslauf und einen für Rechtslauf

Hi

Etwas zäh hier :confused:

Wie soll der Ablauf sein, wo hakt Es?

Wieder nur meine Interpretation, da die Infos ... fein verteilt ... serviert werden.

  • Vorwahl der Geschwindigkeit durch eine der drei/vier Geschwindigkeitstasten - hierbei passiert noch Nichts
  • per Tastbetrieb kann vor/zurück gefahren werden, dabei soll die zuvor eingestellte Geschwindigkeit schnell erreicht und dann gehalten werden
  • Abschaltung des Motor an den Endtastern
  • weiterer Taster oder Schalter für manuelle Verstellung, hier wird wohl der Motor entkuppelt oder elektrisch 'in die Luft gehangen'.
  • ggf. Anzeige der Modus

Mir wäre eine ähnliche Auflistung ganz recht und, ob dieser Punkt bereits funktioniert, wo Dieser hakt oder wo Du Dir Da eine Verbesserung vorstellen könntest.

MfG

deine Beschreibung passt , wenn der ENA eingang der Entstufe high ist wird die abgeschaltet so dass am Motor keine Spannung anliegt

da ich ich mir nicht sicher bin ob das so läuft und ich nat. weder den Motor noch andere Hardware beschädigen o. zerstören will habe ich das noch nicht getestet und nachmessen den ohne Qszi nicht

daher ja die Frage ob das so überhaupt geht

Hi,

ich hab in fast 38 Jahren jede Menge Inbetriebnahmen für Anlagen mit viel Antriebstechnik gemacht Wenn ich mir da nicht sicher war ob da ein 30KW Antrieb durchgeht und alles kurz und klein macht bin ich so vorgegangen.

  1. Not-Halt und Sicherheitseinrichtungen gründlich prüfen und testen.
  2. soviel wie möglich erst mal simulieren

Um die Logik zu testen kannst Du ja zunächst mal mittel 3 LED´s die Funktion simulieren und testen

Motor ein LED1
rechtlauf LED2
linkslauf LED3

Wenn dann der Motor darn kommt würde ich den erst mal mechanisch abgekoppet laufen lassen. Wenn das alles positv war Motor mechanisch ankoppeln. Ein Hardwareschalter in der Stromversorgung der Endstufe kann auch nicht schaden.

Gruß Heinz