Modellbahn steuern

Mit Probeaufbau meine ich das schnelle Zusammenstöpseln auf einem Steckbrett. Fürs endgültige Schaltungsdesign auf einer Platine würde ich diese Kodnensatoren selbstredend einplanen.

Ok hab mich schon gewundert! Weil was soll man da noch viel verbessern ?! :smiley:

Und wie funktioniert das mit dem ansteuern, also wie säh so ein Sketch dafür aus ???

Gruß
Lorenz

Um den Schrittmotor drehen zu lassen, brauchst du nur noch ein Taktsignal (CLOCK) generieren und die Drehrichtung (CW/CCW) vorgeben. Dann kannst du je nach Pegel an den Pins HALF/FULL festlegen, ob du Halbschritt- oder Vollschrittansteuerung möchtest, ENABLE auf HIGH.

Ich hab mal versucht ein Sketch zu schreiben, aber ich komm nicht so ganz mit dem Taktsignal zurecht. Ich weiß nicht wirklich wie ich das generieren soll.
Hier erstmal der Sketch, der eh fast nur Misst ist :D:

int Drehrichtung = 11; //CW / CCW
int Schritte = 10; //Halbschritte, Vollschritte
int Takt = 9; //Clock

void setup(){
  pinMode(Drehrichtung, OUTPUT);
  pinMode(Schritte, OUTPUT);
  pinMode(Takt, OUTPUT);
  
}

void loop(){
  digitalWrite(Drehrichtung, LOW);  //ist das jetzt im Uhrzeigersinn oder gegen ?
  digitalWrite(Schritte, HIGH); //sind das jetzt Vollschritte ?
  
 //und jetzt kommt das mit dem Takt, ich weiß absolut nicht wie ich das machen soll
 //ich hab jetzt einfach mal geraten...denk aber das ist absolut falsch 
  digitalWrite(Takt, HIGH);
  delay(1000);
  digitalWrite(Takt, LOW);
  delay(1000);
}

Wie kann ich eigentlich dann Tempo und so einstellen ???

Ich hab das ja jetzt mit der zweiten Schaltung von Strippenstrolch gemacht, aber bei der ersten Schaltung sind ja noch mehr Eingänge und auch noch zwei Ausgänge...sind die irgendwie noch wichtig ? oder kann ich die weglassen ?!

Gruß
Lorenz

Für die ersten Schritte müsste das eigentlich funktionieren.
Für die Tests würde ich die Richtungsauswahl und die Schritauswahl in den void setup() bringen da diese ja nur einmal gesetzt werden muss. Und den Takt kann man erstmal so erstellen. Die Geschwindigkeit des Stepper kannst du über interval ändern.
Ich würde das mit Blink Without Delay machen.

int Drehrichtung = 11; //CW / CCW
int Schritte = 10; //Halbschritte, Vollschritte
int Takt = 9; //Clock
int State = LOW;             // State Speicher für den Ausgangzustand
long previousMillis = 0;        // Speichert die Zeit seit dem letzten wechsel
long interval = 1000;           // interval für jeden Schritt (millisekunden)
unsigned long currentMillis = millis();


void setup(){
  pinMode(Drehrichtung, OUTPUT);
  pinMode(Schritte, OUTPUT);
  pinMode(Takt, OUTPUT);
  digitalWrite(Drehrichtung, LOW);  //ist das jetzt im Uhrzeigersinn oder gegen ? <==Testen
  digitalWrite(Schritte, HIGH); //sind das jetzt Vollschritte ? <== Testen
  
}

void loop()
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;   
    State=!State;
    digitalWrite(Takt, State);
}

Und den Rest würde ich jetzt mit Learning bei Doing machen :slight_smile:

Gruß
Daniel

volvodani:
Für die ersten Schritte müsste das eigentlich funktionieren.

Meinste da mit jetzt meinen Sketch ?

Da ich im Moment noch auf den L297 warte, hab ich erstmal Leds an das Arduino angeschlossen, und habe deinen Sketch mal hochgeladen. Also es ist eigentlich alles richtig, nur der Takt funktioniert nicht. Müsste die Led nicht blinken ? weil das tut sie nämlich nicht...

volvodani:
Und den Rest würde ich jetzt mit Learning bei Doing machen :slight_smile:

Werd ich versuchen :smiley:

Gruß
Lorenz

lgrube96:
Müsste die Led nicht blinken ? weil das tut sie nämlich nicht...

volvodani:
Und den Rest würde ich jetzt mit Learning bei Doing machen :slight_smile:

Werd ich versuchen

Die LED sollte Blinken.
Das tut sie nicht, weil ein Fehler im Code ist.

Ist aber gleich eine gute Übung, den Fehler zu finden.
Wenn du den nicht findest, solltest du dir vielleicht erst mal ein einfacheres Projekt suchen.

Gunther

Hinweis: wo werden die Zeit-Variablen gesetzt?

Der Sketch von Volvodani funktioniert so noch nicht, da fehlt irgendwo in der loop die Aktualisierung über die millis(). Schau dir dazu das Beispiel BlinkWithoutDelay an, da ist das schöner erklärt als ich das je könnte. :wink:

[edit]: Hatte guntherbs Posting nicht zuende gelesen. Wir meinen wohl das gleiche...

Boah ich kanns kaum fassen, ich hab den Fehler gefunden :grin:
@guntherb: Danke für den Hinweis ! :wink:

So funtkioniert das zum Mindest bei mir...

void loop(){
 unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;   
    State=!State;
    digitalWrite(Takt, State);
}
}

Ich kann jetzt leider nicht genau begründen, warum das in den loop teil muss, villeicht weil das dann nicht immer wiederholt wird ?! Keine Ahnung...:confused:

@sth77: Vielen Dank aber ich hab es ohne diese "Anleitung" geschafft, falls mir das jemand glaubt...aber begründen kann ich das dadurch nicht wirklich s.o.

Gruß
Lorenz

Ja, man muss ja immer einen Vergleich zum vorangegangenen Zeitpunkt haben, daher gehört diese Aktualisierung in die loop(). Hast du richtig gemacht, glaube ich dir auch, dass du selbst drauf gekommen bist. :smiley:
Der Schrittmotor wird bei einem Intervall von 1000 Millisekunden (=1 Sekunde) schrecklich langsam drehen, der hat ja selbst mehrere hundert Schritte.

Das ist gut, danke :wink:
Joa mal schauen ich probier das dann mal aus wenn der l297 da ist.

Dann hab ich noch ne Frage zu dem Schrittmotor, da steht in dem Datenblatt http://www.auf-vertrieb.business.t-online.de/pdf/UHM.pdf
In der Zeile Voltage: 12 - 230 V.
Kann der Schrittmotor mit 230 V betrieben werden ?! Find ich selber ein wenig mysteriös :smiley:
Nebenbei, ich mach das auf jedenfall nicht...:smiley:

Gruß
Lorenz

Ich glaube ja noch nicht einmal, dass es überhauprt ein Schrittmotor ist...

Biste dir da sicher ? Warum glaubst du das denn ?

Bloß nicht :confused:

Werden Schrittmotoren mit Wechselstrom betrieben und haben 3 Pole zur Drehrichtungsumkehr ???

Ich bin kein Motorexperte, aber das Ding scheint doch der Benennung nach ein Synchronmotor zu sein. Ich lasse mich aber gern eines besseren belehren.

Hast du den übereifrig bestellt? :wink: Wenn ja, sollte noch immer das Fernabsatzgesetz greifen. :wink:

Ouh stimmt :~, hab das erst gar nicht gelesen.
Und ich hab gerade gemerkt, dass das das falsche Datenblatt ist ! Den Schrittmotor den ich habe, hat nämlich nur 4 Ausgänge...

Das Problem liegt daran, da der Motor schon länger in einer Kiste lag und keine Modellnummer draufsteht, weiß ich nicht genau welcher das genau ist.
Den hab ich mal vor Jahren von meinem Vater bekommen :smiley: Der hat gesagt, wenn ich mich noch erinnern kann, dass sei ein Schrittmotor.

Ich hab nochmal nach einem Datenblatt gesucht und das gefunden (denke das ist das passend) http://www.auf-vertrieb.business.t-online.de/pdf/UBB.pdf

So dann kann es ja doch weitergehen :slight_smile:

Gruß
Lorenz

Hallo zusammen,

So, jetzt bin ich ja mit eurer Unterstützung mit der Modellbahnsteuerung fertig.
Ich will mich nochmal bei allen bedanken ! :wink:

Jetzt warte ich noch auf den L297...in der Zwischenzeit muss ich wohl wieder ein neues Projekt planen :smiley: (nicht wundern, ich muss immer was zu tun haben :grin: )...
Ich denke das geht in Richtung moving Head, werde dafür auf jedenfall auch ein Threas starten !

Gruß
Lorenz

Oh man in der Eile vergessen.
vor der if
currentmillis()=millis();

:wink: Das kommt vom schreiben ohne Testen. Schande über mein Haupt.

===> und das nach 3 Jahren Programmierung =(

Hallo liebe USER,

wollte mal fragen wie weit die Steuerung ist. Es sind ja schon Jahre vergangen. Ich bin erst in der Aufbauphase einer analogen N-Spur modellbahn

Du wirst leider keine Information von lgrube96 weil er nicht mehr in diesem Form angemeldet ist. Der Thread ist wie du schon gemerkt hast 6 Jahre alt und leider ist der Opener schon keine Teil mehr der Community (zu lange offline).
Das erkennt man daran das dier Name nur noch schwarz dargestellt wird und sich kein Profil dahinter befindet.

Gruß
DerDani