Forum: Mikrocontroller und Digitale Elektronik Servomotor Steuerung per PIC


von Sai F. (kolja)


Angehängte Dateien:

Lesenswert?

Hallo Mikrocontrollergemeinde,

also erstmal nen großes Lob an diese Seite und die Community. So nun 
aber zu meinem Problem:
Für ein Projekt an meiner FH soll ich eine Roboterhand konstruieren und 
mit Hilfe eines PIC-Mikrocontrollers steuern. Leider habe ich noch nicht 
so die richtige Erfahrung mit Mikrocontrollern und hoffe nun, dass ihr 
mir ein bissel helfen könnt. Grundlagen in C Programmierung sind 
vorhanden und ein bissel Theorie zu Mikrocontrollern auch.
Bei dem Projekt sollen 5 Finger mit jeweils einem Servomotor individuell 
bewegt werden können. Zusätzlich sollen eventuell noch ein paar Sensoren 
und ein LCD Display implementiert werden. Als µC würde ich gerne den PIC 
16F877A nehmen und als Motortreiber eine vorgefertigte Platine von 
Cytron (Servo Controller).

Meine Fragen:

1. Ich habe gelesen, dass man die Servomotoren per PWM ansteuern muss. 
Reichen nun die 2 PWM Kanäle des PIC 16F877A aus um 5 Servos zu steuern?
Oder muss ich doch noch auf einen anderen µC umsteigen?
2. Mit welcher Frequenz müssen die Servos angesteuert werden? In dem 
Datenblatt steht etwas von 40 Hz, ist dies überhaupt mit der PWM möglich 
oder muss ich da Softwaretechnisch noch ne Verzögerung programmieren? 
Laut des Datenblattes des PICs ist mit einem Systemtakt von 20 MHz nur 
eine Frequenz von ca. 1,5 kHz einstellbar. Stimmt das oder ist es ein 
komplett falscher Ansatz.
3. Wenn ich diesen PIC benutze, welche Bauteile benötige ich ansonsten 
noch? Im Anhang befindet sich das Manual zu dem Servo Controller, darin 
ist ein Vorschlag zur Ansteuerung mit einem µC gegeben. Ist die Annahme 
richtig, dass ich dafür also nur noch eine Platine mit einem 
Festspannungsregler und dem PIC entwerfen müsste und die Steuerung dann 
über die UART Schnittstelle des PICs laufen würde?

Ich hoffe, ihr findet ein bissel Zeit mir zu helfen. Danke schon mal und 
bis denn.

Beste Grüße,
Kolja.

von Christian -. (kakuijin)


Lesenswert?

> Meine Fragen:
>
> 1. Ich habe gelesen, dass man die Servomotoren per PWM ansteuern muss.
> Reichen nun die 2 PWM Kanäle des PIC 16F877A aus um 5 Servos zu steuern?

Falls du einen eigenen Controller machen willst:
Je nachdem welche Servos du nutzen willst.
Wenn es solche wie vom SC16A_User_s_Manual.pdf sind dann ja.. da du 
Normale IO pins verwenden kannst.

Falls du den Controller mit PIC nutzen willst dann geht das natürlich 
auch.

> Oder muss ich doch noch auf einen anderen µC umsteigen?
> 2. Mit welcher Frequenz müssen die Servos angesteuert werden? In dem
> Datenblatt steht etwas von 40 Hz, ist dies überhaupt mit der PWM möglich
> oder muss ich da Softwaretechnisch noch ne Verzögerung programmieren?
> Laut des Datenblattes des PICs ist mit einem Systemtakt von 20 MHz nur
> eine Frequenz von ca. 1,5 kHz einstellbar. Stimmt das oder ist es ein
> komplett falscher Ansatz.

Wie vorher, wenn es die Servos aus dem Datenblatt sind benötigst du nur 
die IO Pins. Somit wärst du "Frequenz unabhängig"

Oder halt über USART den servocontroller steuern...

> 3. Wenn ich diesen PIC benutze, welche Bauteile benötige ich ansonsten
> noch? Im Anhang befindet sich das Manual zu dem Servo Controller, darin
> ist ein Vorschlag zur Ansteuerung mit einem µC gegeben. Ist die Annahme
> richtig, dass ich dafür also nur noch eine Platine mit einem
> Festspannungsregler und dem PIC entwerfen müsste und die Steuerung dann
> über die UART Schnittstelle des PICs laufen würde?

Der Servocontroller nutzt doch schon einen DSPIC welchen man über USB 
vom PC aus steuert, weshalb also noch ein weiterer Controller??

>
> Ich hoffe, ihr findet ein bissel Zeit mir zu helfen. Danke schon mal und
> bis denn.
>
> Beste Grüße,
> Kolja.

von Sai F. (kolja)


Angehängte Dateien:

Lesenswert?

Oh, das ging aber schnell. Besten Dank.
Mir ist auch gerade aufgefallen, dass der dsPIC die komplette 
Ansteuerung der Servos mit PWM usw. übernimmt.
Nun hab ich allerdings noch ein Problem, und zwar will ich die Servos ja 
nicht komplett über USB/ PC steuern lassen, sondern durch einen 
zusätzlichen µC, wie den PIC 16F877. Der soll dann die Befehle per UART 
an den Servo Controller schicken.
Welche Beschaltung brauche ich denn dann für den 16F877, reicht die im 
Manual angegebene aus? Im Anhang befindet sich ein Programmbeispiel, 
vielleicht wird dann deutlich was ich meine.

von Christian -. (kakuijin)


Lesenswert?

Les bitte nochmal, hatte nochmal Ediert.. :P

Sai Ful schrieb:
> Oh, das ging aber schnell. Besten Dank.
> Mir ist auch gerade aufgefallen, dass der dsPIC die komplette
> Ansteuerung der Servos mit PWM usw. übernimmt.

Noe, da gibt es kein PWM, das geht alles über IO-Ports...

> Nun hab ich allerdings noch ein Problem, und zwar will ich die Servos ja
> nicht komplett über USB/ PC steuern lassen, sondern durch einen
> zusätzlichen µC, wie den PIC 16F877. Der soll dann die Befehle per UART
> an den Servo Controller schicken.
> Welche Beschaltung brauche ich denn dann für den 16F877, reicht die im
> Manual angegebene aus? Im Anhang befindet sich ein Programmbeispiel,
> vielleicht wird dann deutlich was ich meine.

Einfach die UART Ports gedreth vom Pic aus ans UART des Controllers 
schalten.
Somit hättest du über RS232/UART die Kontrolle.
Da ich mit einem anderen Compiler arbeite würde das einlesen etwas 
dauern weswegen ich jetzt mal nichts zum C-Programm großartig sagen 
werde.

Aber n Tip: fang erstmal an kleine Befehle für ein Servo zu senden und 
erweitere langsam das Programm.

lg

von Christian -. (kakuijin)


Lesenswert?

Ahh was mir gerade aufgefallen ist, du willst mit 5V mini Servos eine 
Hand steuern, Schaffen die das überhaubt??

von STK500-Besitzer (Gast)


Lesenswert?

>Ahh was mir gerade aufgefallen ist, du willst mit 5V mini Servos eine
>Hand steuern, Schaffen die das überhaubt??

Klar.

von Sai F. (kolja)


Angehängte Dateien:

Lesenswert?

Ok, also besteht die Beschaltung des PIC 16F677A lediglich darin, ihn 
über einen Festspannungsregler zu versorgen und ihn wie auf dem 
angehängten Bild über die UART Schnittstelle mit dem Controller zu 
verbinden. Das wars dann schon oder wie muss ich das verstehen?

Die Stärke der Motoren müsste eigentlich ausreichen.

von Christian -. (kakuijin)


Lesenswert?

> Ok, also besteht die Beschaltung des PIC 16F677A lediglich darin, ihn
> über einen Festspannungsregler zu versorgen und ihn wie auf dem
> angehängten Bild über die UART Schnittstelle mit dem Controller zu
> verbinden. Das wars dann schon oder wie muss ich das verstehen?

Jop, Genau! ;)

lg

von Sai F. (kolja)


Angehängte Dateien:

Lesenswert?

Besten Dank nochmal für eure Hilfe, aber nun habe ich schon wieder ein 
neues Problem und zwar beim kompilieren. Ich benutze MPLAB mit dem CC5x 
Compiler und es erscheint immer folgende Fehlermeldung:

"Duplicate chip definition
 (Multiple chip definitions detected (option -p<chip> and #include 
<header.h>).The #include statement should be removed)"

Im Internet habe ich zwar mehrere Einträge mit dem selben Fehler 
gefunden, aber keine konkrete Lösung. Habt ihr vielleicht ne Ahnung?

Gruß Kolja

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Also ich verstehe das so, dass du einmal den Header eingebunden hast, 
der den Chiptypen enthält und dann hast du nochmal die Definition über 
die Option beim Ausführen mitgegeben. In den Headern stehen meiner 
Errinnerung nach die Adressmappings drin. Wenn du den #include Eintrag 
der Headerdatei im Programm entfernst, dann kannst du es vermutlich 
problemlos kompilieren.

von Sai F. (kolja)


Lesenswert?

Wenn ich den #include-Befehl auskommentiere, dann bekomme ich folgende 
Fehlermeldung:

Syntax error (or limitation)
 (CC5X is unable to compile the expression due to syntax error or
 limited C support. Code correction is required. Check also for
 unbalanced block delimiters '{ .. }' in previous statements)

und verweist auf den Befehl:

__CONFIG ( 0x3F32 );

von Sai F. (kolja)


Lesenswert?

Hat keiner ne Ahnung? Ich komme einfach nicht weiter.

von Karl H. (kbuchegg)


Lesenswert?

Ist dieses Beispiel für deinen Compiler geschrieben?

Dieses __CONFIG Zeugs ist kein Standard-C Mechanismus. Wenn das also 
ursprünlich für einen ganz anderen Compiler gemacht wurde, müsstest du 
rausfinden, was das eigentlich macht und dir mit deinem Compiler einen 
Weg suchen, dasselbe zu erreichen.

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.