PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos an Analogausgang von Microcontroller anschließen?



nose
16.11.2005, 21:56
Hi,
ich bin relativ neu im Feld der Microcontroller und kenne mich nicht so gut aus. Nun habe ich gehört, dass Modellbauservos mit PWM-Signale arbeiten. Und die Analogausgänge meiner C-Control funktionieren ja soweit ich weiß auch mit PWM. Kann ich also einfach die Steuerleitung von so nem Servo an diesen Ausgang legen und diesen somit steuern?
Frage nur sichheitshalber bevor mir da irgendwas kaputt geht, oder geht das gar nicht? Es würde ja im Prinzip auch bedeuten, dass man jede Art von Modellbaureglern da anschließen könnte. Und somit würde man sich diese ganzen Motortreiber sparen, sofern man schon n Modellbauregler hat. Und andersrum gedacht könnte man dann ja auch die Motortreiber im normalen RC-Modellbau einsetzen, oder?

Vielen Dank schon mal und Viele Grüße
Daniel

Skilltronic
16.11.2005, 22:30
Hallo

Schau mal hier: https://www.roboternetz.de/phpBB2/viewtopic.php?t=14273

Um Motoren zu regeln kannst du den PWM-Ausgang der C-Control benutzen (nicht direkt natürlich), es könnte aber ziemlich pfeifen. Die Frequenz beträgt glaube ich sowas um die 1700Hz. Mit dem entsprechenden Ton piepst dann auch der Motor.

Gruss
Skilltronic

recycle
16.11.2005, 23:08
@nose
Servos werden über eine Rechteckspannung angesteuert und die Stellung des Servos wird über die Pulsbreite gesteuert.
PWM steht für Pulsweitenmodulation, ein PWM Ausgang erzeugt also eine Rechteckspannung mit variabler Pulsbreite.

Aber so ein Rechecksignal hat auch eine Frequenz und auch wenn viele Servos was die Frequenz betrifft nicht besonders pingelig sind, arbeiten sie auch nicht mit jeder Frequenz (jedenfalls nicht mit jeder gleich gut).

Bei einer PWM kannst du die Pulsbreite von 0 - 100% variieren, Servos werden aber normalerweise über eine Pulsbreite von 1-2 ms angesteuert.

Damit den Servo einfach an einen zu hängen ist es also nicht ganz getan.
Servos werden normalerweise mit einer Frequenz von 20kHz angesteuert.
Eine Pulsweite von 1ms stellt den Servo ganz nach links, bei 2 ms fährt er ganz nach rechts, die restlichen Werte liegen dazwischen.
Ich weiss nicht mit welcher Frequenz die PWM bei der CControl arbeitet, bzw. wie weit man die varieiren kann.
Da Servos normalerweise bei der Frequenz nicht empfindlich sind, wird es wohl funktionieren.
Bei Atmel-Controllern verwendet man normalerweise keine PWM sondern erzeugt das Signal über den entsprechenden Programmcode an einem beliebigen Ausgang. Dafür ist die C-Control aber zu langsam.



Es würde ja im Prinzip auch bedeuten, dass man jede Art von Modellbaureglern da anschließen könnte.

Klar, Modelbauregler sind ja auf dasselbe Steuersignal wie Servos ausgelegt. Könnte sein, dass die etwas empfindlicher auf abweichende Frequenzen reagieren als Servos, das weiss ich aber nicht.



Und somit würde man sich diese ganzen Motortreiber sparen, sofern man schon n Modellbauregler hat. Und andersrum gedacht könnte man dann ja auch die Motortreiber im normalen RC-Modellbau einsetzen, oder?

Theoretisch schon.
Aber bei Motortreibern und Modelbaureglern spielt nebenher auch noch der Strom eine entscheidende Rolle.
Wenn ein kleiner Treiber-IC wie der L293 für 3 Euro reicht, ist es nicht unbedingt sinnvoll einen Modelbauregler für 30 Euro zu verbauen.
Bei grossen Strömen, wie sie bei vielen RC-Modellen auftreten, ist es dafür meist billiger und günstiger einen Modelbauregler zu kaufen, da die ja auch von Grösse, Anschlüssen, Robustheit usw. auf diese Aufgabe angepasst sind.
Für grosse Ströme findet man auch nicht so leicht fertige Treiber-ICs und wenn, sind die vermutlich auch nicht mehr billiger als ein Modellbauregler.
Ausserdem braucht man dann auch dicke Leitungen, Kühlkörper usw. Da selber etwas zu entwickeln dass von Grösse, Leistung, Funktion usw. mit einem fertigen Modelbauregler mithalten kann ist sicher nicht so einfach.

Für die Ansteuerung über einen µC hat ein Motortreiber aber auch den Vorteil, dass man die gesamte Pulsbreite für die Steuerung zur Verfügung hat.
Bei einem Modelbauregler bist du wie bei einem Servo auf den Bereich zwischen 1 u 2 ms beschränkt.
Das könnte sich gerade bei einem relativ langsamen Controller wie der CControl bemerkbar machen.


EDIT:
na klasse, wenn ich vorher gewusst hätte, dass das Forum jetzt bei der Verwendung bestimmter Stichwörter auf eine Erklärung verlinkt, hätte ich mir die Hälfte von der Tipperei sparen können ;-)

JanB
17.11.2005, 06:26
@recycle

Servos werden normalerweise mit einer Frequenz von 20kHz angesteuert.
Da hast du glaube ich 20KHz mit 20ms verwechselt.
Die Ansteuerung der Modellbauservos efolgt nicht mit
20KHz sondern mit 50Hz entsprechend 20ms.
Die variable Pulsbreite von 1-2ms wäre ja auch
bei 20KHz schwierig zu realisieren. :-k

Schöne Grüße Jan

nose
17.11.2005, 17:32
danke für die ausführlichen Antworten.
Also müsste ich dann damit das richtig funktioniert eine Schaltung zwischen den PWM-Ausgang der C-Control und den Servo machen, die die Pulsweite dann von 1-2ms regulieren kann. Wie müsste so eine Schaltung dann aussehen?
Oder kann man das programmiertechnisch auch irgendwie lösen? Das man festlegen kann, dass da nur Werte von 1-2ms rauskommen?

Ich habe gerade mal in die Anleitung von der C-Control geschaut; da steht die PWM-Rate ist 1953 Hz. Das sind doch dann 1,953 1/ms, was wiederum fast den 2ms entspricht.

Gruß
Daniel

Klaus_0168
17.11.2005, 19:21
Hi nose,

die PWM-Rate von 1953Hz wird nicht funktionieren.

Das Servosignal ist ein Rechtecksignal mit einer Grundfrequenz von 50Hz.
Bei einem positiven Servosignal gilt :
0% Servo-Stellung entspricht 1ms 1-Signal und 19ms 0-Signal.
100% Servo-Stellung entspricht 2ms 1-Signal und 18ms 0-Signal.
Die gesamte Periodendauer von 20ms ändert sich dabei nicht.

Meines Wissens nach sind PWM-Raten Prozentwerte, die das Verhältnis der Signaldauer des 1-Signal zur Periodendauer ausdrücken (auch Tastverhältnis genannt). Die 0%-Servostellung wäre dann 1/20 -> 5% PWM-Rate und das 100% - Servosignal 2/20 -> 10% PWM - Rate.

Ich lass mich jedoch eines besseren belehren.

Grüße Klaus

ICH_
17.11.2005, 22:07
Das stimmt so schon, aber die 20ms sind nur ein grober Richtwert, das Servo nimmt normalerweise alles von 10 bis 30ms oder noch mehr.

chr-mt
17.11.2005, 22:42
das Servo nimmt normalerweise alles von 10 bis 30ms oder noch mehr.
Sollte eventuell auch noch mit geringeren Impulsabständen funktionieren.
Es gibt Verstärker für Servos zu kaufen, die afaik nach diesem Prinzip arbeiten.
Der eingehende Impuls aus der Fernsteuerung wird einfach geklont und mehrfach innerhalb der 20ms an's Servo geschickt, was die Festhaltekraft erhöht, da das Servo öfter positioniert wird.

Gruß
Christopher

recycle
17.11.2005, 23:09
@JanB


Da hast du glaube ich 20KHz mit 20ms verwechselt.

Ja, hast natürlich recht.
Eigentlich wollte ich nose auch nur schreiben, dass er sich mal umsehen soll, wiie ein Servo genau angesteuert wird. Das wurde hier im Forum ja schon mehrfach beschrieben.
Hätte ich dann wohl besser auch mal so geschrieben anstatt zu versuchen mich selber an die Frequenz zu erinnern ;-)

Klaus_0168
18.11.2005, 00:53
Hi all,

siehe https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Servomotoren

Die 20ms bzw. 50Hz sind natürlich das standardisierte Servosignal. Abweichungen sind möglich, jedoch mit Vorsicht zu genießen. 10 - 30ms halte ich für vollkommen übertrieben.

Grüße Klaus

nose
18.11.2005, 08:12
moin,
ich hab jetzt schon verstanden wie ein normaler Servo funktioniert und was für Impulse er haben will. Aber was mir immer noch nicht klar ist, was kommen denn bei meinen Analogeingängen für Signale raus? Wenn ich den Wert in der Programmierung auf 50% festlege, also ca. 127, kommt dann ein Rechtecksignal da raus was die Hälfte der Länge der PWM-Rate hat?
Und kann man diese Signale nicht durch eine zusätzliche Schaltung so transformieren, dass sie zu genau den vom Servo verlangten Signalen werden?

frank-findus
19.11.2005, 09:21
Hallo,

es gibt noch eine Alternative, die nicht übermäßig genau ist, aber dafür sehr ainfach zu realisieren, habe ich selber schon gemacht: Dabei nimmst du nur Motor, Mechanik und das Poti aus dem Servo, die Elektronik des Servos wird entfernt. Du schließt den Servomotor über 2 Leistungstreiber in Brückenschaltung an den Microcontroller an. Mein Conrad-Microservo funktionierte schon mit TTL-Leisungsgattern aus der Kramkiste. Das Servopoti wird zwischen Plus und Masse angeschlossen und der Schleifer an einen Analogeingang ... nun noch 5 Zeilen Code und fertig ist die Servosteuerung. Die erreichbare Auflösung (Positionen) hängt von der AUflösung des AD-Wandlers ab (z.B. 8 Bit = 256). In der Nähe des Haltepunktes kann man durch Impulsmodulation dafür sorgen, das der Servo nicht übers Ziel hinausschießt und pendelt ...

Frank

ICH_
19.11.2005, 10:01
10 - 30ms halte ich für vollkommen übertrieben.


Und wieso, wenn ich fragen darf?
Bei mir haben bis jetzt alle Servos in dem Bereich funktioniert, wahrscheinlich arbeiten die auch noch in einem viel größeren Bereich, das hab ich aber nicht getestet. Und chr-mt hat ja auch schon geschrieben, dass es soetwas, dass die Frequenz verdoppelt, zu kaufen gibt und welchen Zweck es hat! Und wenn es das zu kaufen gibt funktioniert es wohl ... wenn du es mir schon nicht glaubst ;-)

nose
19.11.2005, 18:42
hoi,
also ich denke auch, nach all dem was ich gelesen habe, dass es dem Servo relativ egal ist ob alle 20ms oder schneller oder langsamer ein Signal für ihn ankommt. Sonst würden doch wirklich die Servossignalverstärker keinen Sinn machen. Und wenn ich grad mal von der Seite http://www.sprut.de/electronic/modell/allgemein/ zitieren darf, da steht unter der Funktionsweise des Servos:

"Eine Steuerschaltung vergleicht den Kanalimpuls mit dem Generatorimpuls. Bei einer Abweichung wird der Motor angesteuert, damit das Potentiometer verstellt, und der Generatorimpuls angepasst."

Das wird dieser Steuerschaltung doch egal sein wenn da öfter ein Signal kommt. Ich denke die Einhaltung des 20ms Intervalls ist nur für die Fernsteueranlage und den Empfänger relativ wichtig, damit der Empfänger weiß wann welcher Kanal gesendet wird.

Aber nochmal zu meinen Fragen. Was kommt denn jetzt bei meinem PWM Kanal an der C-Control, abhängig von der Zahl die ich in der Programmierung einstelle, raus?
Und was sagt mir die PWM-Rate von 1953 Hz?

Gruß
Daniel

recycle
19.11.2005, 19:21
also ich denke auch, nach all dem was ich gelesen habe, dass es dem Servo relativ egal ist ob alle 20ms oder schneller oder langsamer ein Signal für ihn ankommt. Sonst würden doch wirklich die Servossignalverstärker keinen Sinn machen.

Dass Servos das mit der Frequenz nicht ganz so ernst nehmen habe ich auch schon oft gelesen. Habe ja auch oben schon geschrieben, dass sie da nicht so pingelig sind.
Allerdings gibt es da ganz sicher Grenzen. Nach oben sowieso, denn der Impuls muss ja mindestens zwischen 1 u. 2 ms lang sein.
Bei zu niedriger Frequenz habe ich öfter gelesen, dass die Haltekraft nachlässt. Wenn man dann noch weiter mit der Frequenz runtergeht, vermute ich mal, dass der Servo anfängt zu flattern.



Und was sagt mir die PWM-Rate von 1953 Hz?

Falls man das als PWM Frequenz interpretieren darf, wirst du den Servo damit nicht so ohne weiteres ansteuern können. Bei einer Frequenz von 2kHz ist die Periode ja nur 0,5 ms lang, der Servo erwartet aber Impulse zwischen 1 und 2 ms.

nose
20.11.2005, 09:17
Bei einer Frequenz von 2kHz ist die Periode ja nur 0,5 ms lang, der Servo erwartet aber Impulse zwischen 1 und 2 ms.

Welche Periode meinst du? Die Periode in der ein Signal gesendet wird ist dann maximal 0,5ms lang? Wobei ich mich auch frage wie du auf 0,5ms kommst, denn 2khz sind ja 2000 1/s und wenn man das in ms umrechnen will kommt man doch auf 2 1/ms, oder versteh ich hier was grundlegend falsch?
Also wenn ich mir das logisch überlege, dann wäre es doch eigentlich am sinnvollsten mit der PWM-Rate anzugeben wie oft in der Sekunde maximal ein Signal ausgesendet werden kann. Und das wäre dan hier bei der C-Control 1953 mal pro Sekunde oder 1,953 mal pro ms. Es wäre ja nicht so sinnvoll die maximale Signallänge mit der PWM-Rate anzugeben, da man diese ja mit dem Wert in der Programmierung variiert.
Eigentlich sollte man doch dann auch in einem Versuch messen können, wie lang die Signale bei welcher Zahl in der Programmierung sind und so könnte man dann rausfinden, was 1-2ms Signallänge entsprechen, oder?

Klaus_0168
21.11.2005, 01:01
Hi all,



10 - 30ms halte ich für vollkommen übertrieben.


Und wieso, wenn ich fragen darf?
Bei mir haben bis jetzt alle Servos in dem Bereich funktioniert, wahrscheinlich arbeiten die auch noch in einem viel größeren Bereich, das hab ich aber nicht getestet. ...
Die Periodendauer handelsüblicher Modellbauservos von 20ms kann, abhängig von der Marke, um +- 3ms verändert werden. Vor einiger Zeit ist hier mal ein ähnlicher Thread gelaufen, in dem jemand eine Art 'Testbericht' unterschiedlicher Servomarken gepostet hat. Laut diesem Thread wirkt sich eine größere Verletzung der Periodendauer auf die Genauigkeit der Positionierung aus (Brummen und Zittern der Servos).

Die eigentliche Information ist bekanntlich in der Pulsweite codiert. Hier sollen die Bandbreiten bei 0.8 bis 2.3ms liegen. Es gibt eine Art Norm für das Servosignal. Toleranzen und konstruktive Reserven weiten den Signalbereich natürlich etwas aus. Ich würde mich darauf allerdings nicht verlassen.

... Und chr-mt hat ja auch schon geschrieben, dass es soetwas, dass die Frequenz verdoppelt, zu kaufen gibt und welchen Zweck es hat! Und wenn es das zu kaufen gibt funktioniert es wohl ... wenn du es mir schon nicht glaubst ;-)
Sinn und Zweck unbekannter Schaltungen kann ich nicht beurteilen. Nur weil es etwas zu kaufen gibt heißt es noch lange nicht, daß es auch für den gewünschten Einsatzfall zu gebrauchen ist.

Grüße Klaus

Skilltronic
21.11.2005, 11:23
Hallo

Meine Erfahrung ist, dass man bei Servos sowohl mit 20 als auch mit 10ms langen Intervallen arbeiten kann, dazwischen habe ich es noch nicht ausprobiert, jedoch sind sie bei 10ms tatsächlich etwas ruhiger und kräftiger.

Aber zur eigentlichen Frage: der PWM-Ausgang ist wie die ganze C-Control1 zum Ansteuern von Servos völlig ungeeignet. Der funktioniert so, dass der Ausgang mit immer gleichbleibender Frequenz (1953Hz) ein- und ausgeschaltet wird. Einstellen kann man nur das Verhältnis zwischen High- und Lowzustand innerhalb der festen Periodendauer. Fliesst der Strom z.B nur während der Hälfte der Zeit, wird im Mittel auch nur die halbe Leistung übertragen. Die Trägheit eines Motors sorgt für diesen Mittelwert.

Mit anderen Mikrocontrollern die schneller sind, ist Servoansteuerung einfacher.

Gruss
Skilltronic