Schrittmotor Geschwindigkeit steuern!!!!
|
19.12.2020, 16:50
Beitrag #1
|
|||
|
|||
Schrittmotor Geschwindigkeit steuern!!!!
Habe eine Schrittmotorsteuerung geschrieben (Rechts-Linkslauf/ Geschwindigkeit) und alles funktioniert bis auf die Geschwindigkeitssteuerung von Motor 2-4 (Motor eins funzt).
Hier der Code: Code: //ISR(TIMER1_COMPA_vect) { Hatt irgendeiner eine Idee. Es wurden vier Timer aufgerufen und dort wird immr die gkleiche Funktion aufgerufen. Das ganze läuft mit einem Mega 2560. Gruß Fürst |
|||
19.12.2020, 17:00
Beitrag #2
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Ich würde Deine ISR als zu lang ansehen. Außerdem haben serielle Ausgaben in einer ISR nichts zu suchen. cli() und sei() machen in einer ISR auch nicht das, was Du Dir vorstellst. Tipp: In der ISR sind die Interrupts bereits gesperrt.
Hast Du Dir schon mal die MoBaTools angeschaut? Damit kannst Du Stepper einfacher steuern. Der Author ist auch hier im Forum vertreten. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
20.12.2020, 08:43
Beitrag #3
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Aber warum funzt es beim ersten und bei zwei-vier nicht??? die MoBaTools sin schon gut aber ich hätte halt gerne das ganze aus eigener Überlegung geschafft (Denksportaufgabe). Die seriellen Ausgaben sind auch nur zum debuggen, ich muß ja wissen ob es korrekt läuft und laut der seriellen ausgaben durchläuft das Programm den ganzen Code.
|
|||
20.12.2020, 08:51
Beitrag #4
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Sooooo falsch kann ich doch nicht liegen!!!!!
|
|||
20.12.2020, 09:19
Beitrag #5
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Du berücksichtigst nicht, dass eine Interruptroutine KEINE normale Funktion ist. Da gelten nunmal ein paar besondere Randbedingungen, die man unbedingt einhalten muss. Auch zum debugging darf man in eine ISR keine seriellen Ausgaben einbauen. Ob das funktioniert oder nicht, ist da eher zufällig. ISR sind auch zeitkritisch - auch und gerade wenn sie im Zusammenhang mit Timern genutzt werden. Da können die sich schonmal selbst überholen - wenn der nächste Trigger kommt, bevor die ISR durch ist.
Mir scheint schon, dass dir ein wenig Hintergrundwissen fehlt, um mit Interrupts zu arbeiten. Gruß, Franz-Peter |
|||
20.12.2020, 10:03
Beitrag #6
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Habs verstanden, aber gibt es nun irgendeine Möglichkeit die Geschwindigkeit eines Steppers in meinem Program zu regeln oder bin ich da total auf dem Holzweg????
|
|||
20.12.2020, 13:54
(Dieser Beitrag wurde zuletzt bearbeitet: 20.12.2020 13:54 von MicroBahner.)
Beitrag #7
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Also so wie die ISR jetzt ist kann sie nicht bleiben - das haben wir ja schon erklärt.
Ob das Prinzip überhaupt funktioniert, kann man anhand des Fragements nicht sagen, dazu bräuchte man einen kompletten Sketch aus dem auch die Definition der Variablen, und die Initiierung des Timers hervorgeht. So ist das nur raten, was Du da treibst. Gruß, Franz-Peter |
|||
21.12.2020, 21:44
Beitrag #8
|
|||
|
|||
RE: Schrittmotor Geschwindigkeit steuern!!!!
Der Programmcode vom ersten Beitrag ist falsch. Die Programmlogic stimmt nicht.
Ein Beispiel: Code: if (SS == 0) { Nach einem "if (SS == 4)" wird im Else-Zweig danch die nächste IF-Abfrage auf SS== 4 nicht mehr ausgeführt. vielleicht etwas deutlicher und besser zu verstehen, dass so etwas nicht funktioniert: Code: if(a==1){ wenn, gehört das so: Code: if(a==1){ Gruß |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste