Ich möchte für mein aktuelles Projekt zwei Servos (Tower Pro, MG995) von einem standalone Atmega168/328 mit der Servo-Bibliothek ansteuern. Das klappt auch alles gut soweit, nur beim Einschalten "zucken" die Servos ein bisschen, d. h. sie bewegen sich ein Stück nach links und dann, wenn das Signal vom µC da ist, stellen sie sich wieder zurück auf die gewünschte Position (auf der sie bereits beim letzten Ausschalten waren). Das möchte ich gerne unterbinden. Ich hab herausgefunden, dass das Problem nur auftritt, wenn die Servos vor dem Arduino oder gleichzeitig mit dem Arduino Strom bekommen. Das heißt, es muss irgendwie gewährleistet werden, dass die Servos während der Initialisierung des Arduinos keinen Strom bekommen, erst wenn dieser ein konstantes Steuersignal ausgibt, also dass der µC die Servos einschalten kann.
Wie würdet ihr das realisieren? Ein Mosfet wäre mir lieber als ein Relais, aber was für einen brauche ich und wie müsste man den einbauen?
Unten angehängt ist mein bisheriger, funktionsfähiger Aufbau. Die Schaltung wird mit 5 V - 7.2 V (Akkupack) betrieben (das brauchen die Servos), der Atmega mit 3.3 V über einen Spannungsregler (es hängen noch andere 3.3 V Sensoren dran). Die maximale Stromaufnahme der Servos liegt unter 5 A (Spitze), das sollte also der Mosfet können.
Gruß,
Marv
Das ist ein Crosspost vom "Motors, Mechanics, and Power"-Board aber da kommt bisher noch nichts zielführendes bei raus.
Oder generell etwas, dass als "Logic Level FET" bezeichnet wird. Hat gegenüber Standard-Typen wie dem BUZ11 u.ä. den Vorteil das er eine wesentlich niedrige Gate-Source-Spannung hat. D.h. er fängt schon bei 1V an zu leiten und schaltet bei 5V voll durch. Was die meisten MOSFETS nicht machen. Die brauchen i.d.R. 6-8V
Dann einfach Source an Masse. Drain an Masse des Motors, und die andere Seite des Motors an Vcc. Und ein 100k Widerstand von Gate gegen Masse. Im Prinzip genauso wie ein NPN, aber ohne Basiswiderstand, statt dessen mit dem Gate-Ableitwiderstand.
Danke, das ist doch schonmal was Einen NDP6020P hätte ich rumliegen. Der ist aber P-Kanal... würde es auch mit dem funktionieren? Oder soll ich mir doch lieber einen N-Kanaler holen?
Du kannst die Servos selbst ruhig mit dem Arduino steuern. Die Leitung zieht keinen Strom !
Sprich die Steuerleitung direkt auf den Pin.
Lediglich die Betriebsspannung solltest du dir woanders her holen - NICHT vom Ardduino selbst.
Z.B. separater Akku und dann die beiden Massen zusammenschalten.
Ich hab das schon gelesen und verstanden habe ich es auch, MGOS !
Es geht ja eben auch hier um die Initialisierungsphase der Servos selbst.
Er hat da immerhin schon recht nette "Trümmer", die ordentlich Anlaufstrom beim einschalten ziehen.
Deshalb -. eigentlich GRUNDSÄTZLICH - Servo-Betriebsspannung immer aus einer externen Quelle
und wie hier in diesem Fall schon gar nicht über den Arduino !
Auch wenn er die mit nem MosFET oder sonst was erst mal wegschaltet - je nach dem wie stabil seine Stromquelle für den Arduino ist,
hauts ihm vielleicht dann beim späteren einschalten die Spannung in die Knie und es gibt wieder einen Reset.
TERWI:
Deshalb -. eigentlich GRUNDSÄTZLICH - Servo-Betriebsspannung immer aus einer externen Quelle
und wie hier in diesem Fall schon gar nicht über den Arduino !
Auch wenn er die mit nem MosFET oder sonst was erst mal wegschaltet - je nach dem wie stabil seine Stromquelle für den Arduino ist,
hauts ihm vielleicht dann beim späteren einschalten die Spannung in die Knie und es gibt wieder einen Reset.
Let me get this straight: Nicht der Arduino versorgt die Servos, lediglich wird der Arduino von der gleichen Stromversorgung gespeißt. Der wird mit 3.3 V betrieben und hält lauft auch noch im Ernstfall mit 2.5 V weiter, aber es sollten genug Pufferkondensatoren da sein, die das eigentlich packen sollten. - Es funktioniert ja auch so wie's ist!
Wenn du das als Problem siehst, sag mir wie ich ohne weiteren Akku getrennte Stromversorgungen erzeugen kann. Mein eigentliches Problem löst das aber nicht.
Das Zucken hat lediglich die Ursache des fehlenden Steuersignals während der Arduino bootet.
Serenifly: Danke. Der P-kanal scheint dann zu Leiten, wenn das Gate negativer als die Source wird. Da ich aber gemeinsame GNDs (statt +)hab - sonst funktionieren die Servos nicht mehr - müsste ich dann statt mit HIGH und LOW mit LOW und Offen (Tristate = Input) arbeiten. Da müsste dann warscheinlich noch ne Diode zum Schutz rein, da sonst die 7 V des Gate (über den Pull-up) am Arduino-Pin anliegen.
Was das angeht bin ich leider absuluter Laie, vielleicht sollte ich da mal auf jemanden warten, der Ahnung hat
MGOS:
Das Zucken hat lediglich die Ursache des fehlenden Steuersignals während der Arduino bootet.
Könntest du dann nicht die Steuerleitung einfach mit einem Pullup oder Pulldown auf einen definierten Pegel legen?
Ein einfacher Pullup löst das Problem. Danke!
Das Problem das TERWI angesprochen hat trat jetzt leider auch auf. Trotz großer Kapazitäten an Pufferkondensatoren setzt sich das Arduino bei sehr hektischen Servobewegungen zurück. Bisher puffere ich hauptsächlich nach dem Regler, aber irgendwie macht es mich stutzig dass trotz der Puffer die Spannung so weit zusammenbricht. Kann es sein, dass Strom rückwärts aus den Caps durch den Regler fließt und im Servo verbraten wird? Hilft da eine Diode?
Das Problem mit den Servos hatte ich mal beim Mega8. Der Pullup hilft da, wie dir ja schon gesagt wurde.
Hilft da eine Diode?
Meiner Meinung nach würde ich sagen: "Einfach probieren ;)" zerstören wird sie auf jedenfall nichts. Obwohl mich das rücksetzen mit caps schon stuzig macht. Kannst du mal angeben welche Spannungsquelle du verwendest und welche Kapazitäten du wo verbaut hast?
Im Moment benutze ich ein 3 A Labornetzgerät (später nehm ich einen Akkupack). Insgesamt hab ich jetzt schon ca. 2000µF an Caps an das Arduino drangemacht, 1000µF hängt über den Servos. Sogar ein 1F Supercap, der das Arduino normalerweise sogar viele Minuten puffern kann löst das Problem nicht. Die Diode vor dem Spannungsregler hingegen schon
... da war Serenifly mit seinem Gedanken schneller.
Anderer Gedanke wäre noch: Wo und wann im Sketch definierst du denn die Ausgänge ?
Lege das doch vielleicht mal ganz nach vorne ....
Diese Probs mit Servos hatte ich auch mal. In meinem Heli arbeiten u.a. 3x HiTec HS6965HB.
Wenn ich einschalte und die Servos stehen z.B. noch nach dem Ausschalten auf einer anderen Position als zum Einschalten (z.B. andere Trimmung oder irgendwas zieht grade an den Steuerknüppeln), kommt da ein immenser Anlaufstrom zustande - insbesondere wenn dazu noch Mechanik als Last bewegt wird.
Das sollte man definitiv nicht unterschätzen !
3A aus einem (hoffentlich wirklich) gut stabilisiertem Netzteil sind schon ganz ok - aber:
Diese Dinger sind einfach nicht für impulsartige Lastsröme ausgelegt und haben einen wesentlich höheren Innenwiderstand.
Die Stabilisierung greift hier "nur" bei "langsamen" belastungen.
Ein guter NiMh- oder gar LiPo-Akku schafft min. 5C bis 10C kurzzeitigen Laststrom.
Ich hab z.B. für den Heli letztendlich 6x Mignon NiMh mit je 2800mA genommen - dann war Ruhe.
Vorher hatte ich mit div. BEC rumprobiert - alles Käse.
Die attach()-Funktion des Servos ist die allererste in setup(). Der Atmega328 hat auch keinen Bootloader drauf, der das weiter verzögern würde. So wie ich's jetzt hab (Pullup an Control + Diode am Regler) funktionierts einwandfrei, auch wenn ich erst ein paar Sekunden warte, bis ich die Servos initialisiere.
Mir ist klar dass sich das Netzteil nicht wie ein Akku verhält. Es ist ja nur eine vorrübergehende Stromversorgung bis alles einigermaßen läuft so dass ich es in das Projekt einbauen kann. Große Lasten sollten dann auch nicht dranhängen. Wenn alles gut ausbalanciert ist, wirken nur Trägheitskräfte von ein paar N.
Wenn das mit dem Strom für die Servo's (erstmal) nachrangig ist, schalte doch einfach mal einen Widerstand mit 2,2 bis 4,7 R (oder auch 10 R ?) mit min. 2W in Reihe zu den Servos zwischen deine beiden Puffer-Elkos.
Das bremst ein wenig den Stromfluss und die Servos dürften trotzdem noch anstandslos drehen (ohne / mit wenig Last). Dann ist die schlagartige Belastung vom Netzteil erst mal weg.