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
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=10690MaWin 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?
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.
> 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
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.
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
@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.
@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
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ß
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
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
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.
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
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?