WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Schrittmotor an Arduino - Schrittzahl begrenzt

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 03.06.2014, 11:09     Titel: Schrittmotor an Arduino - Schrittzahl begrenzt
  Antworten mit Zitat      
Liebe Leute,

zur Ansteuerung eines Schrittmotors nutze ich ein Arduino Uno Rev3. Mit folgendem Code funktioniert erst einmal alles:

Code:
function [] = Schrittmotor_Arduino(motor_no, richtung, modus, geschwindigkeit, schritte)
% Funktion zur Ansteuerung eines Schrittmotors mittels Arduino und
% AdafruitMotorShield V2.0
% Autor: F. Rothe, 06/2014
% Beispielaufruf: Schrittmotor_Arduino(1, 0, 2, 200, 200)
clc

SerialPort = instrfindall;
if isempty(SerialPort)
    AdafruitMotorShield = arduino('COM8');
    assignin('base', 'AdafruitMotorShield', AdafruitMotorShield)
else disp('Schnittstelle existiert bereits')
    AdafruitMotorShield = evalin('base', 'AdafruitMotorShield');
end

% Motornummer
if motor_no == 1
    disp('Motor 1');
elseif motor_no == 2
    disp('Motor 2');
else disp('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';
else disp('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)

end
 


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?

Vielen Dank und beste Grüße

pfeili

arduino.m
 Beschreibung:

Download
 Dateiname:  arduino.m
 Dateigröße:  96.66 KB
 Heruntergeladen:  381 mal
Private Nachricht senden Benutzer-Profile anzeigen


pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 03.06.2014, 15:19     Titel:
  Antworten mit Zitat      
Liebe Leute,

ich habe inzwischen das hier gefunden:

http://www.mathworks.de/de/help/mat.....nd-reloading-classes.html

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.

Viele Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 03.06.2014, 16:05     Titel:
  Antworten mit Zitat      
...ich habe jetzt ein wenig weiter probiert und meinen Code folgendermaßen verändert:

Code:

function [] = Schrittmotor_Arduino(motor_no, richtung, modus, geschwindigkeit, schritte, durchlaeufe)
% Funktion zur Ansteuerung eines Schrittmotors mittels Arduino und
% AdafruitMotorShield V2.0
% 06/2014
% Beispielaufruf: Schrittmotor_Arduino(1, 0, 1, 32, 200, 13)
clc

SerialPort = instrfindall;
if isempty(SerialPort)
    AdafruitMotorShield = arduino('COM8');
    assignin('base', 'AdafruitMotorShield', AdafruitMotorShield)
else disp('Schnittstelle existiert bereits')
    AdafruitMotorShield = evalin('base', 'AdafruitMotorShield');
end

% Motornummer
if motor_no == 1
    disp('Motor 1');
elseif motor_no == 2
    disp('Motor 2');
else disp('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';
else disp('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

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

Code:
AdafruitMotorShield.stepperStep(motor_no, richtung, modus, schritte)


ausgeführt wurde. Oder hat hier jemand eine Idee?

Viele Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 04.09.2014, 12:16     Titel:
  Antworten mit Zitat      
Ich habe es jetzt folgendermaßen gemacht:

Code:

while schritte > 255
    run_AdafruitMotorShield(AdafruitMotorShield, richtung, 255)
    schritte = schritte - 255;
end
run_AdafruitMotorShield(AdafruitMotorShield, richtung, schritte)
 


Ahoi. pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.