PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Modellbauservo -Ansteuerung mit Schieberegister



a3000
10.10.2004, 16:53
Hallo,

Um einen Modellbauservo mit einem Mikrokontroller anzusteuern muss man alle 20ms einen Impuls ausgeben – das stört mich sehr denn die kleinste Zeiteinheit der C-Conrol beträgt bei Basic 20ms. Daher will ich etwas bauen dass einmal einen Impuls erhält und diesen dann alle 20ms wiederholt bis eine neue Pulslänge kommt.

Ich habe dazu folgende Realisierungsidee: Ich würde ein 1024bit Schieberegister (1.Frage gibt es so etwas) nehmen und dieses mit 51.2 kHz takten (2.Frage woher bekommt man 51.2 kHz). Dann käme alle 20ms am Datenausgang das gleiche heraus. Wenn nun der Impuls 1,5ms betragen soll würde ich für 77 Takte eine 1 in das Register schreiben. Dann würde ich den Dateneingang des SRG vom Controller auf den Ausgang des SRG schalten (Signal würde sich wiederholen).

Meine Fragen: Könnte das so funktionieren? Gibt es einfachere Lösungen?

Ich hoffe das ihr mir helfen könnt

MFG Lukas

Manf
10.10.2004, 18:01
Ich schätze mal, dass man anstelle des Aufwands für ein Schiebegregister gleich die Regelelektronik des Servos herausnehmen kann und das Poti an einen A/D Eingang des Controllers anschließt.
Mit ein paar Impulsen an einen Brückentrieber schiebt man den Servomotor dann in die gewünschte Stellung.
Manfred

a3000
10.10.2004, 19:54
Danke für den Vorschlag!
Habe leider ein Problem mit dieser Lösung: Die periodischen Impulse braucht der Servo als Soll-Wert. Um nur eine Position anzufahren wären nur wenige Impulse notwendig (hängt von Stellzeit ab). Wenn aber der Servo bei einer Abweichung vom Soll-Wert nicht mehr reagieren kann (da Elektronik ausgebaut) muss dies der der Controller machen. Eine Dauerhafte Gegenkraft auf den Servo würde dann bedeuten, dass der Controller ständig regeln muss.

Gleylancer
11.10.2004, 07:11
Schau mal hier http://www.electronicsplanet.ch/Schaltun/Servopos/servopos.htm
Ist zwar nur eine min/max einstellung, du kannst aber dir das aber auch noch umbauen auf einen geregelten Betrieb.

MFG

RG
11.10.2004, 11:40
1024 Bit? Sicher sind 10 Bit gemeint, denn 2^10=1024.
Und 10-bit-Schieberegister gibt es meines Wissens als IC.
RG

Gottfreak
11.10.2004, 12:21
Bei Conrad gibt's auch einen Bausatz "Servotester", der über ein Poti ein Servosignal erzeugt. Das ist da einfach ein Multivibrator aus Logic-ICs. Den Schaltplan gibt's netterweise auf deren Seite. Wenn du jetzt das Poti entfernst und den Schleifkontakt durch den DA-Ausgang der C-Control(mit 'nem kleinen Kondensator gefiltert) ersetzt, kannst du über den dein Servo stellen.

Als Alternative würde sich ein schnellerer µC anbieten(ein AVR kann sowas z.B.).

a3000
11.10.2004, 19:20
Eigentlich meine ich schon, dass 1024 bit geschoben werden da sonst die Auflösung zu gering ist. (20ms/1024=ca.20µs)

Gleylancer
11.10.2004, 20:22
1024 bits ergäben ca. 1,8 E+308 Zustände, na dann viel Spaß damit (wie lange wäre denn dann die benötigte Zeit zum schieben? 1 Jahr? :))

Ich denke mal (wie schon gesagt), das du ein 10bit Register meinst, welches du schiebst.
Bei nem Schrittmotor kommst du auch schon mit nem Nibble weiter.

Trotzdem würde ich lieber einen Multivibrator nehmen (NE555), den du ansteuerst. So sind Fehlerquellen auch einfacher auszumachen.

Wenn du trotzdem 1024bits schieben willst, dann meld dich mal, wenn der µC damit fertig ist :)

E-Fan
12.10.2004, 16:35
Schon mal dran Gedacht, das mit den 1024 Bit die zu schiebende Datenmenge gemeint sein könnte und nicht die Auflösung?!?

@a3000 Wie viele Servos willst Du denn mit einem Schieberegister ansteuern und wie willst Du die Wiederholrate realisieren?
___________
Überleg mal wie groß eines mit einer Quantisierung (Auflösung) von 1024 Bit sein müsste. (jedes Bit = ein Anschluß)
Wenn bei Deiner Konstruktion "nur" die zu schiebende Datenmenge ausschlagebend für das Steuersignal ist, dann erhöhe doch die Frequenz des Datenstroms. Damit ließe sich die Auflösung erhöhen.
Wenn Du Servo's etc. ansteuern willst und wie ich gelesen habe Du schon gewisse Kenntnisse in Basic hast, dann würde ich Dir empfehlen auf Atmel-Controller umzusteigen und Bascom als Compiler (Demo kostet nix, ist aber auf 2k Programmcode begrenzt) zu nutzen.
Ein selbstgebauter ISP-Programmierdongle kostet Dich nicht mal 5 Eu's. (gibts aber auch zu kaufen)
Für den Anfang würde es ja reichen einen Controller per RS232 von der C-Control mit den Notwendigen Daten zu versorgen und dem Controller die Erzeugung des Steuersignals für die Servos zu überlassen. Man kann die Daten im Hintergrund in den Speicher schreiben wodurch der Programmablauf nicht unterbrochen wird.
Einige belächeln Basic, scheinen aber auch nicht zu wissen wie leicht wie Dinge damit realisieren lassen.
(kleines Beispiel: Ich hab ein Prog mit Bascom geschrieben, das einen AT90S2313 neun Servos steuern lässt. Die Frequenz der Steuersignale beträgt dabei immer genau 50Hz und nebenbei werden noch diverse Dinge mittels I²C abgearbeitet)

lepton
12.10.2004, 22:55
ich plane etwas ähnliches. Die Timer Iinterupts der AVR's scheinen mir für diesen Zweck geeignet. Der erste Timer schaltet einen Port alle 20 ms high, der andere nach einer variablen Zeit wieder auf low.

RCO
13.10.2004, 08:11
Willst du damit Servos ansteuern lepton?
Die AVRs haben doch fertige Servo-Befehle, wurde glaube ich schonmal gesagt, aber ist doch einfacher oder?

lepton
13.10.2004, 09:11
ich möchte damit einen Servo ansteuern. Die AVRs haben aber keine fertigen Servobefehle. Alllerdings kann man wie schon oben beschrieben die Elektronik der Servos abknipsen und die Regelung dem AVR übertragen. Bei meinem Vorschlag regelt der Servo die Abweichungen vom Sollwert noch selbst aus. Ich lasse lieber die untergeordneten Komponenten möglichst viel erledigen. Letztendlich ist das natürlich Geschmackssache.

RCO
13.10.2004, 09:26
Also irgendwie hab ich das Gefühl was nicht mitbekommen zu haben.
Du kannst den Servo direkt mit einem Servo asnteuern, Elektronik bleibt natürlich im Servo.

Config Servos = 1 , Servo1 = Portd.2 , Reload = 10
Config Pind.2 = Output
Enable Interrupts
Servo(1) = 120

Oder was genau willst du machen?

MFg Moritz

Gottfreak
13.10.2004, 10:14
@RCO: Die AVRs haben KEINE Servobefehle integriert.
Die Befehle, die du auflistest sind für Bascom und der Compiler macht daraus eine Softwarelösung, die den Timer0 und seinen Interrupt nutzt.
Das ist genau dann nützlich, wenn man:
1. Bascom verwendet
2. Nichts wichtigeres mit Timer0 vorhat.
3. Keinen Wert darauf legt, die Sache selbst zu implementieren(für viele ist schließlich der Weg das Ziel.).

RCO
13.10.2004, 10:18
OK, da hast du recht.

voidpointer
18.10.2004, 14:09
Hallo,

nach dem, was ich im Web so gelesen habe, ist es für den Servo nicht wichtig, ob er alle 20 ms ein Signal bekommt. In dieser Hinsicht ist die Fernsteuer-Elektronik sehr robust. Auch wenn der Servo nur alle 50 ms ein Signal bekommt, sollte er noch richtig stellen. Wichtig ist dagegen die Länge des Signals / Pegels. Dieser bewegt sich bei den mir bekannten Servos zwischen 1 ms und 2 ms, wobei 1.5 ms Mittelstellung bedeutet. Es soll aber auch andere Servos geben mit anderen Zeiten. Damit hat man mit dem C-Control ein Problem - wenn der kein PWM oder sonstigen Timer hat, sollte man wohl eine zusätzliche Hardware verwenden.

Google mal nach "SD20". Es gibt da sogar ein Beispiel für C-Control...

Gruß, Achim

19.10.2004, 14:04
Wenn die Signale zu selten oder zu oft wiederholt werden, kann der Servo anfangen zu zittern, beziehungsweise ist dann nicht mehr in der Lage die Position des Steuerruders zu halten.
Zwischen 40 und 90 Herz funktioniert die Eklektronik meiner Servos Problemlos.
Man sollte es auch vermeiden mit der Veränderung der Länge des Impulses gleichzeitig die Widerholfrequenz zu ändern. Die meisten Steuerungen reagieren darauf mit Fehlfunktionen.