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 soll auf Tasterdruck bis zum Endschalter fahren
06.01.2016, 22:08 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 22:28 von Wurstbemme.)
Beitrag #1
Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
Hallo zusammen!

Ich beschäftige mich momentan damit meinen Frästisch zu "automatisieren". Auf Tasterdruck soll die fräse mit verschiedenen Geschwindigkeiten oder verschiedene Zustände angefahren werden:

1.Auf/ab schnell
2.Auf/ab langsam
3.Fahre ganz nach oben/ unten
4.Fahre 0,5mm auf/ab

Die meisten Punkte funktionieren schon einwandfrei, bis auf den dritten Punkt.

Als Anfänger habe ich leider keine Idee, wie ich diesen realisieren kann.

Im Detail soll folgendes geschehen:

Auf einen einmaligen Tasterdruck soll die Fräse bis zum Endschalter fahren, um den Fräser wechseln zu können. Wenn er dort angekommen ist, sollen zwei Relais geschaltet werden, eines um die Welle der Fräse zu sperren ( funktioniert Pneumatisch), eines um den Motorstrom der Fräse zu unterbrechen (damit sie nich versehentlich angeschaltet werden kann).
Erst wenn die Fräse über einen der anderen Taster wieder runtergefahren wird, und somit der Endschalter wieder frei ist, sollen die Relais wieder deaktiviert werden.

Es wäre schön, wenn mir jemand bei einen Lösungsansatz helfen könnte! Smile

Im Anhang findet ihr den Code und ein Bild des Projektes.

vielen Dank und Grüße! David

Code:
const int upfast = 2;       //Schnellgang
const int downfast = 3;
const int upslow = 4;       // Langsamgang
const int downslow = 5;
const int fullup = 6;       // Fahre ganz nach oben, schalte die Relais
const int fulldown = 7;
const int stepup = 8;       // Fahre 0,5mm hoch
const int stepdown = 9;
const int endup = 10;       // Endschalter (dauernd geschlossen)
const int enddown = 11;
const int set = 12;
const int stepPin = A0;     // Motorsteuerung
const int dirPin = A1;
const int wellensperre = A2;// Relais
const int motorstrom = A3;

int tasterupfast;
int tasterdownfast;
int tasterupslow;
int tasterdownslow;
int tasterfullup;
int tasterfulldown;
int tasterstepup;
int tasterstepdown;
int tasterendup;
int tasterenddown;
int tasterset;
int fast = 22;
int slow = 100;
int veryslow = 300;
int steps = 800;

void setup() {
pinMode(upfast,INPUT);
pinMode(downfast,INPUT);
pinMode(upslow,INPUT);
pinMode(downslow,INPUT);
pinMode(fullup,INPUT);
pinMode(fulldown,INPUT);
pinMode(stepup,INPUT);
pinMode(stepdown,INPUT);
pinMode(endup,INPUT);
pinMode(enddown,INPUT);
pinMode(set,INPUT);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(wellensperre,OUTPUT);
pinMode(motorstrom,OUTPUT);
digitalWrite(motorstrom,HIGH);
digitalWrite(wellensperre,HIGH);}

void loop() {

tasterupfast = digitalRead(upfast);
tasterdownfast = digitalRead(downfast);
tasterupslow = digitalRead(upslow);
tasterdownslow = digitalRead(downslow);
tasterfullup = digitalRead(fullup);
tasterfulldown = digitalRead(fulldown);
tasterstepup = digitalRead(stepup);
tasterstepdown = digitalRead(stepdown);
tasterendup = digitalRead(endup);
tasterenddown = digitalRead(enddown);
tasterset = digitalRead(set);

if ((tasterupfast==HIGH)&&(tasterendup==HIGH))      //Schnellgang aufwärts

    {digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(fast);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(fast);
        }

if ((tasterdownfast==HIGH)&&(tasterenddown==HIGH))  //Schnellgang abwärts  

    {digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(fast);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(fast); }

    if ((tasterupslow==HIGH)&&(tasterendup==HIGH))  // langsam aufwärts

    {digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(slow);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(slow);
        }

if ((tasterdownslow==HIGH)&&(tasterenddown==HIGH))  // langsam abwärts  

    {digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(slow);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(slow); }

if((tasterfullup==HIGH)&&(tasterendup==HIGH))       // kläglicher versuch für Fräserwechsel

    {digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(fast);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(fast);
    if (tasterendup==LOW);  
       {digitalWrite(motorstrom,LOW);
       digitalWrite(wellensperre,LOW);
       }}



if ((tasterstepup==HIGH)&&(tasterendup==HIGH))    // fahre 0,5mm hoch

    {int i = 0;
    digitalWrite(dirPin,LOW);
    for( i=0; i<steps; i++){    
    digitalWrite( stepPin, HIGH );
    delayMicroseconds(veryslow);
    digitalWrite( stepPin, LOW );
    delayMicroseconds(veryslow); }}

if ((tasterstepdown==HIGH)&&(tasterenddown==HIGH))    // fahre 0,5mm runter

    {int i = 0;
    digitalWrite(dirPin,HIGH);
    for( i=0; i<steps; i++){    
    digitalWrite( stepPin, HIGH );
    delayMicroseconds(veryslow);
    digitalWrite( stepPin, LOW );
    delayMicroseconds(veryslow); }}


}


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 22:14
Beitrag #2
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
Bild ist da, aber Code fehlt.
Bitte poste den Sketch hier im Thread in Code-Tags, damit wir den besser lesen können.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 22:30
Beitrag #3
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
(06.01.2016 22:14)hotsystems schrieb:  Bild ist da, aber Code fehlt.
Bitte poste den Sketch hier im Thread in Code-Tags, damit wir den besser lesen können.

Danke! Sorry, das hatte ich natürlich vergessen... Ist jetzt online! Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 23:06 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 23:07 von hotsystems.)
Beitrag #4
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
So wie ich es sehe, schaltest du die Taster gegen 5 Volt. Hast du an den Tastern und Endschalter Pulldown-Widerstände?
Ich könnte mir vorstellen, dass da Störungen reinkommen, wenn der Taster/Endschalter offen ist und immer High signalisiert.

Einen anderen "Fehler" kann ich nicht erkennen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 23:13
Beitrag #5
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
(06.01.2016 23:06)hotsystems schrieb:  So wie ich es sehe, schaltest du die Taster gegen 5 Volt. Hast du an den Tastern und Endschalter Pulldown-Widerstände?
Ich könnte mir vorstellen, dass da Störungen reinkommen, wenn der Taster/Endschalter offen ist und immer High signalisiert.

Einen anderen "Fehler" kann ich nicht erkennen.

Richtig, alle Schaltern/ Tastern sind mit Pulldown-Wiederständen versehen.
Damit gibt es keinerlei Probleme, wie gesagt funktionieren alle Punkte bis auf die "Werkzeugwechsel-Position" wunderbar.

Der Ansatz für diese (oben beschriebene ) Funktion, den ich bereits versucht habe zu programmieren ist allerdings völliger Murks...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 23:24
Beitrag #6
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
Ok, ich kann leider nur den Sketch prüfen, so wie er da steht.
Motorsteuerung ist bisher nicht mein Ding.

Frage:
Was macht er denn, wenn du die Taste (Werkzeugwechsel-fullup)betätigst?

Und was genau soll er machen?

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 09:59 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2016 10:05 von Wurstbemme.)
Beitrag #7
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
Wie schon oben beschrieben:

"Auf einen einmaligen Tasterdruck soll die Fräse bis zum Endschalter fahren, um den Fräser wechseln zu können. Wenn er dort angekommen ist, sollen zwei Relais geschaltet werden, eines um die Welle der Fräse zu sperren ( funktioniert Pneumatisch), eines um den Motorstrom der Fräse zu unterbrechen (damit sie nich versehentlich angeschaltet werden kann).
Erst wenn die Fräse über einen der anderen Taster wieder runtergefahren wird, und somit der Endschalter wieder frei ist, sollen die Relais wieder deaktiviert werden."

Ich beschreibe es nochmal in anderen Worten:

Wenn ich die Taste "fullup" drücke, soll die Fräse zum Werkzeugwechsel ganz nach oben, bis zum Endschalter fahren. Dort angekommen sollen zwei Relais aktiviert werden.

Ich brauche also eine Bedingung dieser Art:

If ((tasterfullup==HIGH)&&(tasterendup==HIGH)) //Endschalter ist im ungedrücktem Zustand immerHIGH
{fahre selbstständig hoch}
Until ( tasterendup==LOW)
{halte den Motor an und aktiviere die beiden Relais }

Ich weis, es gibt keinen "until" Befehl, aber ich habe leider keine Idee wie ich es mit den mir bekannten Befehlen lösen könnte.

Grüße, David

(06.01.2016 23:24)hotsystems schrieb:  Frage:
Was macht er denn, wenn du die Taste (Werkzeugwechsel-fullup)betätigst?

Momentan fährt er nur solange ich den Taster gedrückthalte mit einer veränderten Geschwindigkeit ( nicht genauso schnell als wenn ich die "fastup" Taste drücke, was er aber sollte), an aktivierte Relais ist garnicht zu denken.


Ich brächte also zunächst mal Hilfe, wie ich es hinbekomme, dass eine "motorschleife" auf einmaligen Tastendruck aktiviert wird und durch den Endschalter beendet wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 10:57
Beitrag #8
RE: Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren
Hallo,
es könnte so gehen, aber wie gesagt, ich habe keine Erfahrung mit der Motorsteuerung.
Da sind sicher noch Anpassungen nötig und der Code kann von mir nicht getestet werden.

Dies bitte nur als Beispiel sehen.

Code:
//Deklaration:
int _FullUp;

// Nachfolgend deine Abfrage ersetzen:
  if ((tasterfullup == HIGH) && (tasterendup == HIGH))  {
    _FullUp = 1;
    GoToChange();
  }

// Außerhalb der Loop setzen

void GoToChange() {

  if (_FullUp = 1) {
    digitalWrite(dirPin, LOW);
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(fast);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(fast);
    if (tasterendup == LOW); {
      _FullUp = 0;
      digitalWrite(motorstrom, LOW);
      digitalWrite(wellensperre, LOW);
    }
  }
}

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Haltestrom Schrittmotor reduzieren TimF 3 347 24.10.2016 12:33
Letzter Beitrag: Binatone
  Schrittmotor Clemens55555 9 750 25.08.2016 10:15
Letzter Beitrag: Binatone
  Servo soll nur in Ruhelage stoppen Sven1996 1 233 19.08.2016 14:37
Letzter Beitrag: StephanBuerger
  Piezosummer und Schrittmotor Gilbert Neon 0 359 20.12.2015 15:40
Letzter Beitrag: Gilbert Neon
  Accel Stepper Library für Schrittmotoren Problem Rampe fahren Schrittmotor 0 983 13.10.2015 21:03
Letzter Beitrag: Schrittmotor
  Problem mit 2 Potis und Schrittmotor Sven90 1 767 24.09.2015 10:19
Letzter Beitrag: Bitklopfer
  USBhost mit keyboard gefunden, funktioniert aber nicht wie's soll HaWe 0 543 05.08.2015 14:26
Letzter Beitrag: HaWe
  Schrittmotor Problem mit LCD Thrillhouse 3 854 30.07.2015 19:55
Letzter Beitrag: hotsystems
  NRF24 soll Daten empfangen und senden... MaHaI976 2 938 08.06.2015 19:36
Letzter Beitrag: MaHaI976
  Hilfe ist gefragt bei einem Schrittmotor tsmoke13 7 1.210 02.06.2015 15:05
Letzter Beitrag: Bitklopfer

Gehe zu:


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