Hallo zusammen Ich möchte an einen Atmel controller mit 8- oder 16bit Timer/Counter das Signal erzeugen, um über einen HC4017 10 Servos anzuhängen. Für diesen brauche ich, wenn ich das richtig verstanden habe, je eine steigende Flanke, um am Clock-Eingang, um den vorherhigen Kanal auf Low und den nächsten auf High zu schalten. Als letztes würde dann für die verbleibende Restzeit der Reset pin gezogen, um alle ausgänge abzusschalten und dann wieder bei 0 anzufangen. 1. Frage: Braucht es die Restzeit? Diese wäre ja maxmial 10ms lang, was mit dem Timer wieder schwirig wird, wenn ich ihn auf 1-2ms optimiere. 2. Frage: Nach lolassen des Reset-Pins, geht da gleich der erste Kanal auf High oder braucht es erst eine Clock-Flanke? 3. Frage: Genügt es, in der Timer-Routine einfach den Pin high zu setzen, die neue Zeit ins Compare-Register zu geben und am ende den Pin wieder auf low, oder braucht es zwei Timer-Durchläufe, einen für den Puls, einen für die Zeit bis zum nächsten? Ich kriege das im Kopf noch nicht so ganz zusammen, wie das am besten zu lösen ist. LG
Lass 2 timer laufen. Aeussere Schleife mit 24mS, darin den Timer mit 1-2mS. zu2. Erst nach clocksignal zu3. Keine Ahnung
Verstehe nicht ganz, was dabei rauskommen soll. Und was das mit PPM zu tun hat. Sollen die 10 Servos immer hintereinander eigeschaltet werden? Der 4017 hat 10 Ausgänge: 0...9. Solange Reset anliegt, wird der Servo am Ausgang 0 eigeschaltet. Wwenn Reset und Clock-Enable gleich Null sind, wird mit jeder positiven Flanke am Clock-Eingang auf die Servos am Ausgang 1, 2, ..., 9, 0, ... geschaltet. Erscheint mir recht sinnlos.
> Erscheint mir recht sinnlos. Nicht ganz so linnlos wie man meinen könnte. http://diydrones.com/profiles/blogs/drive-10-servos-using-only-2
Mag ja einen Sinn ergeben, doch der erschließt sich mir nicht durch das Filmchen. Erklär mal das Wirkungsprinzip: Also was an den 4017-Ausgängen für welches Verhalten des Servos anliegen muss. Dann lässt sich bestimmt erklären, wie man das mit den mega8-Countern verwirklicht. Jedenfalls dürfte ein festes Signal (High, vielleicht auch Low) keine Wirkung haben, sonst könnte man nicht den 0-Ausgang des 4017 nutzen, der bei Reset immer High ist.
Hallo, möchtest du an deinen Controller 10 Potis anschließen um jedes Servo einzeln steuern zu können? Würde mich auch interessieren. Gruß Mani
Von 10 Potis ist in dem Video nix zu sehen. Da sind es nur vorher festgelegte Sequenzen, die einfach ablaufen. Die Ersparnis an Output-Pins beim mega8 wird wohl mit einer richtigaufwändigen Software-Ansteuerung des HC4017 erzeugt. Aber solange der TO nicht erklären kann, was da eigentlich ablaufen soll, ist ihm wohl nicht zu helfen. Es sei denn, hier kennt sich zufällig jemand mit diesen "diydrones" und den dort verwendeten Servos aus. Die nächste Frage des TO wird dann aber sein, wie er denn die Servos gezielt beeinflussen kann...
Oldie schrieb: > Aber solange der TO nicht erklären kann, was da eigentlich > ablaufen soll, ist ihm wohl nicht zu helfen. Was ist denn dabei unklar. Nach jedem Clock-Puls springt der Zähler einen Stand weiter, d.h. wenn man z.B. Clock-Pulse mit 1.5ms Abstand (entsprechend einer Frequenz von 667Hz) auf den Zähler gibt, bekommt jeder der an den Zählerausgängen angeschlossenen Servos einen High-Puls für die Dauer von 1.5ms, also Mittelstellung. Der Abstand der Clock-Pulse legt jeweils die Dauer der einzelnen Servopulse fest. Der µC muss nur die gewünschten Servostellungen in Clock-Puls Abstände übersetzen.
Hey Leute, von 7 Beiträgen nur ein einziger der irgendwie auf die Fragen antwortet. Wäre es nicht möglich, daß die jenigen, die jetzt mit genau dieser Idee, diesem Projekt, diesen Bauteilen nichts anfangen können, einfach mal NICHTS schreiben? Ich habe mir die Variante mit Tiny und 4017 nicht selbst ausgedacht, sondern bei verschiedenen Projekten gesehen (u.a. Paparazzi, die damit komplexe Flugregler betreiben und völlig Problemlos auch Brushless-Controller für Quadcopter ansteuern). JA, es gibt sicher andere Varianten, die fallen bei unserem Projekt (dabei sind die Servos nur ein kleiner Teil) aber aus verschiedneen Gründen weg. Diese Gründe sind hier auch nicht wichtig, es geht mir einfach um die drei Fragen in meinem Eröffnungspost. Vielleicht hat jemand von Euch das auch schonmal so gemacht, und könnte ein Codebeispiel oder eine kurze Beschreibung geben? Bin mir einfach bei den drei o.g. Fragen unsicher. Vielen Dank und liebe Grüße
Guck dochmal Post2 hab ich doch schon beantwortet. zu1. Wenn du HF mässig übertragen willst, brauchst du die Lücke. Der Empfänger nimmt den ersten Puls nach der Lücke um wieder bei Kanal eins zu starten. Stell doch mal bitte konkret eine Frage. Dann können wir die behandeln. Vielleicht klappts dann. Gruß Mani
Hi Mani, ja Post 2 habe ich gesehen, vielen Dank. Jetzt habe ich einige Beispiele gesehen, die es doch nur in einem Timer machen. Daher bin ich etwas unsicher. Das Teilprojekt sieht so aus: Der Tiny ist per z.B. I2C an das Restprojekt angeschlossen und bekommt die Stellwerte für die einzelnen "Servo-PWMs" einzeln in Digitaler Form 0-255. Diese liegen irgendwo in einem Array und der Tiny soll daraus nun ein Signal bauen, das via 4017 auf die 8-10 Servos übertragen wird. Keine Funkstrecke, kein zu Dekodierendes Signal, mich interessiert nur die Erzeugung des "Summensignals", der Rest ist einigermaßen klar. Da man den 4017 ja meines Wissens nach nicht komplett "stummschalten" kann, sondern immer einer der Ausgänge H Pegel hat, gehe ich davon aus, daß das Verlinkte Arduino-Projekt nicht einmal die Restzeit einhält um immer auf genau 20ms Gesamtlänge zu kommen. Dadurch würde der Frame aber ja unterschiedlich lang, also nur ca 10ms wenn alle Servos am linken Anschlag stehen sollen bis 20ms wenn alle rechts stehen. Und da bin ich mir eben unsicher, ob das eine gleichmäßige Ansteuerung erlaubt, oder ob manche RC-Bauteile wie Fahrtenregler, Brushlesscontroller o.ä. das mitmachen. Oder ob ich etwas übersehen habe, und es doch eine Möglichkeit gibt, am 4017 alle 10 Ausgänge auf Low zu setzen. Gelesen habe ich auch schon, den O0 nicht zu benutzen und hier die Restzeit abzuwarten, dann fehlte aber ja ein Anschluss.
Phillip Hommel schrieb: > Oder ob ich etwas übersehen habe, und es doch eine Möglichkeit gibt, am > 4017 alle 10 Ausgänge auf Low zu setzen. richtig, Q0 liefert bei einem Reset H-Pegel. Der 4017 wurde in älteren RC-Empfängern auch als Decoder und Signal-Multiplexer verwendet. Da wurden dann der erste (Q0) und letzte (Q9) nicht als Ausgang, sondern zum Synchronisieren mit dem Sendesignal verwendet. Vielleicht wäre es für dich einfacher, auf ein Schieberegister oder einen 16-fach-Multiplecer zu wechseln, wenn du wirklich 10 Ausgänge an einem Tiny brauchst. Oder du verwendest den Dezimalzähler 4017 mit der Einschränkung, nur 9 Bits verwendent zu können und für das letzte nimmst du einen Portpin des Controllers. Aber eigentlich braucht man für moderne Modellbau-Elektronik (Servos und Fahrtregler) die 20ms Wiederholungsrate nicht mehr. zumindest habe ich Servos an einem Controller mit 3,686MHz mit einem 16Bit-Timer laufen - das ist eine Wiederholungsrate von knapp 18ms.
>...wenn du wirklich 10 Ausgänge an >einem Tiny brauchst. Oder du verwendest den Dezimalzähler 4017 mit der >Einschränkung, nur 9 Bits verwendent zu können und für das letzte nimmst >du einen Portpin des Controllers. Ne es müssen nicht zwingend 10 Stück sein, geht eher darum "je mehr desto besser". Ziel ist es, verschiedene Standard-Module aufzubauen die per i2c an ein Master-Board angehängt werden. Einige dieser Module sind bereits fertig, haben alle einen Tiny drauf und benutzen das selbe Framework für i2c, Befehlsatz etc. Soll eben alles so weit wie möglich standardisiert sein. Das System kommt dann innerhalb eines recht komplexen Projekts bei unterschiedlichen Anwendungen zum Einsatz und wird dann nach den jeweiligen Bedürftnissen konfiguriert. Ich entwickle nur den "Baukasten".
:
Bearbeitet durch User
STK500-Besitzer schrieb: > Der 4017 wurde in älteren RC-Empfängern auch als Decoder und > Signal-Multiplexer verwendet. Ja, m.W. war das in den späten 70er Jahren die typische Standard- schaltung, die von fast allen Empfängerherstellern verwendet wurde: Einfach, aber wirkungsvoll. Gruss Harald
Hab ich mir gedacht - mit deinen Minimalinformationen kann dir hier bisher keiner helfen. ERLÄRE doch einfach, was die Servos brauchen! Bei der Pulserzeugung hätten hier 100 Leute Ideen! Irgendwo lässt du verlauten, dass ein 1,5 ms-Pulse Mittelstellung bedeutet. Ist das ein Puls, der auch x mal kommen kann, ohne dass die Neutralstellung verlassen wird? Dann kommt 10 / 20 ms für alle links/rechts Also 1 ms = links, 1,5 ms Neutralstellung, 2 ms = rechts? Was passiert bei längeren / kürzeren Zeiten? (Reset-Zustand bei Servo Null?)
...und ein 4017 kann nicht latchen, was ich hier als Problem sehe - oder? Sowas macht man mit schieberegistern inkl. latch, vermute ich. Btw: Der TO will 10 servos an 1-2 pins eines uC betreiben, sprich alle informationen seriell übertragen & dann mit einem 4017 auf die 10 modellbau servos demultiplexen. Klaus.
Phillip Hommel schrieb: > Ne es müssen nicht zwingend 10 Stück sein, geht eher darum "je mehr > desto besser". Du kannst auch 2 74HC164 kaskadieren, dann hast Du 16 Ausgänge. Wenn man den Zähler bzw. Schieberegister mit einem PWM-Ausgang taktet, sind die Pulse völlig jitterfrei, d.h. unabhängig von Programmlaufzeiten und anderen Interrupts. Die Sache ist daher durchaus sinnvoll.
Klaus R. schrieb: > ...und ein 4017 kann nicht latchen, was ich hier als Problem sehe - > oder? Was willst du da latchen. Der Zähler muss einfach nur im richtigen Takt seine Clock-Impulse bekommen. Wenn er einmal durch ist, geht es mit dem Clock-Puls Abstand für die Pulslängenzeit von Servo 0 weiter. Wenn man einen zweiten Timer einsetzt, darf man den Kanal 0 nicht belegen, d.h. man verschenkt einen Kanal. Oldie schrieb: > Irgendwo lässt du verlauten, dass ein 1,5 ms-Pulse Mittelstellung > bedeutet. > Ist das ein Puls, der auch x mal kommen kann, ohne dass die > Neutralstellung verlassen wird? Du solltest dir einfach mal ein paar Grundlagen über die Steuerung von Modellbauservos anlesen. Dann verstehst du auch, worum es hier geht. http://de.wikipedia.org/wiki/Servo#Ansteuerung Oldie schrieb: > Was passiert bei längeren / kürzeren Zeiten? > (Reset-Zustand bei Servo Null?) Dann versucht der betroffene Servo, die Stellung anzufahren, die der Zeit entspricht und fährt gegen den Poller, falls die Zeit zu lang oder zu kurz ist (Bereich gewöhnlich 1..2ms, manchmal auch breiter). Den Resetzustand gibt es in dem Sinne nicht, nur um beim Starten die Synchronisation sicher zu stellen. Der Zähler muss immer laufen, wenn man alle Ausgänge für Servos benutzt werden.
Also nochmal kurz zusammengefasst: Die Restzeit brauche ich nicht beachten, einfach Zeit servo 1 laufen lassen, impuls, Zeit servo 2,Impuls , am Ende Reset, fertig. Es reicht eine steigende Flanke für den Wechsel, irgendwann danach Pin wieder auf low. Richtig soweit? Vielen Dank für die Antworten. Lg
Phillip Hommel schrieb: > Die Restzeit brauche ich nicht beachten, einfach Zeit servo 1 laufen > lassen, impuls, Zeit servo 2,Impuls , am Ende Reset, fertig. Wenn du alle 10 Ausgänge nutzen möchtest, gibt es kein "fertig", sondern nach Impuls zum Schalte auf 9 kommt Wartezeit für Steuerpulsbreite Servo 9, dann Reset (oder Impuls zum Schalten auf 0), dann Wartezeit für Steuerpulsbreite Servo 0, dann Impuls, Wartezeit Servo 1, Impuls Servo 2, ... Dabei ist Reset besser als Impuls zum Schalten auf 0, weil dann sicher gestellt ist, dass der Zähler immer synchron zu den Zeitvorgaben zählt, d.h. die Servozuordnung stimmt. Die Zykluszeit liegt, je nach Servostellungen irgendwo um 15ms, womit IMHO jeder Servo gut leben kann.
>Wenn du alle 10 Ausgänge nutzen möchtest, gibt es kein "fertig"
Is klar, war ein rethorisches "Fertig", kein Zyklusbeendendes :)
Da dies eine Frage im µC & Elektronik Forum ist, hätte ich nicht vorausgesetzt, dass jeder diese Servos kennt. Nach kurzer Umschau bei den Servos, weiß ich, dass ihr Verhalten keine große Wissenschaft ist, sondern in 2 Zeilen erklärt werden kann. - Ist das denn sooo schwer? Die Umsetzung für einen µC + 4017 ist damit auch klar! (Und 80% der vorherigen Zeilen stellen sich als genauso unwissendes Gelaber heraus.) Man muss den 4017 ständig durchzählen lassen und für jeden Servo die Position als Höchststand für einen µC-Counter in einer Tabelle vorhalten. Der Reset ist EINE (eher ungünstige) Möglichkeit, um die Zuordnung vom Tabellenwert zum richtigen Servo im Programmablauf sicher zu stellen. Um den Ablauf sicherer zu machen, würde ich auf die Ansteuerung des 4017-Reset verzichten, sondern den 4017-Carry-Ausgang auf einen µC-Eingang schalten: Dann wird die Zuordnung nach jedem Umlauf bestätigt und das Programm einfacher. - Benötigt auch nur zwei Pins. Der µC-Counter sollte in einem PWM-Mode arbeiten, bei dem der Zähler-Höchststand für jede Servo-Pulsdauer einstellbar ist, während die Pulsweite fest auf < 1 ms (z.B. 0,5 ms) für die fallende Flanke des 4017-CLK-Signals eingestellt ist. Ja, die Zykluszeit ist nicht fest, sondern setzt sich aus der Summe aller Pulsweiten (= 10..20 ms) zusammen. Das geht mit einem 4017 nicht anders. Allerdings wird die Zykluszeit beim 4022 noch kürzer (8..16 ms), Zwei 4022 machen 16...32 µs. Eigentlich voll easy, wenn man weiß, wie ein µC funktioniert und was ablaufen soll!
Was ist das für eine Anja? Sonst kennt man Anja hier für recht intelligente und hilfreiche Beiträge. Und "funcktioniren" kann sie auch besser schreiben!
Noch eine Frage: Ich hätte gerne die Möglichkeit, die Servosignale abzuschalten. Würde es genügen, VCC des 4017 über einen IO-Pin des ATTiny25 zu schalten, sollte Transistor dazwischen, oder geht das so gar nicht? LG
Über einen Transi. UND: Den Clock-Ausgang dabei fest auf NULL, oder Eingang.
Phillip Hommel schrieb: > Noch eine Frage: Ich hätte gerne die Möglichkeit, die Servosignale > abzuschalten. Einfach über den Resetpin. Der Ausgang 0 ist ja eh nicht nutzbar.
Peter Dannegger (peda) schrieb:
> Der Ausgang 0 ist ja eh nicht nutzbar.
Wenn ich hier richtig mitgelesen haben, sind wir da schon
drüber hinaus. - Obwohl es die einfachste Lösung wäre.
siehe: Modellbauer (Gast), 22.07.2014 22:31
und: Oldie (Gast), 23.07.2014 21:37
Phillip Hommel schrieb: > Noch eine Frage: Ich hätte gerne die Möglichkeit, die Servosignale > abzuschalten. Wozu? Schalte die Servos ab, wer weiß, was die sonst ohne Sollwertvorgabe machen.
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.