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
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.
> Jedoch finde ich keine kostengünstige H-Brücken Ne ? Pollin.de Schrittmotor-Treiber L298 100 912 2,75 € zu teuer ?
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?
bzw ist mir schon untergekommen bei farnell nur das kommen eben noch 20€ porto dazu... aber gut dass es pollin gibt...
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.