mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Code für Servomotor


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich bin neu in der Mikrocontrollertechnik. Muss mich da aber jetzt 
reinfuchsen. Ich möchte gerne einen Servomotor mit PWM ansteuern. Habe 
dafür auch schon folgenden Code geschrieben.

...
    PTCONbits.PTEN  = 1;
    PTCONbits.PTCKPS = 2;      //Prescaler auf 1:16
    PTCONbits.PTMOD = 0;
    PTPER = 9215;    //20ms Periode
    PTMRbits.PTDIR = 0;  //hochzählen
    PWMCON1bits.PEN1H = 1;  //PWM Ausgang 1 aktivieren
    PWMCON1bits.PMOD1 = 1;
    PDC1 = 614;           //1,5 ms Mitte
...

Könnt ihr mir sagen warum der nicht geht? Bzw. wo mein Gedankenfehler 
ist? Als Quartz habe ich 7,3728 MHz. Hoffe ihr könnt mir da helfen.
Danke für euere Bemühungen.

Gruss
Johannes

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies dir dein Posting selbst nochmal durch und versuche danach
mal zu beurteilen, wie ein Außenstehender darauf etwas vernünftiges
antworten soll...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm... dachte wäre verständlich.

Das ganze schreibe ich in einem C Compiler für einen dsPIC.
Dies ist auch nur ein Ausschnitt für den Teil im Programm, wo ich den 
PWM Ausgang des PICs ansprechen möchte.

Der Quartz für den PIC hat die Frequenz von 7,3728 MHz.

    PTCONbits.PTEN  = 1;       //Time Base Count Enable
    PTCONbits.PTCKPS = 2;      //Prescaler auf 1:16
    PTCONbits.PTMOD = 0;       //Free Running Mode (PWM)
    PTPER = 9215;              //20ms Periode
    PTMRbits.PTDIR = 0;        //hochzählen des Timerregisters (PWM)
    PWMCON1bits.PEN1H = 1;     //PWM Ausgang 1 aktivieren
    PWMCON1bits.PMOD1 = 1;     //Independent Mode
    PDC1 = 614;                //1,5 ms Mitte als Duty Cycle

Gruss
Johannes

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dsPIC is ja schonmal die erste wesentliche Info.

>Könnt ihr mir sagen warum der nicht geht?

Weil er keine Beine hat...

Scherz beiseite. Aber "Geht nicht" ist auch keine Fehlerbeschreibung.

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich es auf den dsPIC übertrage, macht der angeschlossene Servo nix. 
Er fährt auf keine Stellung, noch hält er eine.

Autor: Daniel Bauer (und3rt4ker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
nimms mir nicht krumm, aber hast du auch ne Spannungsversorgung am Servo 
und geht es noch? Manchmal sieht man den Wald vor lauter Bäumen nicht.

MfG
und3rt4ker

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spannungsversorgung liegt an von 5V. Servomotor geht auch. Habe ihn mal 
betrieben an einem PWM Signal das ich mit einem IC erzeugt habe.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme an, du hast kein Oszi um das Ausgangssignal mal anzuschauen?

Ich habe zwar keinen blassen von PICs, aber folgende Appnote gefunden:

http://ww1.microchip.com/downloads/en/DeviceDoc/93004A.pdf

Da ist auch ein Codebeispiel drin. Vielleicht hilft das.

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super... Danke... werds gleich mal durchlesen. Morgen hole ich mir ein 
Oszi aus der Uni. Mal sehen was meine Platine dann so ausspuckt.

Autor: Christian S. (mueke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hast du evtl nen treiber-IC hinter dem PIC vergessen. Denke mal nicht 
das der PIC nen Servo treiben kann, oder hat der Servo das integriert?

MfG
Muecke

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Denke mal nicht das der PIC nen Servo treiben kann, oder hat der Servo das 
>integriert?

(Modellbau-)Servos wie in diesem Fall haben eine Regelelektronik 
eingbaut.
Die werden über ein pulsweitenmoduliertes Signal angesprochen.
Mit PICs kenne ich mich nicht aus...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das ist ein dsPIC 30F4011. Der ist extra für eine PWM Steuerung für 
Motoren ausgelegt. Das ganze ist auf einem Dev2 Board von Microchip 
drauf.
Mittlerweile habe ich auch geschafft, dass der Servo wenigstens etwas 
tut. Egal was ich jetzt einstelle, er fährt immer kpl. nach links. Den 
Code habe ich etwas zu oben verändert.

{
TRISE = 0x0100;             //PWM pins as outputs, and FLTA as input

PWMCON1bits.PMOD1 = 1;
PWMCON1bits.PEN1H = 1;
PTCONbits.PTMOD = 1;        //Time Base Mode
PTCONbits.PTCKPS = 2;       //Prescaler auf 1:16
PTPER = 18880;            //Computer Period  for desired frequency
PDC1 = 1776;    //1,5 ms Mitte
OVDCONbits.POVD1H = 1;
PTCONbits.PTEN = 1;   // Start PWM

}
Vielleicht könnt ihr mir sagen, warum egal was ich für eine Periode 
einstelle immer nur nach links (ccw) fährt.

Gruss
Johannes

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Vielleicht könnt ihr mir sagen, warum egal was ich für eine Periode
> einstelle immer nur nach links (ccw) fährt.

1. Möglichkeit:
Die Pulsdauer ist entweder zu lange oder zu kurz.

2. Möglichkeit:
Dein PWM-Signal ist invertiert (was dann zwangsweise zu einem zu langen 
Puls führt)

Gruß,
Magnetus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.