Ist erfahrungsgemäß so bei L293 2-Pin-Steuerung statt 3-Pin-Steuerung.
Das ganze macht aber eh keinen Sinn ohne Rotationsencoder bzw. ohne Servos.
Aber murkst euch eben irgendwas zurecht, ich bin dann hier raus!
Bitte mal erklären, warum die das tun sollen! Wenn die Ausgänge des Arduino undefiniert flackern würden, dann würden die so oder so unkontrolliert los laufen. Ob beim Uno oder beim Mega. Solange die Aktivierungspins nicht aktiviert sind, also kein High-Signal anliegt, laufen die Motoren sowieso nicht. Und solange die andern Eingänge dasselbe Signal erhalten, laufen die Motoren auch nicht. Außerdem reagieren die Motoren aufgrund ihrer natürlichen Trägheit so schnell auch nicht, dafür muss sich erst ein Magnetfeld aufbauen, was seine Zeit dauert.
Einen Uno hat er schon, einen Mega muss er erst kaufen.
Geändert von Moppi (17.09.2018 um 14:06 Uhr)
Ist erfahrungsgemäß so bei L293 2-Pin-Steuerung statt 3-Pin-Steuerung.
Das ganze macht aber eh keinen Sinn ohne Rotationsencoder bzw. ohne Servos.
Aber murkst euch eben irgendwas zurecht, ich bin dann hier raus!
https://www.bing.com/images/search?view=detailV2&ccid=C28JEk0U&id=41547D992F30 078E03CDA61E40D70D51DD2FAF38&thid=OIP.C28JEk0UEwRU M29giJ3ycgHaEj&mediaurl=https%3a%2f%2fwww.robomart .com%2fimage%2fcatalog%2fRM0055%2f01.jpg&exph=298& expw=484&q=H-Bridge+IC+mit+4+Motoren&simid=608005971116952354&s electedIndex=67&ajaxhist=0
Das habe ich in Netz gefunden, aber ich glaube, das es nicht das richtige ist oder? 2 Pins pro Motor...
Also ich höre mir gern zwei Meinungen an und wenn es machbar ist, teste ich die auch. Bitte nicht gegenseitig hier das Thema "erwärmen" Ich bin um jede Hilfe dankbar! Und ich möchte gern es richtig beigebracht bekommen.
Zwar weiß ich viel, doch möcht' ich alles wissen.
Man kann immer mehrere Wege beschreiten. Entweder man macht etwas über Multiplexer, dann spart man I/O-Ports oder man macht es über Parallelanschaltung, dann benötigt man mehr I/O-Ports. was nun dazu kommt, ist, dass Du sicher noch Eingänge benötigen wirst. Deshalb käme man beim Arduino Uno nicht um einen Multiplexer für die Ausgänge herum. Bei den Eingängen kann es dann ähnlich aussehen. Bei einem Multiplexer legst Du immer zuerst eine Adresse an. Bei 2 Bit (2 Ausgänge) sind das 4 Zustände: 0-0, 0-1, 1-0, 1-1. Der Multilexer schaltet, je nach Auswahl, das Logiksignal des Eingangs auf einen von vier Ausgängen. Damit könnte man einen PWM-Ausgang auf 4 Ausgänge am Multiplexer durchschalten, mit 2 Adressleitungen. Würde man 3 Ausgänge zur Adressierung verwenden, wären das 8 Zustände: 0-0-0, 0-0-1, 0-1-0, 0-1-1, 1-0-0, 1-0-1, 1-1-0, 1-1-1. Damit könnte man ein PWM-Signal mit 3 Adressleitungen auf 8 Ausgänge durchschalten. Man würde mit 4 Ausgängen 8 ansteuern können, allerdings nicht gleichzeitig.
Der Arduino Mega hat einfach mehr Ein- und Ausgänge, so dass man keinen Umweg gehen müsste.
Bei Deinem Link oben, ist der Aktivierungspin auf HIGH gelegt, damit dreht der Motor entweder in die eine oder die andere Richtung, mit konstanter Drehzahl. Das wäre auch möglich! Dann hast Du pro Motor 2 Leitungen vom Arduino, das macht dann 10 Leitungen, bei 5 Motoren. 12 Leitungen hättest Du am Arduino Uno und dann noch die serielle Schnitstelle (Pin 0 und 1). Aber die Drehzahl ist dann nicht steuerbar. Das entspricht dann der manuellen Handhabung dieses einfachen Roboterarmes, nur dann über Arduino. Die Änderung der Motordrehzahl ist ja beim dem Arm eigentlich nicht vorgesehen. Wäre aber sicher: .
Ohne Steuerung der Drehzahl über PWM ist es dann noch etwas einfacher. Pro Motor legt man jeweils 2 Leitungen an den Arduino. Die Pins am Arduino müssen als Ausgang geschaltet sein. Bei 0-0 an den Asugängen des Arduino würde der Motor stehen, bei 1-1 an den Ausgängen des Arduino würde der Motor stehen. Bei 1-0 an den Ausgängen des Arduino würde er in eine Richtung drehen und bei 0-1 in die andere Richtung.
Geändert von Moppi (17.09.2018 um 14:49 Uhr)
@Moppi,
Wenn man mit den Multiplexer nur einzeln und nicht parallel die Motoren ansteuern kann, kann ich diese Lösung für mein Vorhaben nicht gebrauchen.
Also bleibt nur noch der Maga + 3xL293d übrig oder?
Zwar weiß ich viel, doch möcht' ich alles wissen.
Die drei L293D kannst Du auch am Arduino Uno betreiben. Wenn Du auf PWM verzichtest. Wie gesagt, das ist bei dem Arm ja nicht vorgesehen, dass der drehzahlgesteuert betrieben wird. Sondern nur mittels Motor An und Motor Aus, in die eine oder die andere Richtung. Zwei Leitungen für 5 Motoren = 10 Steuerleitungen. 12 I/O-Ports stehen am Uno zur Verfügung (ohne dem ser. Port). Du hast dann noch 2 I/O-Ports am Uno übrig. Und dazu noch 5 Analoge Eingänge zur Konvertierung Analoge Spannung in digitalen Wert. Die analogen Eingänge könnte man auch noch als Digitale missbrauchen. Denn wenn Du die ausliest, bekommst Du einen Wert, der der Höhe der angelegten Spannung entspricht. Ein digitales High-Signal am analogen Eingang entspricht dann einem Wert von größer 500. Ein digitales Low-Signal am Analogeingang entspricht dann einem Wert von kleiner 350. Meist sind die Unterschiede noch größer, so dass Low einem Wert von kleiner 10 entspricht und High einem Wert größer 800. Auf diese Weise hat man noch 5 Eingänge und 2 Ausgänge übrig. Ser. Schnittstelle sind nochmal 2 digitale I/O Ports.
Willst Du später noch Sensoren dran machen, könntest Du einen Arduino Mega nehmen. Um alles auf einem Board zu steuern. Der Mega hat schon 54 digitale I/O-Ports.
Hier sind mal alle Arduino Boards, Unterschiede beschrieben: https://www.generationrobots.com/blo...arduino-board/
Du solltest auch mal ein Auge auf das Arduino Mega ADK werfen.
Für 5 Motoren mit PWM-Steuerung sind das 15 Ports. Dann bleiben noch 39 übrig. Die Analogen kommen noch dazu.
Wenn der Arm bewegt wird, brauchst Du maximal 4 Motoren davon. Der Fünfte ist für den Greifer (auf und zu).
Zur Verdeutlichung
Ich habe mal die Schaltung aufgebaut:
In der ganzen Wuselei habe ich die wichtigen 2 Kabel in Grau gesteckt.
Grau: Das sind die beiden Datenkabel, mit denen der Arduino auf Pin#2 und Pin#7 den Motor steuert.
Orange: 5V vom Arduino zum IC und 5V zum Motor, als "+".
Rot: Kabel "+" vom Motor.
Schwarz: Kabel "-" vom Motor.
Braun: Aktivierungspin am IC, ist auf +5V angeschlossen, damit der Motor drehen kann.
Grün: "+" Versorgungsspannung für Motor.
Gelb: "-" Versorgungsspannung.
Blau: Masse "Ground" vom Arduino zur Außenbeschaltung.
Statt den Motor an 5V anzuschließen (links außen orangenes Kabel), kann man den auch an 9V oder 12V anschließen oder eine andere Spannung. Der Motor läuft übrigens nicht von alleine an, wenn das Board bootet, also an Spannung angeschlossen wird. Erst, wenn im Programm die Pins entsprechend auf LOW und HIGH gesetzt sind.
für den Arduino das Programmbeispiel:
Code:void setup() { pinMode(2, OUTPUT); // Port als Ausgang schalten pinMode(7, OUTPUT); // Port als Ausgang schalten } void loop() { //Motor steht digitalWrite(2, LOW); digitalWrite(7, LOW); //Pause 5 sec delay(5000); //Motor Richtung 1 digitalWrite(2, HIGH); digitalWrite(7, LOW); //Pause 2 sec delay(2000); //Motor Richtung 2 digitalWrite(2, LOW); digitalWrite(7, HIGH); //Pause 2 sec delay(2000); }
Hier nochmal ein anderer Link: https://www.maxphi.com/dc-motor-inte...duino-tutorial
Wechselnde Motorsteuerung
Um zwei Motoren abwechseln zu steuern, kann man Enable-Pin#1, vom L293D über einen Inverter ansteuern und den Enable-Pin#9 direkt. So geht dann ein Ausgang, des Arduino, direkt auf den Pin#9 oder #1 und außerdem an ein Nicht-Gatter. Das Nicht-Gatter geht am Ausgang auf den zweiten Enable-Pin, des L293D. Je nachdem, ob der Ausgang am Arduino dann LOW oder HIGH geschaltet ist, ist dann entweder der eine Motor oder der andere Motor, von zweien, aktiviert. So kann man zwei Motoren an einem L293D mit 3 Leitungen vom Arduino abwechselnd steuern.
Wenn man nur einen Inverter benötigt, kann man den z.B. auch aus einem NPN-Transistor und mit zwei Widerständen aufbauen: Eingang über 1MOhm, an Basis Transistor; Kollektor Transistor über 10kOhm an +5V; Emitter Transistor an Ground; Ausgang ist dann direkt am Kollektor Transistor.
Wenn man den Greifer und einen anderen Motor nur im Wechsel ansteuert (was kein Problem darstellt und im Endergebnis nicht störend ist), dann braucht man 3 Leitungen, um zwei Motoren abwechselnd zu betreiben (statt 4 Leitungen). Auf obige Weise kann man weitere Motoren abwechseln betreiben. Man kann 4 Motoren betreiben, wovon jeweils 2 aktiv sind und benötigt 6 Steuerleitungen. Man kann 6 Motoren betreiben, wovon 3 aktiv sind und benötigt 9 Steuerleitungen.
Man könnte das bei zwei Motoren auf 3 Leitungen reduzieren, wenn jeweils nur ein Motor zur Zeit angesteuert wird.
Hierzu mein Vorschlag:
Damit hätte man 3 Leitungen eingespart (3 Ausgänge am Arduino).
Ausgangsvervielfachung mit 74HC595
Da ich mich gerade mit dem Thema beschäftige, bin ich, nach sehr langer Zeit, wieder mal über Schieberegister gestolpert. Damit kann man mit 3 Steuerleitungen 8 digitale Ausgänge realisieren. Man kann, wenn man mehrere Schieberegister hintereinanderschaltet, auch mit 3 Leitungen dann 16, 24, 32, 40, 48, 56 oder noch mehr Ausgänge ansteuern. Dabei wird jeweils 1 Bit an das erste Schieberegister übergeben und mit einem Takt weiter geschoben. Nach entsprechender Taktzahl sind dann alle Bit im Register und werden mit einem weiteren Signal am 74HC595 an die Ausgänge des Schieberegisters übernommen (Latch-Schieberegister).
Geändert von Moppi (19.09.2018 um 08:07 Uhr)
@Moppi,
vielen dank für die Tolle Erklärung!
Ich werde das erst mal so testen und Bericht erstatten, erst mal drei L293d bestellen und wenn ich dabei bin, werde ich auch einen Mega dazu bestellen.
Ich würde gern später das mit der Drehzahlsteuerung auch testen und dafür brauche ich ja einen Mega.
Das mit den Schieberegiester lass ich erst mal. Erst den ersten step machen...
Wenn das alles soweit klappt, wollte ich gern den Board mit einen bluetooth verdrahten und dann mit der App 'blynk' den Arm steuern. (sollte ja für klappen oder?)
Zwar weiß ich viel, doch möcht' ich alles wissen.
Ich habe der Vollständigkeit halber verschiedene Wege aufgezeigt. Grundlagen braucht man immer. Richtig haarig wird es, wenn man RAM-Speicher ansteuert. Diese ICs haben meist 8-Daten-Pins, aber dafür umso mehr Adress-Pins (>16 Stück bspw.).
Der L293 ist extrem alt. Ich würde modernere Alternativen suchen. Am Besten bei den Herstellern selbst (TI.com, Linear.com,...) oder bei großen Distributoren, auch wenn du nicht dort bestellst oder bestellen kannst (RS-Components, Distrelec, TME,.....).
Ich arbeite gerade mit dem L6205 (ist aber auch nicht der neueste).
MfG Hannes
Habe oben nochmal eine Aktualisierung eingebracht: 2 Motoren mit 3 Arduino-Ausgängen.
Hier in diesem Thema muss man auch noch mal auf ein anderes Problem hinweisen, dass Anfänger nicht bedenken, weil sie es nicht wissen können:
Selbst mit GHz-Prozessoren ist Echtzeitsteuerung komplexer Anlagen, schwierig bis unmöglich. Sowohl Softwarearchitektur, als auch Hardwarearchitektur machen hier einen dicken Strich, mitten durch diese Ideenblase.
Wenn ich also ein Board mit möglichst vielen I/O-Ports verwende, kann ich zwar viel anschließen, aber noch lange nicht zur selben Zeit steuern. Wenn nun zu 5 Motoren, die sich zur selben Zeit bewegen sollen und auch aktiv gesteuert werden müssen, noch Sensoren hinzukommen, deren Werte man erfassen und dann vielleicht auch noch kompliziert berechnen will, ist die Leistungsgrenze schnell erreicht. Für solche Aufgaben verwendet man eher aktive, statt passive Aktoren/externer Baugruppen. Das heißt nichts anderes, als dass man lieber mehrere kleinere Controller einsetzt, von denen jeder seine Arbeit übernimmt (dass dann ziemlich in Echtzeit) als nur einen einzigen Controller, der alles selber erledigen soll. Verschiedene Sensorbaugruppen sind bereits so aufgebaut, dass ein Sensor und ein IC zur ersten Datenverarbeitung auf der Platine untergebracht sind, die dann mit einem Master-Controller (Arduino Uno / Mega oder PIC etc.) kommunizieren. Servomotoren gehören auch zu den aktiven Aktoren, weil sie zum Beispiel einen bestimmten Winkel selbstständig anfahren können, sie besitzen schon die notwendige Steuerungselektronik dazu. Ein Master-Controller setzt dann nur einen Befehl an den Motor ab und steuert ihn nicht mehr aktiv selber. Deshalb lieber mal mit wenig anfangen, sich reinfuchsen - lernen und verstehen - und sich dann ein System, dass man benötigt, zusammenstellen. Das nächste Problem entsteht schon, wenn man Controller alleine betreiben will, ohne umfangreiche, externe Beschaltung. Einen Controller vom Arduino Uno kann man noch einfach so auf eine Lochrasterplatine setzen. Bei einem Controller vom Arduino Mega wird es schon schwieriger. Kosten spielen hier auch eine Rolle. Wenn man darüber nachdenkt, wie man Aufgaben auf mehrere Controller verteilt, um Dinge möglichst in Echtzeit zu erledigen, wird man schnell feststellen, dass es für ganz ausgefallene Fälle sinnvoll ist, mehr I/O-Ports zu haben, dass man aber für die meisten Fälle mit weit weniger auskommt. Oben habe ich ja schon ein wenig aufgezeigt, wie man so Dinge auch schaltungstechnisch optimieren kann. Solche Vorgänge nennt man auch Planung oder Entwicklung. Das ist ganz normal und gehört zur "täglichen Arbeit". Und ist, wie schon gesagt, auch notwendig, um Ziele plangerecht zu erreichen.
Damit ist dieses Thema noch nicht abgearbeitet, aber soll hier erst mal von meiner Seite dazu genügen.
Gruß, Moppi
Geändert von Moppi (19.09.2018 um 08:57 Uhr)
Lesezeichen