Forum: Mikrocontroller und Digitale Elektronik Servo Motoren (2 Positionen) mit PIC steuern


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Mathias Bähr (Gast)


Lesenswert?

Hallo Zusammen,
meine Erfahrungen mit Programmieren und PICs sind schon sehr lange her 
und daher eingerostet, bräuchte bisschen "Starthilfe".

Für die Modelleisenbahn möchte ich an verschiedenen Stellen kleine 
Servo-Motoren einsetzen. Diese sollen sich "nur" zwischen zwei 
Positionen hin und her bewegen. Die beiden Positionen müssen aber 
individuell für jeden Servo eingestellt werden, die Einstellung der 
Geschwindigkeit beim Wechsel von der einen zur anderen Position wäre 
super.

Folgende Randbedingungen:
- Die Schaltung sollte relativ einfach sein, da sie mehrfach (ca. 10x) 
aufgebaut werden muss, am besten interner Oszillator und Servo direkt 
vom PIC ansteuern
- Die Schaltung sollte zwei Eingänge haben, "Pos 1" und "Pos 2", die 
jeweils über einen 5V Impuls (ca. 0,5 sec) angesteuert werden. Manchmal 
gibt es nur ein Eingangssignal, das bleibt dann so lange auf 5V wie der 
Servo auf der anderen Position bleiben soll. Um nur eine Schaltung und 
Software für beide Varianten zu haben wäre die Idee mit einem Jumper 
"Rast" / "Tast". Steht der Jumper auf Tast gehen beide Eingänge auf den 
PIC, Impulse schalten um. Steht der Jumper auf Rast bekommt der Eingang 
2 dadurch dauerhaft 5V. Beim booten des PICs wird der Eingang 2 für 2-3 
Sekunden abgefragt und damit die Software auf Rast bzw Tast gestellt. 
Sollte es noch einen freien Eingang geben könnte der Jumper auch direkt 
auf einen Eingang.
- Es sollte je einen Poti für den rechten Anschlag und einen für den 
Drehwinkel geben
- Schön wäre ein weiterer Poti für die Geschwindigkeit, alternativ auch 
hier ein Jumper für "Schnell" und "Langsam" (z.B. Wechsel innerhalb 3 
Sekunden)
- Ein PWM Ausgang sollte zum Servo gehen
- Zwei Ausgänge sollten über jeweils eine LED den aktuellen Zustand 
anzeigen (Pos 1 / Pos 2). Was die LEDs während dem langsamen Wechsel 
anzeigen ist egal.

Nun zu den Fragen:
- Was für einen PIC würdet ihr dafür empfehlen?
- Seht ihr das als realistische und machbare Anforderungen?
- Habt ihr andere oder bessere Ideen zur Realisierung?

Im Voraus schon mal vielen Dank !

von Mathias B. (Gast)


Lesenswert?

Noch eine Ergänzung zur Info:
Habe ein PICkit 3 und MPLAB X IDE und MPLAB IPE (je v5.50)

von Walter Tarpan (Gast) (Gast)


Lesenswert?

Du meinst Modellbauservos, oder? Dann kann das jede MCU mit mindestens 
zwei PWM-Ausgängen mit Leichtigkeit. Nimm einfach die, die Du hast.

von Mathias B. (Gast)


Lesenswert?

Hallo Walter Tarpan,
vielen Dank für die schnelle Antwort.

Warum zwei PWM Ausgänge?
Um die zwei Servo Positionen zu erreichen muss das PWM Signal verändert 
werden, aber nicht zwei Ausgänge zu einem Servo, oder ?
Würde ein PIC 16F684 (nur ein CCP Out) reichen?
Oder müsste es mindestens ein PIC 16F873 sein?

DANKE

von MaWin (Gast)


Lesenswert?

Mathias Bähr schrieb:
> Was für einen PIC würdet ihr dafür empfehlen?

PIC12CE529 oder ATtiny13 sprich: der kleinste SO8 uC, auch Padauk 
PMS150C-S08 ist sehr fast ein PIC.
Am einfachsten programmiert sich das aber mit Arduino Modellbauservo 
Library auf einem AVR.

> Seht ihr das als realistische und machbare Anforderungen?

Sicher.

> Habt ihr andere oder bessere Ideen zur Realisierung?

Modellbau ist prinzipiell eine gestörte Umgebung, in der man darauf 
achten muss, dass auch bei Fehlanschluss und Fehlbedienung die Teile 
heile bleiben. Das ist mehr Konstruktionsaufwand als der Rest.

von Mathias B. (Gast)


Lesenswert?

MaWin schrieb:
> PIC12CE529 oder ATtiny13 sprich: der kleinste SO8 uC, auch Padauk
> PMS150C-S08 ist sehr fast ein PIC.

Wie kann ich mit einem 8 Pin Chip alle in den Randbedingungen 
beschriebenen I/Os  realisieren? Brauche mindestens 5 INs und 3 OUTs. 
Oder mache ich einen Denkfehler?

von H. H. (Gast)


Lesenswert?

Mathias B. schrieb:
> Brauche mindestens 5 INs und 3 OUTs.

Schaltplan statt Prosa wäre besser gewesen...

von ... (Gast)


Lesenswert?

Mathias Bähr schrieb:
> - Habt ihr andere oder bessere Ideen zur Realisierung?
Pololu Maestro USB Servo Controllers

von MaWin (Gast)


Lesenswert?

Mathias B. schrieb:
> Wie kann ich mit einem 8 Pin Chip alle in den Randbedingungen
> beschriebenen I/Os  realisieren? Brauche mindestens 5 INs und 3 OUTs.
> Oder mache ich einen Denkfehler?

Ich denke

GND, VCC, Servoimpuls, In1, In2 und Analogeingang für Position1 und 
Position 2 und Geschwindigkeit, macht 8.
Konfiguration geht über die Eingänge beim Einschalten der Versorgung.

von Mathias B. (Gast)


Angehängte Dateien:

Lesenswert?

H. H. schrieb:
> Schaltplan statt Prosa wäre besser gewesen...

Sorry, Anfängerfehler ;-)
Das ganze anbei als Bild ...

von STK500-Besitzer (Gast)


Lesenswert?

Wie oft willst du die Endpunkte und Geschwindigkeit ändern?
Je mehr Hardware, um so früher fällt das System aus...

Die Positions- und Geschwindigkeitsparameter kann man schon länger im 
(integrierten) EEPROM/NVRAM des Controllers speichern.

Signale schaltet man eigentlich auch nicht gegen (+), sondern gegen GND, 
weil die Controller meist integrierte PullUp-Widerstände an den Portpins 
besitzen.

Allerdings kenne ich mich nicht (mehr) mit PICs aus - die waren bei mir 
Ende der 1990er aktuell (als Conrad noch eine der wenigen Lieferquellen 
für Privatleute war, und wurden umgehend durch AVR ersetzt).
Ich hatte damals auf einem PIC16C84 (oder so) auch mal einen 
Servo-Tester programmiert.

von Rainer V. (a_zip)


Lesenswert?

Ich denke auch, dass du die Parameter in den Pic bringst und dann 
jeweils schreibst, wenn die Konfiguration geändert werden soll. Also 
keine Schalter-Orgien und auch keine Analogeingänge für sowas wie 
"Endposition-links". Wenn du die Servo-Programme nutzt, dann reduziert 
sich alles auf das Festlegen der Parameter und das Speichern im EEprom. 
Da du nicht schreibst, ob du eine analoge oder eine digitale Bahn hast, 
kann man erst mal keine weiteren Tips geben. Wenn du allerdings diese 
"Servo-Module" tatsächlich insulär einsetzen willst, dann mach das so 
wie in deinem Entwurf. Bau ein Modul möglichst auf Lochraster auf und 
spiele damit. Bedenke aber, dass dein Schaltplan noch kein endgültiger 
Plan sein kann! Du hast jegliche Entstör- oder Stützkondensatoren nicht 
eingezeichnet und auch die "richtige" Beschaltung der Analogeingänge 
fehlt. Hier gilt was MaWin sagte...Modellbahn/bau bedeutet auch immer 
eine gestörte Umgebung. Dein Servo soll schließlich keinen Steptanz 
aufführen, wenn eine Lok vorbeirattert!
Viel Spass, Rainer

von Walter T. (nicolas)


Lesenswert?

Mathias B. schrieb:
> Warum zwei PWM Ausgänge?

Weil ich die Anforderung falsch gelesen habe. Ich hatte zuerst 
verstanden: zwei Servos pro Controller.

Die Potis für die Anschläge sind wahrscheinlich der Teil, der von der 
ganzen Aktion den größten Platz auf der Leiterplatte benötigt.

Mathias B. schrieb:
> Würde ein PIC 16F684 reichen?

Klar. Der hat genug Pins, PWM und ADC.

Aber die Fragen klingen nach einem Erstlingsprojekt. Also steht und 
fällt das damit, ein gutes Start-Tutorial zu finden. Als 
Erstlingsprojekt ist das nicht übel. Ein klares Ziel und überschaubarer 
Aufwand. Ob es gutes Lehrmaterial die PIC 16F684 gibt, weiß ich nicht.

: Bearbeitet durch User
von Jochen-paul S. (picfan)


Angehängte Dateien:

Lesenswert?

Hallo,
habe da mal eine Servo-Steuereung gemacht, allerdings mit nRF2401, 
könntest aber evtl. unerwünschtes ausklammern/streichen.
Hat als links-rechts-Fernsteuerung für Lenkung Modellschiff gedient.
Der Code funktioniert sicher auch mit einem PIC16F684, fallst du schon 
so einen rumliegen hast, evtl. sind nur kleine Änderungen nötig.
Gruss Jochen-Paul

von Mathias Bähr (Gast)


Lesenswert?

Vielen Dank an alle für die Antworten und Tipps !

Das Bild sollte keinesfalls einen Schaltplan darstellen, eher ein 
"Wunsch-Blockschaltbild".

Der Platzbedarf für die Potis ist problemlos. Über eine grafische 
Oberfläche könnte ich mir die Einstellung der Positionen über den 
Computer vorstellen, aber in Assembler oder C stelle ich mir das bei der 
Stückzahl eher aufwendig vor. Alle Positionen müssen bei der 
Inbetriebnahme eingestellt werden und später vielleicht noch vereinzelt 
ein bisschen angepasst werden.

Wenn ich das richtig verstanden habe ist PIC die ältere und eher auf 
Assembler basierte Variante, AVR die neuere und eher auf C basierte 
Variante, richtig?
Jeder Typ hat seine Vor- und Nachteile und es kommt eher ein bisschen 
darauf an was man mag oder kennt, oder?

DANKE

von H. H. (Gast)


Lesenswert?

Mathias Bähr schrieb:
> Wenn ich das richtig verstanden habe ist PIC die ältere und eher auf
> Assembler basierte Variante, AVR die neuere und eher auf C basierte
> Variante, richtig?

Nein.


> Jeder Typ hat seine Vor- und Nachteile und es kommt eher ein bisschen
> darauf an was man mag oder kennt, oder?

Ja.

von Harald (Gast)


Lesenswert?

Wenn deine Kenntnisse „schon sehr lange her und daher eingerostet“ sind 
würde ich Dir einfach ein Arduino-Modul empfehlen - egal welche CPU. 
Gibt es in allen Größen, Servo-Ansteuerungen sind als 2-5 Zeiler zu 
realisieren. Sehr einfache IDE, sehr einfach handhabbar.

von Ottoka (Gast)


Lesenswert?

Ja, Arduino wäre höchst preiswert und einfach.

https://www.instructables.com/Sweep-Servo-Motor-With-Arduino-Nano/

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.