% Motornummer if motor_no == 1 disp('Motor 1');
elseif motor_no == 2 disp('Motor 2');
elsedisp('Es existieren nur 2 Anschluesse (1 und 2) fuer Schrittmotoren.') return end
% Richtung if richtung == 0
richtung = 'forward';
elseif richtung == 1
richtung = 'backward';
end
% Schrittmodus if modus == 0
modus = 'single';
elseif modus == 1
modus = 'double';
elseif modus == 2
modus = 'interleave';
elseif modus == 3
modus = 'microstep';
elsedisp('Unzulaessige Schrittart') return end
% Setzen der Geschwindigkeit
AdafruitMotorShield.stepperSpeed(motor_no,geschwindigkeit);
% Motorfahrt mit Richtung, Modus und Schrittanzahl
AdafruitMotorShield.stepperStep(motor_no, richtung, modus, schritte)
Nun ist mein Problem, dass der Parameter 'schritte' nur max. den Wert 255 annehmen darf. Dies reicht mir aber nicht aus. Gibt es eine Möglichkeit, diese Grenze zu erweitern? Wenn ich sie überschreite wird mir folgende Meldung ausgegeben:
Zitat:
Error using arduino/stepperStep (line 2147)
Unallowed value for number of steps, the value must be an integer going from 0 to 255
Error in Schrittmotor_Arduino (line 49)
AdafruitMotorShield.stepperStep(motor_no, richtung, mode, schritte)
Zur Erweiterung der Schrittanzahl habe ich nun versucht, in der arduino.m (siehe Anhang) Zeile 2146 zu verändern, z. B. auf 2000 zu erhöhen. Dann erhalte ich jedoch eine Warnung:
Zitat:
Warning: The class file for 'arduino' has been changed; but the change cannot be applied because objects based on the old class file still exist. If you use those objects, you might get unexpected results. You can use the 'clear' command to remove those objects. See 'help clear' for information on how to remove those objects.
> In arduino>arduino.stepperStep at 2146
Ich merke aber deutlich, dass diese gesetzte Grenze nicht eingehalten wird. Wahrscheinlich macht er nach wie vor nur die 255 Schritte. Hat jemand eine Idee, ob ich daran etwas ändern kann?
bin jedoch zu wenig mit der Materie vertraut, als dass ich mir die hieraus wichtigen Informationen ziehen kann. Es scheint ja zu bedeuten, dass ich noch mehr tun muss, als nur in der Klasse herumzuschreiben, um die Änderungen wirksam zu machen.
% Motornummer if motor_no == 1 disp('Motor 1');
elseif motor_no == 2 disp('Motor 2');
elsedisp('Es existieren nur 2 Anschluesse (1 und 2) fuer Schrittmotoren.') return end
% Richtung if richtung == 0
richtung = 'forward';
elseif richtung == 1
richtung = 'backward';
end
% Schrittmodus if modus == 0
modus = 'single';
elseif modus == 1
modus = 'double';
elseif modus == 2
modus = 'interleave';
elseif modus == 3
modus = 'microstep';
elsedisp('Unzulaessige Schrittart') return end
% Setzen der Geschwindigkeit
AdafruitMotorShield.stepperSpeed(motor_no,geschwindigkeit);
for n = 1:durchlaeufe
% Motorfahrt mit Richtung, Modus und Schrittanzahl
AdafruitMotorShield.stepperStep(motor_no, richtung, modus, schritte) disp(n) end
Dabei ist mir aufgefallen, dass ich die Variable 'durchlaeufe' nie größer als 13 wählen kann. Von n = 1 : 13 klappt es, aber bei einem Wert von 14, 20 oder 1000 dreht der Motor trotzdem nur exakt 13x. Stelle ich die Schrittzahl auf 100 (halbe Umdrehung), so führt er maximal 13 halbe Umdrehungen exakt aus. Woran kann das liegen?
Weiterhin habe ich bemerkt, dass die Schleife nicht auf den ausgeführten Befehl wartet, sondern gleich durchzählt. Da ich keinen Rückgabewert nach erfolgter Ausführung erhalte (z. B. nach allen 200 Schritten), wird es wahrscheinlich schwer, in jedem Schleifendurchgang zu warten, bis
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.