PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Modellbauservo mit AD-Wandler auswerten?



the_Ghost666
06.07.2007, 00:29
Moin,
ein Modellbauservo wird ja durch ein PWM Signal mit 50Hz und 1-2ms high-Pegel angesteuert. Ich würde gerne wissen, ob es möglich wäre durch einen Tiefpass ein Analogsignal zu gewinnen, und die Spannung am Kondensator per AD-Wandler einzulesen und daraus die Servoposition zu errechnen.

Thoralf
06.07.2007, 06:59
das PWM-Signal analog zu nutzen um die Servoposition zu bestimmen, würde ich abraten. Um das PWM-Signal in eine Gleichspannung umzuwandeln, muß es tiefpaßgefiltert werden. Eine gute Filterung gibt dir ein Signal aus, daß bei 1ms etwa 0,25V und bei 2ms etwa 0,5V beträgt (Die komplette PWM-Periode umfaßt 20ms und 2 ms sind dann 10% also 0,5V)
Die nutzbare AD-Auflösung verringert sich dadurch auf nur noch 5% (1ms...2ms entspricht 0,25V...0,5V also ein delta von 0,25V)
Eine sehr hohe Winkelauflösung ergibt sich dadurch nicht.
Um die Restwelligkeit des Signals gering zu halten, benötigt der Tiefpaß eine hohe Zeitkonstante (Produkt aus C und R). Grob geschätzt werden ca. 0,5s benötigt (je nach Genauigkeit) bis der Tiefpaß auf eine Änderung des PWM-Verhältnisses reagiert hat, u.U. noch viel länger. Das sollte für eine Regelung viel zu viel sein.

Der beste Weg wird wohl das Anzapfen des des Potentiometers im Servo sein. Wenn ein Bein dieses Potis auf Masse sitzt, dann läßt sich die Spannung des Schleifers gut weiterverarbeiten. Die Frage waäre nur, in welchem Intervall die sich bewegt.

wkrug
06.07.2007, 07:54
Ich hab mal vor Jahren eine Lösung gesehen, bei der die Servoimpulse zuerst über ein 1mS Verzögerungsglied gelaufen sind und dann erst die Werte auf den Tiefpass zur Gleichspannungserzeugung gelaufen sind.

Als wurd somit nur die Impulslänge über 1mS ausgewertet, was eine wesentlich höhere Auflösung bringt.

Das Problem mit dem Tiefpaß und den langen Pausenzeiten hat aber auch dieses Konzept.

Vorschlag:
Das Servosignal mit einem Microcontroller auswerten und auf seiner PWM ein entsprechendes PWM Signal ausgeben. Dieses PWM Signal tiefpaßfiltern und Du hast deine Gleichspannung.

Du kannst natürlich die Impulslänge auch direkt vom Controller auswerten lassen und die Werte direkt ausgeben. Das erspart Dir den A/D Wandler.

teslapower
06.07.2007, 08:04
Du kannst natürlich die Impulslänge auch direkt vom Controller auswerten lassen und die Werte direkt ausgeben. Das erspart Dir den A/D Wandler.eben, wozu filtern und dann mit AD einlesen wenn man das PWM Signal hat :-&

the_Ghost666
06.07.2007, 16:54
Weil das PWM Signal auszuwerten softwaremäßig mehr Aufwand ist (ein Hardware CCP Modul hat nur max. 2-3 Eingänge). Ausserdem muss ansonsten der Pin entweder interruptfähig sein, oder man muss im Worst-Case 18ms auf ein Signal warten um die länge auszuwerten. Ich möchte die Servopositionen allerdings loggen, und wenn ich alle 20ms die servos auslese, und nur damit beschäftigt bin, schaffe ich es nicht die anderen messungen mit geringeren intervallen abzufrühstücken.
Ich würde gerne 4-5 Servos erfassen.

wkrug
06.07.2007, 18:32
Ich würde gerne 4-5 Servos erfassen
ICP + Int 0 + Int 1 + Int 2 + Ana. Comp wären 5 Kanäle.
Ein Timer reicht als Zählerquelle.
Pin Change find ich immer ein wenig Suboptimal.
Wenn Du die Interrupts nicht anderweitig brauchst wär das eine Lösung.
Eine weitere Lösung wär das Servosignal vor dem Servoencoder anzuzapfen.
Manche Empfänger haben diese Möglichkeit auf dem Batterieanschluß mit drauf. Dann bräuchtest Du nur einen Interrupt Kanal.

the_Ghost666
07.07.2007, 07:58
mh.. also ich habe 4 Interruptports zur verfügung, die müsste ich softwaremäßig zählen, ausserdem 4 interrupt on change. Was mach ich denn dann mit den 3 CCP Modulen für PWM, Count und Compare? Auch wegen dem Pinout würde ich die Interruptquellen bevorzugen, bin mir aber unsicher, wofür ich die CCPs noch sinnvoll einsetzten sollte. Für Servos ist die Frequenz einfach zu hoch.

Thoralf
10.07.2007, 09:15
und was hältst du vom anzapfen der Servopotis, wie ich es schon vorgeschlagen habe?
ADU-Inputs hat man ja meist mehrere.
Zur Not kann man ja auch, wenn man die Servopotis nicht nutzen kann oder will, ein Poti über Zahnräder ankoppeln und damit die Servostellung messen

the_Ghost666
10.07.2007, 15:43
ich denke ich werde es doch über die Pulsbreite machen, dabei müssen die servos nicht modifiziert werden und es liefert genaue werte. hab nen anderen Controller gewählt, der mir 5 CCP Module liefert

ba4_philipp
10.07.2007, 16:51
Wenn du einen Timer nicht brauchst und den extern triggern kannst, kann man sich damit auch noch einen weiteren ext. INT schaffen.

Gruß Philipp