PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorcontroller mit 2xL298 über RS232



qube
14.03.2006, 16:55
Moinsen Jungs,
also ich bin total neu auf dem Gebiet der microcontroller Technik, möchte mir aber einen leistungsfähigen robot bauen.
Doch zunächst habe ich ein Problem in der Ansteuerung von 4 Motoren. Ich möchte zwei L298-Motortreiber benutzen. Da ich diese mit meinem PC steuern will, kann ich ja nicht die Parallele-Schnittstelle benutzen, da diese nur 8-Outports zur Verfügung stellt, und die L298er Pro Motor 3 In-Ports benötigen (PWM, In1, In2). Allerdings kam mir die Idee dieses Problem mit einem Microcontroller (ATMega16?) zu lösen und zwar folgendermaßen:

Der Microcontroller stellt ja genügend IO-Ports zur Verfügung, meine Idee war nun, den MC so zu Programmieren, dass dieser ständig über RS232 an den PC angeschlossen ist und von dort aus 5 mal pro Sekunde eine Folge von 4 mal 8bit Nummern geschickt bekommt die nach folgendem Muster angeordnet sind:

Nummer:

00 00 1000
^^ ^^ ^^^
Motornummer Drehrichtung Geschwindigkeit

Diese Message wird jeweils 4 mal hintereinandergeschickt mit den folgenden Parametern:

- Motornummer 00, 01, 10, 11 um die Motoren 1, 2, 3 und 4 zu
addressiern.
- Drehrichtung ebenfalls 2 Bit, mit 00 für Bremsung, 01 für Vorlauf,
10 für Rücklauf und 11 erneut für bremsung.
- Geschwindigkeit soll eine 4 Bit Zahl sein, die ein emuliertes PWM-
Signal in 16 Stufen (0-15) unterteilt und somit die Geschwindigkeit
regelt

Alles in Allem würde 5 mal pro Sekunde jeder Motor mit Motornummer, Drehrichtung und Geschwindigkeit addressiert geupdated werden.

Ich dachte daran die Regelung mit einem Delphi-Programm zu übernehmen, dass eben 5 mal in der Sekunde diese 4 x 8Bit-Folge an den Controller sendet.

Meine eigentliche Frage ist schlichtweg, was ihr davon haltet, beziehungsweise ob es möglich ist oder ob es einfacher, besser oder effiezienter geht.

Danke sehr.

Grüße aus Wiesbaden

qube

x-ryder
14.03.2006, 20:07
es ginge einfacher, wenn du den parallelport benutzt, und du legst einfach alle L298 auf die selben pins (3 stück) und nimmst dann weitere 3 pins zum multiplexen, so dass du mit diesen pins die L298 enablen kannst, oder eben nicht ^^

Martin

sigo
15.03.2006, 13:47
EIn Microcontroller hat den Vorteil, dass der ja zwischendurch, also dann 200ms lang schritte erzeugen kann, soviele, wie du ihm halt sagst..
Somit hat der µC seine Existenzbereichtigung allemal.

Ansonsten geht es natürlich auch direkt vom PC, z.B. indem du ein oder 2 Latches (z.B: 74HC373) nimmst, und z.B. die Infos für die Drehrichtung (IN-1 und IN-2) dort speicherst, da diese sich ja nicht oft ändern. Dann brauchst du die meiste Zeit nur noch die PWM Leitungen der Motoren zu steuern. Und bei Änderung eben das Latch neu schreiben. Wegen konstanter Taktzeiten kannst du natürlich auch jedesmal das Latch updaten, dann den Rest der Zeit PWM machen...

Sigo

Superhirn
15.03.2006, 21:02
Du könntest auch via serieller die daten an den uC schicken und der AVR nimmt dann die daten entgegen und lässt dann die motoren so laufen. Du müsstest auch nur die abgeänderten daten übertragen, denn die alten bleiben ja im uC gespeichert, bis neue kommen. So hättest du dann auch mehr pins frei, welche du später auch als inputs verwenden kannst (wenn du dann auch daten an den PC schickst).

qube
15.03.2006, 23:46
danke, jetzt hab ich allerdings die frage, wie sende ich daten an den uC, hab ich spezielle Pins, TX und RX? Gibts da ne dll, mit der ich arbeiten kann um mit delphi die daten zu senden? Oder kennt sich jemand mit Delphi aus, wie man das machen kann? Im Moment bin ich nur Theoretiker und habe keinerlei Praxiserfahrung, nur mitm Parallelport... will aber unbedingt den seriellen port freihaben, hab andere sachen mit dem Parallelport frei.

Danke.

qube

Danke

Superhirn
16.03.2006, 13:46
Im Moment bin ich nur Theoretiker und habe keinerlei Praxiserfahrung, nur mitm Parallelport...
Dann empfehle ich dir mal mit einfachen uC sachen anzufangen. mal ein lauflicht auf einen avr/pic zu programmieren.
daten an den uC kannst du mit einem terminal (hyperterminal zb) machen. natürlich seriell. aber müsste auch mit parallelen port gehen. man kann ja auch 2 comp mit dem parport verbinden.
am uC hast dann die pins Rx und Tx zur kommunikation. wie du sie verwendest hängt vom compiler ab. mit bascom dürfte es nicht so schwer werden, auf irgendwelche seriellen befehle zu reagieren.

kalledom
16.03.2006, 16:20
Wenn Du einem Controller mit Schrittmotor-Endstufen vom PC aus sagen möchtest, wieviel Schritte in welcher Richtung SM Nr. 2 drehen soll oder ob SM 1 seinen Nullpunkt suchen muß, kannst Du etwas 'Vorarbeit' von mir down-loaden, alles mit SMOST (http://www.domnick-elektronik.de/download.htm) = SchrittMOtorSTeuerung.
Und hier (http://www.domnick-elektronik.de/projekte.htm#SMOST) wird Hardware dazu angeboten.

qube
17.03.2006, 20:03
moin, x-ryder - was bist du den für ein LOL, wenn ich 4 motoren unabhängig voneinander steuern will, geht das mit sicherheit nicht nach deiner Vorstellung.
Ich denke mal, ich werde die 4x8Bit jetzt über die Parallelschnittstelle senden, da ich die RS232 nicht raffe... zumindest unter delphi nicht. na ja, egal...

mfg

qube

x-ryder
17.03.2006, 20:36
ehm ma ne frage, hast du dir das angeschaut, aufgrund der trägheit des eisenkerns werden die motoren einfach weiterdrehen, der parallelpost arbeitet schnell, wenn die programmierung auch gut ist...

damit lässt sich wohl ne recht gute motorsteuerung bauen, du kannst das ganze sogar noch mit nem zähler verbinden, dann lassen noch mehr motoren anbringen, aber wenn du die lösung nicht verstehst iss das auch ok.

aber es wäre noch freundlich, die, die dir helfen wollen nicht zu beleidigen, nur mal son tipp

Martin