Forum: Mikrocontroller und Digitale Elektronik Ansteuerung von Servos, Ventile, Pumpe


von h-bridge (Gast)


Lesenswert?

Hallo,

ich habe folgendes Projekt:
Über einen Atmega (welchen ich nehme, weiß ich noch nicht, aber mit USB 
zur Kommunikation mit PC) möchte ich zwei Ventile, eine Pumpe und drei 
Servos ansteuern.

Ventile (je 5,5W @ 24VDC) kennen nur ein An oder Aus. Somit ist die 
Beschaltung recht einfach -> Transistor über einen Pin des uC schalten.
Ich überlege, ob ein ULN280X sinnvoll sei oder diskret besser wäre??

Bei den Servos (noch keine herausgesucht, bzw liegen im Keller 
verstaut..) und Pumpe (5W @ 24VDC) hab ich gerade Schwierigkeiten.
Geschwindigkeit und Richtung müßen anpassbar sein.
Geschwindigkeit -> PWM
Richtung bzw. Ansteuerung über H-Brücken.
Jedoch finde ich keine kostengünstige H-Brücken... evtl auch diskret 
aufbauen?
Aber bei den Leistungen bringt ja eigentl. der diskrete Aufbaue nichts, 
außer Platzverlust (da Transistoren ja nicht wirklich gekühlt werden 
müßen), oder?

Hättet ihr Vorschläge für H-Brücken bzw für Transistoren die hier 
hernehmen würdet?


Vielen Dank

Grüße

von Thomas E. (thomase)


Lesenswert?

Was für eine Pumpe ist denn das? Mir sind bisher nur Pumpen begegnet, 
die nur in eine Richtung pumpen. Oder habe ich da was verpasst?

mfg.

von MaWin (Gast)


Lesenswert?

> Jedoch finde ich keine kostengünstige H-Brücken

Ne ?

Pollin.de Schrittmotor-Treiber L298 100 912 2,75 € zu teuer ?

von h-bridge (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Was für eine Pumpe ist denn das? Mir sind bisher nur Pumpen begegnet,
> die nur in eine Richtung pumpen. Oder habe ich da was verpasst?
eine die pumpt und zieht ;)
also Ober- und Unterdruck erzeugen kann.
-> Diaphragm Pump 1410: 
http://www.gd-thomas.com/productSubCategoryList.aspx?tp=pv&tc=10690

MaWin schrieb:
>> Jedoch finde ich keine kostengünstige H-Brücken
>
> Ne ?
ne ;)

> Pollin.de Schrittmotor-Treiber L298 100 912 2,75 € zu teuer ?
hmmm.... gut das Argument zählt wohl jetzt nicht, dass der bei farnell 
nen guten Euro mehr kostet....
Aber die Bauform ist mir nicht untergekommen....
oder ich hät die Suche mal unterbrechen soll'n...


einer noch 'ne Idee wegen den Transistoren für die Ventile?

von h-bridge (Gast)


Lesenswert?

bzw ist mir schon untergekommen bei farnell nur das kommen eben noch 20€ 
porto dazu...
aber gut dass es pollin gibt...

von Karl H. (kbuchegg)


Lesenswert?

h-bridge schrieb:

> Ventile (je 5,5W @ 24VDC) kennen nur ein An oder Aus. Somit ist die
> Beschaltung recht einfach -> Transistor über einen Pin des uC schalten.
> Ich überlege, ob ein ULN280X sinnvoll sei

Ein ULN2803 kann 500mA.
5.5 / 24 = 230mA. Ist also im Rahmen

Oder natürlich Transistor od. FET od. MOSFET
http://www.mikrocontroller.net/articles/Standardbauelemente#Transistoren


> Bei den Servos (noch keine herausgesucht, bzw liegen im Keller
> verstaut..) und Pumpe (5W @ 24VDC) hab ich gerade Schwierigkeiten.
> Geschwindigkeit und Richtung müßen anpassbar sein.
> Geschwindigkeit -> PWM
> Richtung bzw. Ansteuerung über H-Brücken.

Aber nicht für Servos.
(Sind doch Standard-Modellbauservos, oder?)

Servos brauchen nichts, die haben ihre Elektronik selber mit. Die wollen 
einfach nur Pulse sehen.

von h-bridge (Gast)


Lesenswert?

> Ein ULN2803 kann 500mA.
> 5.5 / 24 = 230mA. Ist also im Rahmen
falls nur ein Ventil geschaltet wird... ansonsten 460mA und die 500mA 
können ja angebl. nur ein Kanal hergeben, wenn ich das Datenblatt 
richtig verstanden hab


>> Bei den Servos (noch keine herausgesucht, bzw liegen im Keller
>> verstaut..) und Pumpe (5W @ 24VDC) hab ich gerade Schwierigkeiten.
>> Geschwindigkeit und Richtung müßen anpassbar sein.
>> Geschwindigkeit -> PWM
>> Richtung bzw. Ansteuerung über H-Brücken.
>
> Aber nicht für Servos.
> (Sind doch Standard-Modellbauservos, oder?)

Jep, sind die Standard-Modellbauservos

> Servos brauchen nichts, die haben ihre Elektronik selber mit. Die wollen
> einfach nur Pulse sehen.
Hab mich grad etwas schlau gemacht... Habe gelesen dass die PWM-Ausgänge 
des uCs nicht für Servos geeignet sind, man soll lieber normale 
Ausgangs-Pins nehmen und dort ein PWM-Signal erzeugen. Stimmt diese 
Aussage?
Eine Verständnisfrage zu den Servos. Die Servos wollen ja 20ms Pulse 
haben. Je nach länge des Impulses dreht sich der Servo auf die 
gewünschte Position (Winkelstellung). zB 1ms := 10°, 19ms := 180°, 
verstehe ich das richtig?
Und wenn ich dann eine Position halten möchte, muß ich die entsprechende 
Impulsdauer durchgehend verschicken oder reicht ein 20ms Impuls der low 
ist?

Vielen Dank

von Karl H. (kbuchegg)


Lesenswert?

h-bridge schrieb:
>> Ein ULN2803 kann 500mA.
>> 5.5 / 24 = 230mA. Ist also im Rahmen
> falls nur ein Ventil geschaltet wird... ansonsten 460mA und die 500mA
> können ja angebl. nur ein Kanal hergeben, wenn ich das Datenblatt
> richtig verstanden hab

Hab das Datenblatt jetzt nicht im Detail studiert.

>> Servos brauchen nichts, die haben ihre Elektronik selber mit. Die wollen
>> einfach nur Pulse sehen.
> Hab mich grad etwas schlau gemacht... Habe gelesen dass die PWM-Ausgänge
> des uCs nicht für Servos geeignet sind, man soll lieber normale
> Ausgangs-Pins nehmen und dort ein PWM-Signal erzeugen. Stimmt diese
> Aussage?

Wo hast du das denn her?

Aber in einem stimmt es schon. Wenn es mehrere Servos sind, kommt man 
mit einer Timer generierten Hardware PWM nicht weit. Aber ist kein 
Beinbruch, Servos sind einfach anzusteuern.

> Eine Verständnisfrage zu den Servos. Die Servos wollen ja 20ms Pulse
> haben.

Vergiss die 20ms. Die sind das Unwichtigste in der ganzen 
Servoansteuerung. Möchte bloss wissen, warum immer alle auf diesen 20ms 
rumreiten.

> Je nach länge des Impulses dreht sich der Servo auf die
> gewünschte Position (Winkelstellung). zB 1ms := 10°, 19ms := 180°,
> verstehe ich das richtig?

Nein.
Ein Servopuls ist zwischen 1 und 2 ms lang.

Und dann kommt eine Pause bis zum nächsten Puls. Aber wie gesagt: Ob 
dieses Pause so lang ist, dass bis zum nächsten Puls 20ms vergehen, oder 
ob das 10ms oder 25 sind, ist dem Servo völlig egal. Der 1 bis 2ms Puls 
enthält die Positionsinformation und nicht die Pause bis zum nächsten 
Puls.

> Und wenn ich dann eine Position halten möchte, muß ich die entsprechende
> Impulsdauer durchgehend

durchgehend
Ist kein Problem. Servopulse erzeugt ein Timer im Hintergrund mit Hilfe 
einer ISR. AUch für 10 Servos gleichzeitig oder mehr wenns sein muss.

von Ulli-B (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Und dann kommt eine Pause bis zum nächsten Puls. Aber wie gesagt: Ob
>
> dieses Pause so lang ist, dass bis zum nächsten Puls 20ms vergehen, oder
>
> ob das 10ms oder 25 sind, ist dem Servo völlig egal. Der 1 bis 2ms Puls
>
> enthält die Positionsinformation und nicht die Pause bis zum nächsten
>
> Puls.

Die Pause ist nicht ganz so unwichtig.
Sie hat aber nichts mit der Positionierung zu tun, sondern mit dem 
Halten einer Position.
AUSNAHME: Handelt sich um ein digitales Servo, so gelten andere Regeln.

Aber nehmen wir an, es ist ein "analoges" Servo.
So ein Servo vergleicht mit Hilfe des Imulses (der mit 1,5 bis 2,5 ms) 
seine aktuelle Stellung mit der Soll-Stellung. Weichen beide von 
einander ab, so wird das Servo versuchen die Soll-Position an zu fahren.
In den Impulspausen (von ca 5-20ms) weiss das Servo allerdings nicht, wo 
es denn eigentlich hin soll. Erst beim nächsten Impuls kann es wieder 
vergleichen und bei Bedarf verfahren.
Wirkt also auf das Servo ein Drehmoment, so wird immer in den 
Impulspausen das Servo von seiner Sollposition weg gedreht. Kommt dann 
wieder ein Impuls, so wird es wieder positioniert.

Allerdings sind 20ms Pause so kurz, dass die mechanische Trägheit meist 
nicht ausreicht, um das Ganze sichtbar zu machen.
Bei stark belasteten Servos hört man aber ein Servobrummen. Dieses 
Brummen ist ungefähr ein 50Hz-Brummen eben wegen der ca. 20ms Pausen.

Zusammengefasst: Je kürzer die Impulspause, desto besser hält ein 
(analoges) Servo seine Position.

Noch etwas: Die Impulspause sollte nicht zu kurz sein, sonst erkennt das 
Servo die Pause nicht als Pause.

Noch zur Ausnahme, Digitalservos:
Ein Digitalservo benötigt wirklich nur einen Impuls um eine Position an 
zu fahren und zu halten.
Dabei besteht aber auch ein Gefahr: Gibt der Impuls eine für das Servo 
mechanisch nicht zu erreichende Position vor (durch äussere Begrenzung, 
mechanischer Anschlag oder so), so versucht das Servo trotzdem diese 
Position zu erreichen. Und dies versucht es so lange, bis es sich zur 
Not auch selbst zerstört. Und dies natürlich auch mit der dazu nötigen 
Stromaufnahme.

MfG
Ulli-B

von Karl H. (kbuchegg)


Lesenswert?

@Ulli & Hannes

Endlich bin ich nicht mehr alleine als Rufer in der Servo Wüste :-)
ICh hab mal angefangen den Artikel
Modellbauservo Ansteuerung
etwas aufzublasen und brauchbar zu machen.

Würde mich freuen wenn ihr mich unterstützen würdet. Denn das Thema 
Servo-Ansteuerung kommt jede Woche 10mal und auf Dauer wird es fad, 
immer das Gleiche zu erzählen.

Hannes: Könntest du aus deinem Fundus ein paar Assembler-Brocken 
beisteuern? Um die Mehr-Servo-Ansteurung über Timer in C kümmere ich 
mich.

Was zb noch fehlt ist die Behandlung des Themas: Wie wird ein Servo 
angeschlossen (Signalleitung, Masse; wie ist das mit den Farben der 
Adern am Servokabel) bzw. Stromversorgung; was tun wenn das Servo den µC 
stört, etc.

Auch ein Abschnitt über Unterschiede Analog/Digital Servos wäre nicht 
schlecht. Ausserdem gibt es ja seit neuestem auch Servos die über ein 
Bussystem angeschlossen werden, aber von denen weiß ich nichts. Wenn da 
Informationen vorhanden sind, immer her damit.

von Ulli-B (Gast)


Lesenswert?

@Karl-Heinz

Anschlusskabel, Farben, usw.. kann ich mal den Anfang machen.
Unterschiede Analog/Digital werde ich auch mal schauen was ich 
beisteuern kann.

Dauert aber etwas bei mir ... bin jetzt vor Weihnachten noch recht viel 
unterwegs.

MfG
Ulli-B

von h-bridge (Gast)


Lesenswert?

Hallo,
Vielen Dank für die ausführlichen Erklärungen!

Ich bin jetzt wieder dazu gekommen mich mit dem obigen Projekt zu 
beschäftigen.

Bin gerade dabei den Code "Signalerzeugung für 1 Servo mittels Timer 
(C)" zu verstehen (aus dem neuerstellten Tutorial).
Soweit ist alles klar, nur mit dem Register OCR1A ist mir etwas nicht 
klar.
Darin werden die "Millisekunden" gespeichert, aber wie kommt das Signal 
an den Servo bzw wo muß ich den Servo anschliessen?
Und wieso gibt es ein Delay von 50ms?

Kleine Anmerkung:
 Schreibt vllt. hinter dem Befehl cli() noch den Kommentar, dass hiermit
 der Interrupt deaktiviert wird.

Gruß

von h-bridge (Gast)


Lesenswert?

Hallo,

nachdem ich nochmal in mich gegangen bin, und das Datenblatt zum 
wiederholten mal gelesen habe, hat sich die Anschlussfrage erledigt.
Jedoch ist dabei eine neue Frage aufgekommen. Ich programmiere den uC 
über SPI, kann ich dann dennoch den Pin des MOSIs als PWM-Ausgang 
benützen (wenn SPI-Stecker abgesteckt) ?

Grüße

von Karl H. (kbuchegg)


Lesenswert?

h-bridge schrieb:

> Jedoch ist dabei eine neue Frage aufgekommen. Ich programmiere den uC
> über SPI, kann ich dann dennoch den Pin des MOSIs als PWM-Ausgang
> benützen (wenn SPI-Stecker abgesteckt) ?

Welchen Mega willst du denn benutzen?
Ich kenn zwar nicht viele, aber bei allen ist MOSI auf einem ganz 
anderem Pin als dem, auf dem das Hardware-PWM Signal rauskommt

von Karl H. (kbuchegg)


Lesenswert?

h-bridge schrieb:

> Kleine Anmerkung:
>  Schreibt vllt. hinter dem Befehl cli() noch den Kommentar, dass hiermit
>  der Interrupt deaktiviert wird.

Wozu?
Wer nicht weiß, was cli() bzw sei() machen, sollte erst mal die 
Grundlagen lernen.
Ein Kommentar sollte niemals in Worte fassen, was sowieso schon im Code 
steht. Im Code steht cli() und jeder AVR-C-Programmierer weiß, dass 
diese Funktion für 'CLear Interrupt Bit' steht. Daher braucht man das 
auch nicht im Kommentar angeben. Viel interessanter ist es, warum hier 
beim Zugriff die Interrupts kurz gesperrt werden.

Dieser Code muss sowieso noch überarbeitet werden. So wie er jetzt ist, 
ist er nämlich im Bedienteil falsch. Aber seis drum.

Die 50ms?
Die sind das Entprellen und Autorepeat des kleinen Mannes und haben mit 
der Servoansteuerung im eigentlichen Sinne nichts zu tun. Da gehts also 
nur um Tastenauswertung. Wird auch noch ersetzt, wenn die 
Austauschprogramme verfügbar sind.

von h-bridge (Gast)


Lesenswert?

Ich benutze den Atmega8.
PB3 - MOSI (SPI Bus Master Output/Slave Input)
      OC2 (Timer/Counter2 Output Compare Match Output)


Mit dem cli() und sei() ist schon richtig, mir ist es nur aufgefallen, 
da es bei sei() dabei stand... aber eine Erklärung warum ist vllt für 
einige auch nicht schlecht.

Aber da der Code eh noch überarbeitet wird,.... vllt anmerken, dass er 
noch in Bearbeitung ist, sonst erhaltet ihr vllt noch par Threads, dass 
der nicht funktioniert...

Grüße

von Karl H. (kbuchegg)


Lesenswert?

h-bridge schrieb:
> Ich benutze den Atmega8.
> PB3 - MOSI (SPI Bus Master Output/Slave Input)
>       OC2 (Timer/Counter2 Output Compare Match Output)

und du hast den Code auf den Timer 2 umgearbeitet?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.