ich habe zwei Arduinos, die beide verschiedene Motoren ansteuern sollen.
Der eine soll einen 24V 0,5A Motor ansteuern (vorwärts/rückwärts ohne Geschwindigkeitsregelung).
Der andere soll vier in Reihe geschaltete 6V bis 6A Motoren ansteuern (vorwärts/rückwärts UND Geschwindigkeitsregelung) -> Die Motoren werden in Reihe geschaltet und somit auf 24V betrieben, was ja die Stromstärke auf max. 6A für alle Motoren herabsetzt.
Des weiteren betreibt der zweite Arduino noch zwei Motoren (komplett synchron) 12V 1A (vorwärts/rückwärts dauerhaft auf niedriger Geschwindigkeit)
Ich wollte nun fragen welche der folgenden Motorsteuerungen ich benutzen kann für die jeweiligen Motoren (soll natürlich möglichst billig sein)
Hier noch meine Schaltpläne (ist noch einiges mehr drinne, aber ich hoffe das stört nicht) ps: die umschalten muss ich noch schauen , wie ich die realisiere oder ob ich die noch brauche, wenn ich eine Motorsteuerung habe, die das schon kann...
Was Du mit komplett synchron meinst verstehe ich nicht. Wenn beide Motore gleich schnell und in gleichen Drehwinkel drehen sollen ist das mit Gleichstrommotoren ohne großen Aufwand nicht zu schaffen.
Du brauchst bei den vorgeschlagenen Motortreibern keinen FET für die PWM sondern kannst das PWM vom Arduino direkt an den Treiberbaustein geben.
ich finde den Gedanken 4 Motore in Reihe zuschalten recht lustig, gehen wir mal vom Ideal aus, hast Du recht die 24 V müssten sich gleichmässig auf die Motore verteilen und jeweils einen Spannungsabfall von 6 Volt erzeugen.. die Annahme das der Strom mit 6A fliesst...ok....
Was passiert bei Fertigungstoleranzen der Motoren oder bei mechanischen beeinträchtigungen während des Betriebs ?? Wird einer der Motore gestoppt, ändert sich der Spannungsabfall über den anderen Motoren die dann zB. 8 Volt statt 6 Volt abbekommen...
könnte lustig sein.... aber wenns die Funktion nicht stört....
aber wenn ich das mit einer schleife lösen will (egal ob while oder for), dann ändert er einfach seine drehrichtung nicht. es ist so als wäre nur ein pwm ausgang da -.-
Wie kommst Du auf die Idee j nach - 255 herunterzuzählen?
analogWrite() akzeptiert Werte zwischen 0 (PWM Signal 0%) und 255 (PWM Signal 100%)
Grüße Uwe
Das ist egal. Also auf jeden Fall hatte ich das auch schon positiv und das mit negativ war mein letzter gescheiterter versuch. also das ganze geht auch nicht, wenn ich das positiv mache.
const byte pin5 = 5; //Ausgang zum "rechts-drehen"
const byte pin6 = 6; //Ausgang zum "links-drehen"
byte i = 0; //Zählvariable 1
byte j = 0; //Zählvariable 2
void setup() {
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
}
void loop() {
analogWrite(pin5, 0); //rechts aus
analogWrite(pin6, 0); //links aus
while (i<=255) { //langsam "rechts-drehen" hochfahren
analogWrite(pin5, i);
i++;
delay(100);
}
delay(1000); //"rechts-drehen" 1sec auf 255
analogWrite(pin5, 0); //rechts aus
analogWrite(pin6, 0); //links aus
delay(5000); //5sec alles aus
while (j<=255) { //"links-drehen" hochfahren
analogWrite(pin6, j);
j++;
delay(100);
}
delay(1000); //"links-drehen" 1sec auf 255
delay(5000); //5sec alles aus
}
so, habe den code nochmal verschönert
was passieren soll steht ja in den kommentaren...
so und jetzt zu dem was passiert :
er fährt rechts herrum langsam hoch, ist dann 1sec auf 255 und macht dann 5sec Pause, danach fährt er wieder hoch, aber diesmal wieder rechts... warum???
sonst funktioniert alles.
Dein Beispiel in Post #3 geht aber davon aus, das die Spannung des Arduino
und des Motors halbwegs identisch sind, das ist aber bei deinen 24V nicht der Fall.
Hier wirst du Probleme haben den P-Channel Mosfet zu sperren.
Schau dazu auch mal hier die Schaltung an:
ist allerdings auch nicht der Weisheit letzter Schuss, Beiträge dazu im Forum http://www.roboternetz.de/phpBB2/viewtopic.php?t=33067
ist aber einen Versuch wert...
Nach einigen probieren weiß ich jetzt Dein Problem.
Es ist ein Sw Fehler.
Du definierst die Variablen i und j als Byte, dh sie können Werte von 0 bis 255 annehmen. Wenn die Variable 255 ist und Du sie um 1 erhöhst bekommst Du den wert 0.
In der While-Schleife ist die Bedingung, daß die Schleife solange ausgeführt wird solange die Variable i kleiner gleich 255 ist. Da nach 255 nicht 256 kommt sondern 0 (da die Veriable 1 Byte lang ist) kommst Du nie aus der erste Schleife heraus und darum dreht der Motor immer in die selbe Richtung.
Lösung:
a) definire i und j als int;
oder
b) ändere die Bedingung in der while-Schleife; "while (i<255) { "
incrementiere i vor dem analogWrite();
Ich würde die Schaltung auch nicht mit Transistoren aufbauen sondern mit einem IC.