PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Motor an Serieller-schnittstelle



Douglas
17.10.2004, 21:50
Ich würde gerne einen Motor an die Serielle-schnittstelle anhängen. Der Motor braucht etwa 60-70 mA (4Volt), also kann ich ihn nicht direkt anhängen, ich brauche einen 2.Stromkreis. Nur wie kann ich die zwei Stromkreise verbinden.
Ich denke mal ich brauch einen Transistor, nur wie genau schaut dann die Schaltung aus?

RCO
18.10.2004, 09:39
;-) Ne, ne, ne...
Erstmal die Grundlagen der Seriellen Schnittstelle (RS232):
Über die serielle Schnittstelle werden immer nur Bytes gesendet, es gibt also keine dauerzustände außer halt 'kein Signal'. Wenn du einen motor an die RS232 anschließen willst, dann brauchst du einen Controller, der das gesendete Signal (byte) interpretiert.
Für deine Vorhaben, würde ich dir die Parallele Schnittstelle empfehlen, da hast du 8 Ausgänge, die du einzelnd setzen kannst. Außerdem 5 -8 Eingänge. Die Ansteuerung kannst du z.B. mit Delphi machen, aber auch mit VB, C etc... Die Idee mist dem zweiten Stromkreist ist schonaml ganz richtig. 60 - 70 ma ist nicht viel, da sollte ein Transisior eigenlcih reichen. Allerdings musst du umbedingt einen Widerstand vor den transistor schalten, sonst kannst du deine LPT-Schnittstelle fraggen. Am besten nimmst du einen optokoppler, dann kann nichts passieren. Bei größeren Motoren kann man einfach Relais nehmen, oder auch, je nachdem was alles erwartet wird, Motortreiber ICs...

MFG Moritz

Douglas
18.10.2004, 16:27
Wieso kann ich bei der seriellen schnittstelle keine Dauerzustände halten? Also ich hab mit C und Linux schon einmal die serielle schnittstelle programmiert und konnte LEDs beliebig lange aus und ein schalten.

Mit Relais kann ich es nicht machen weil ich die Motoren mit unterschiedlicher Frequenz betreiben will um die Geschwindigkeit zu regeln. Wenn ich dem gleichstrom-Motor den Strom nur in einer Frequenz von 10 HZ gebe dann sollte er langsamer laufen als wenn ich ihm dem Strom konstant gebe.

Mein problem ist allerdings wie die Schaltung ausschauen würde und welcher wiederstand das sein müsste. (Das ohmische gesetzt kann ich, ich weis aber nicht wie ich es in diesem Fall anwenden soll da ich nicht weis auf was es da an kommt)

RCO
18.10.2004, 16:32
Also wie du das mit der seriellen Schnittstelle angestellt hast, würde mich interessieren, du hast doch nur Tx und Rx, wie kannst du da mehrere Dioden anschließen?
Ich würde für deinen Fall einen Motortreiber benutzen: L293D, da gibt ne menge im Forum. Das was du mit den 10 Hz vor hast, nennt sich PWM, also Puls-weiten-Modulation, allerdings läuft es normalerweise so, das man ein Signal hat, z.B. 1 Khz, nun hat man 1000 Zyklen in einer Sekunde, die man je nach bedarf länger oder kürzer high, bzw. low setzt.

MFG Moritz

Douglas
18.10.2004, 17:00
Danke!
Werd mir das mit dem L293D mal anschaun!

RG
18.10.2004, 19:15
@Douglas:
statische Zustände kann ich mir bei der seriellen auch nicht vorstellen, vieleicht meintest du die parallele...
RG

Stoneman
18.10.2004, 20:20
es geht tatsächlich die RS232 so anzusteuern, das sie statische Zustände hat. Nur muss man hierzu die Bytes direkt in den UART oder was auch immer schreiben. Das ging zu den alten DOS-Zeiten noch relativ einfach, heute ist es nicht mehr ganz so einfach, aber es geht. Man kann jede Leitung einzeln steuern oder auslesen, je nach dem für welche Datenrichtung sie gedacht ist. Nur ist das nicht die feine Art, aber es reicht zu Experimentieren aus.
@Douglas schau mal im Datenblatt zur RS232-Schnittstelle nach, wieviel mA die tatsächlich liefert, denn ich meine das müsste bei den Stromstärken noch ohne zweiten Kreis gehen, da die RS232 +- 15V hat. Aber ich bin mir nicht ganz sicher.

RCO
18.10.2004, 20:37
Interessant, das war mir bisher noch nicht bewusst

Stoneman
18.10.2004, 20:57
das kommt ja auch aus der alten DOS zeit, unter windows geht das nicht ganz so einfach...

RCO
18.10.2004, 21:00
Ja, es hatte auch seine guten Seiten, wenn man noch ein anständiges DOS drauf hatte... jaja... Die alten Zeiten... ;-)

Blackbird
19.10.2004, 07:59
Die serielle Schnittstelle hat nicht nur RxD (pin2) und TxD (pin3), sondern auch noch DSR (pin6), DCD (pin1), CTS (pin8), RI(pin9) (alles Eingänge) und DTR (pin4), RTS (pin7) (alles Ausgänge). Masse ist Pin 5.
Diese Leitungen dien(t)en der Flußsteuerung mit Modems, Terminals usw.

Die kann man per Software (von 16bit-DOS bis WinXP!) permanet setzten und abfragen. Ohne irgendwelche Verrenkungen mit Treibern und so.
Erforderlich ist nur ein MAX232, wenn man TTL-Pegel (+5V) haben will. Wer mit der Spannung -10V (eingeschaltet) und +10V (ausgeschaltet) bei einer Stromergiebigkeit von ca. 5mA zufrieden ist, kann direkt an die Pins ran.

Unter C lautet der Befehl zum Setzten: EscapeCommFunktion ().

Hier ein kleines Beispiel, wie man über COM 1 das Pin 7 zwei Sekunden einschaltet, 2 Sekunden ausschaltet und danach dauerhaft einschaltet. Nach weiteren 2 Sekunden beendet sich das Programm. Läuft unter allen Microsoft-OS.


#include <windows.h>

int main (void)
{
HANDLE hPort;

hPort = CreateFile ("COM1",
GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);

EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten
Sleep (2000);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);

CloseHandle (hPort);

return (0);
}

Blackbird

19.10.2004, 08:07
@Blackbird: darum geht es doch hier, wenn man den Motor an RTS anschliesst kann man ihn in der Drehrichtung ändern, da +-10V Pegel, wenn man noch ein Relais an einen anderen Port anschliesst, so kann man dann auch den Motor an und ausschlaten. Kann es eigentlich sein, das dein Programm unter Windows läuft, da es eine Kommandozeilenapplikation ist? Denn unter Windows mit GUI dürfte es Probleme geben, oder? Ich kenne mich mit C nun nicht so gut aus.

Blackbird
19.10.2004, 08:31
@Gast,

Die Polarität der Pins gegenüber Masse kann nicht zum Richtungssteuern verwendet werden.
Auch ging es @Douglas um ein Pulsweiten-Steuerung. Die kann er mit zeitgesteuerten Ein- und Ausschalten EINER Leitung realisieren. Zur Richtungssteuerung würde ich einfach ein Relais mit 2 Wechseln an einem weiteren Pin nehmen (mit Verstärker natürlich).

Die PWM-Methode über die Pins hat aber einen Nachteil: das Task-Scheduling von Windows verlängert ab un zu mal einen Puls.

Das Programmbeispiel ist u.a. auch für die DOS32-Konsole unter allen Windows geeignet. Unter der GUI von Windows laufen die Befehle genauso. Nur ist die main-Funktion eine andere.

Ob C, C++ Delphi oder Pascal for Windows: die Funktionen der seriellen Schnittstelle sind für ALLE Compiler und Programmiersprachen unter Windows zugänglich (man muß sie nur finden in der Windows-API).

Unter W95 und W98 kann man sogar noch die "alten" DOS-16bit-Befehle inport() und outport() (bzw. inp() und outp() für Borland-Compiler) benutzen.


Blackbird

Stoneman
19.10.2004, 15:24
warum kann ich denn die richtung nicht durch die polarität des pins gegenüber masse durchführen ? Ob ich nun + und Gnd oder Gnd und + habe, ist das gleiche wie + und gnd und - und gnd.

20.10.2004, 06:20
Die Polarität der Pins gegenüber Masse kann nicht zum Richtungssteuern verwendet werden.

Vorwärts, Stop, Rückwärts sind 3 Zustände. Die Ausgänge der seriellen Schnittstelle (und auch der Parallelen) haben aber nur 2 Zustände.
Um auf 3 Zustände zu kommen muß man also 2 Ausgänge mit je 2 Zuständen (2 ^ 2 = 4) verwenden.


Blackbird

Stoneman
20.10.2004, 08:10
Moment, es geht hier nur um das Richtungssteuern. Wobei man sicherlich durch einstellen eines bestimmten Taktverhältnisses, wie bei PWM auch den Motor dazubringen kann stehen zu bleiben, aber normalerweise benötigt man noch ein Relais, das ist richtig, aber nur zum ein und ausschalten. Habe ich vorher schonmal als Gast erwähnt...

20.10.2004, 12:08
Wir haben aneinander vorbeigeredet ... und meinten das gleiche O:)

PWM mit Serial direkt erzeugen geht zwar, ist aber nicht konstant (Task-Scheduling).

Es gibt noch einen Trick, wie man exakte (stufige) Takte/Zeiten mit Windows unabhängig vom Task-Scheduling erzeugen kann. Etwas Hardware ist da aber notwendig.

Werden jedoch nur einmalige Pulse erzeugt, so kann die Prozeß-Priorität für die Ausgabe kurzzeitig hoch gesetzt werden. Dann sind die Pulse auch konstant lang.

Blackbird

RCO
20.10.2004, 12:28
Dann könnte man doch den L293 D nehmen! Ein Ausgang zur Richtungssteuerung, und ein PWM-Ausgang (wenn das klappt). Wenn er steht ist es ja egal, in welche Richtung er fahren würde.

20.10.2004, 21:23
Ich glaube man kann auch durch das setzen von Registern PWM Signale konstant erzeugen, das geht dann über die Baudrate und ist nicht ganz einfach

Blackbird
21.10.2004, 06:39
@Gast,
das geht nur unter 16-Bit-DOS! Und da auch nur mit dem "Trick" der Prozesspriorität. Setzen der Register ist jedoch ganz einfach:

int _outp( unsigned short port, int databyte );

COM1 hat meistens 0x3F8. Je nach UART sind dann bis zu 8 weitere Register (0x3F9, 0x3FA, ...) ansprechbar (schreiben und lesen), mit denen man so ziemlich alles einstellen kann (Baurdrate, Interrupt, Bytelänge, ...).

Und nichts anderes darf dann laufen auf dem DOS-Rechner.

Unter W95/W98 geht es schon nicht mehr, die Registerzugriffe sind zwar immer noch erlaubt, aber das Task-Scheduling läßt keine sichere Zeiteinstellung mehr zu.

Blackbird

21.10.2004, 15:12
Ich habe es aber schon geschafft unter Win98 Servos mit dieser Methode anzusteuern...
Es hat ja nicht wirklich was mit dem OS zu tun, denn soweit ich das weiß wird die Baudrate von der Hardware benötigt.