Forum: Mikrocontroller und Digitale Elektronik Schrittmotoren ansteuern


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Jan S. (jan_s262)


Angehängte Dateien:

Lesenswert?

Guten Tag.
Meine Aufgabe ist es ein Technikerprojekt weiterzuentwickeln.
Eine Selbstentworfene Schrittmotorkarte steuert zwei Schrittmotoren an. 
Dies funktioniert auch mit dem Programm des Vorgängers. Ich möchte ein 
eigenes Programm schreiben und nutze den Accelstepper.

Mirkocontroller:  ATMega 328P-PU
Schrittmotortreiber: DRV8825PWP

Pinbelegung:

Schrittmotorteiber1: Step_Pin = 11, Dir_Pin = 6
Schrittmotortreiber2: Step_Pin = 12, Dir_Pin = 13


Mit diesem Testprogramm laufen beide Motoren. Sobald ich nicht mehr mit 
Portmanipulation arbeite laufen beide nicht mehr und wenn ich z.B die 
Accelstepper LIB benutze läuft nur der Motor von Schrittmotortreiber 1.

von Kluger Mann (Gast)


Lesenswert?

Jan S. schrieb:
> Mit diesem Testprogramm laufen beide Motoren. Sobald ich nicht mehr mit
> Portmanipulation arbeite laufen beide nicht mehr und wenn ich z.B die
> Accelstepper LIB benutze läuft nur der Motor von Schrittmotortreiber 1.

Wenn Du etwas änderst und es läuft nicht mehr, liegt es an deiner 
Änderung.
Das ist doch schon mal gut.
Also was genau änderst du?

von Januso (Gast)


Lesenswert?

Jan S. schrieb:
> Dies funktioniert auch mit dem Programm des Vorgängers.

Dann scheint ja der Vorgänger mehr Ahnung zu haben als du...suche den 
Unterschied

von MaWin (Gast)


Lesenswert?

Jan S. schrieb:
> Mit diesem Testprogramm laufen beide Motoren.

Unwahrscheinlich, da fehlt ja sogar schon die Umschaltung der Pins auf 
Ausgang.

Der Weg zum Verständnis ist bei dir noch weit, sehr weit.

von Jan S. (jan_s262)


Lesenswert?

Mein Vorgänger nutzt in seinem Programm die Portmanipulation wie in 
meinem Testprogramm. Damit funktioniert es. Mir fehlen in dem Programm 
allerdings Funktionen wie Beschleunigen und deshalb möchte ich den 
Accelstepper nutzen. Mit dem Accelstepper läuft allerdings nur 
Schrittmotortreiber1 und Schrittmotortreiber2 nicht.

von Karadur (Gast)


Lesenswert?

Setup braucht mehr Inhalt!

von Jan S. (jan_s262)


Lesenswert?

Das Testprogramm so wie es auf dem Foto ist läuft.

von Karadur (Gast)


Lesenswert?

Deine #defines machen aber nur Sinn wenn du sie auch benutzt.
Deine make wäre auch interessant.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan S. schrieb:
> Angehängte Dateien:
> Testprogramm.jpg
Editierst du deine Software mit Paint?

Jan S. schrieb:
> Das Testprogramm so wie es auf dem Foto ist läuft.
Ja, dann ist der eigentlich uninteressant. Denn der Code, der nicht 
läuft, macht Probleme...

Jan S. schrieb:
> Mit dem Accelstepper läuft allerdings nur Schrittmotortreiber1 und
> Schrittmotortreiber2 nicht.
Ja, dann ist da wohl noch ein Fehler drin. Wie wäre es, wenn du einfach 
die Sourcedatei hier anhängst?

BTW: besorg dir mal schon ein Oszilloskop für später...

: Bearbeitet durch Moderator
von Johannes S. (Gast)


Lesenswert?

In der Mainloop muss run() für jede Instanz aufgerufen werden, wird das 
gemacht?
http://www.airspayce.com/mikem/arduino/AccelStepper/MultipleSteppers_8pde-example.html

von Jan S. (jan_s262)


Lesenswert?

Werde Sourcedatei anhängen wenn ich wieder zuhause bin.
Run() wird für beide Instanzen aufgerufen.

von Johannes S. (Gast)


Lesenswert?

Dann wäre der nächste Schritt jeweils ein run() auszukommentieren um zu 
prüfen ob die Motoren für sich laufen.
Wenn das so ist, dann können die Instanzen noch falsch parametriert sein 
und ein run zuviele Schritte generieren muss und damit der andere nicht 
drankommt. Also erstmal versuchen langsam laufen zu lassen.

Oder MultiStepper verwenden wenn gleichzeitige Bewegungen nötig sind.
http://www.airspayce.com/mikem/arduino/AccelStepper/MultiStepper_8pde-example.html

von Jan S. (jan_s262)


Angehängte Dateien:

Lesenswert?

So hier mal meine Sourcedatei mit dem Accelstepper. Mit dem Code läuft 
nur Schrittmotortreiber 1. Außerdem habe ich noch Schaltpläne von der 
Platine hinzugefügt.

Ich habe auch schon jeweils einen Schrittmotortreiber auskommentiert und 
versucht nur einen laufen zu lassen. Funktioniert leider auch nicht.

von Johannes S. (Gast)


Lesenswert?

ist das richtig?
1
AccelStepper(2,

Die Konstante für Driver müsste 1 sein, besser das Enum dafür benutzen
1
AccesStepper( AccelStepper::DRIVER,...

von Ein Kommentar (Gast)


Lesenswert?

> Ich möchte ein eigenes Programm schreiben und nutze den Accelstepper.

Das musst du in einer anderen Reihenfolge anpacken.

Zuerst verstehen, was dein Vorgänger gemacht hat. Dann verstehen, warum 
er es so gemacht hat. Danach überlegenen, wie es besser geht.

Erst wenn dir klar ist, wo die Probleme liegen und warum dein Vorgänger 
es so gemacht hatte, die Software neu schreiben.

von Jan S. (jan_s262)


Angehängte Dateien:

Lesenswert?

Ich habe das Programm angepasst. Schrittmotortreiber1 läuft nun nachdem 
ich Step und Dir Pins im Programm getauscht habe.
Schrittmotortreiber2 läuft leider immer noch nicht.

von Martin (Gast)


Lesenswert?

Dann mach doch mal die // weg ;)

von Johannes S. (Gast)


Lesenswert?

Das Problem dürften falsche Pinnummern sein. Im Code werden virtuelle, 
targetabhängige Nummern verwendet, die haben aber nichts mit den 
Pinnummern des MCU Gehäuses zu tun. Stepper2 programmiert damit evtl. 
'verbotene' Pins um.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.