Forum: Mikrocontroller und Digitale Elektronik Teensy 3.2 PWM Servo


von Frank K. (digidax)


Lesenswert?

Guten Morgen,

Ich möchte gern diesen Servo:
https://www.premium-modellbau.de/feetech-ft90m-fb-metall-digital-servo-14g-2-2kg-2700-feedback-arduino

mit einem Teensy 3.2 per PWM steuern.
Da ich nirgends eine Info über die PWM Frequenz gefunden habe, gehe ich 
von den modellbautypischen 50 Hz = 20 ms aus.
Entsprechend das PWM setup:

analogWriteFrequency(9, 50);  // Pin 9, 50 Hz

analogWriteResolution(8);

Auf der verlinkten Seite steht:
Betriebswinkel: 270 Grad (500us-2500us)

Die PWM Frequenz beträgt 50 Hz = 20 ms = 20.000 µs
Bei den 8 Bit kann ich 1 bis 255 nutzen also 254 Schritte,
wäre also 20.000 / 254 = 78,7 µs ein Schritt.

Da ich von 500 bis 2500 µs steuern kann, hätte ich also per
analogWrite(9, value);
einen Wertebereich für value von 7 bis 31 zur Verfügung?

Ist die Überlegung so korrekt?
Ich könnte auch 12 Bit für eine bessere Auflösung nehmen:
analogWriteResolution(12);  // analogWrite value 0 to 4095

Danke vorab für eventuelle Hinweise und Hilfe.

lg Frank

von Stefan F. (Gast)


Lesenswert?

Frank K. schrieb:
> Ist die Überlegung so korrekt?

Ja

von Frank K. (digidax)


Lesenswert?

Vielen Dank.

von Stefan F. (Gast)


Lesenswert?

Frank K. schrieb:
> Ich könnte auch 12 Bit für eine bessere Auflösung nehmen

Oder du stellst den Timer von 50 auf 250 Hz um und nutzt nur jeden 5. 
Durchlauf aus, um das PWM Signal zu generieren. Also immer abwechselnd 
4x ohne Impuls und 1x mit Impuls. Den PWM Ausgang kann man ja in der ISR 
bequem ein/aus schalten.

Dann hast du effektiv die 5-fache Auflösung. Feiner lassen sich normale 
analoge Servos eh nicht bewegen.

Ich habe die Idee mal aus Spaß an der Machbarkeit weiter gesponnen und 
so mit den beiden Compare-Einheiten eines 8-bit Timers ganze 10 Servos 
angesteuert. Falls dich das interessiert, schau dir die ISR und die 
Kommentare im Quelltext an: 
http://stefanfrings.de/servocontroller/index.html

von Frank K. (digidax)


Lesenswert?

Danke, das werde ich mir auf alle Fälle mal ansehen, die Idee ist super.
Für meine Anwendung oversized ;-)

Ich baue hier eine "analoge" Zeiger-Uhr zur Temperaturanzeige des 
Wassers in unserem Freibad, LED ist zu teuer. Da ich nur die Zahlen von 
18 bis 26 anfahren muss und wir uns (erst einmal) auf ganze Grad 
beschränken, muss ich die 9 Positionen einigermaßen genau treffen. Ich 
kenn mich ja, wenn ich Beckenaufsicht habe und der Zeiger dann nicht 
genau steht, macht es mich alle ... :-)

Mal sehen, wie gut die Positionierung geht, dann mache ich eventuell 
auch "halbe" Grad.

Der Messwert wird aller 5 min aktualisiert und dann der Servo 
positioniert.
Der Zeiger ist mittels Gegengewicht ausbalanciert, so dasss der Servo 
nur die Kraft zur Positionsänderung benötigt. Mal sehen, wie es sich 
machnisch darstellt, ob ich die Positionen direkt anfahre oder per 
Schleife "sanft" auf die nächste Position drehe.

Gruß, Frank

von Jens M. (schuchkleisser)


Lesenswert?

Das ist doch ein Arduino-Projekt?
Dafür gibt's ungefähr +- eine Million Servolibraries, die zum einen die 
Ansteuerung vereinfachen und zum anderen ein gutes Signal mit hoher 
Auflösung liefern.

z.B. https://www.pjrc.com/teensy/td_libs_Servo.html

von Johannes S. (Gast)


Lesenswert?

ein Schrittmotor mit Poti als Absolutwertgeber dürfte bei der groben 
Mechanik auch einfach zu verbauen sein. Poti mit Untersetzung aus 
Riemenscheiben und Zahnriemen aus dem 3D Drucker Bereich, oder 
Schrittmotor mit Doppelschaft.
Gut sind auch diese Servos mit serieller Ansteuerung:
https://www.amazon.de/lewansoul-Drehmoment-Echtzeit-Feedback-Kugellager/dp/B0763CJYXK
https://github.com/madhephaestus/lx16a-servo
Modellbauservos haben eine begrenzte Haltbarkeit wenn die sehr lange auf 
einer Stelle rumrubbeln.

von jo (Gast)


Lesenswert?

Johannes S. schrieb:
> ein Schrittmotor mit Poti als Absolutwertgeber dürfte bei der groben
> Mechanik auch einfach zu verbauen sein.

"Moderne Anzeigen im Automotiv-Bereich" - auf Deutsch: der gute alte 
Tacho - bedient sich billiger Schrittmotoren (z.B. eBay-Artikelnummer: 
174084147785). Die Steuerung schickt den Zeiger auf Anschlag und gewinnt 
damit die Null=Position. Danach gehts weiter im Blindflug.

Ich würde mir z.B. einen Stepper Motor 28BYJ-48 (eBay-Artikelnummer: 
63658424900) für < 5€ holen und, falls 24/7-Betrieb gewünscht, zur 
Sicherheit einmal in der Nacht die Nullposition anfahren.

Just my 2 ct.

von Frank K. (digidax)


Lesenswert?

Danke für die wrtvollen Tipps,

der Servo blockiert, wenn erst stromlos ist sehr stark. Sollte er 
anfangen zu "rubbeln" schalte ich die Spannungsversorgung des Servos 
über einen Output einfach ab. Die Position wird eh nur aller 5 Min ggf. 
aktualisiert.
Darum ach ein Servo mit einem gut untersetzem Getriebe um stromlos eine 
gewisse Festigkeit zu haben.

Die PJRC lib kannte ich schon, wollte nur erstmal rudimentär das Projekt 
beginnen, vielen Dank.

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
Noch kein Account? Hier anmelden.