Code für Servomotor

Gast #694802
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
Gast #694869
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
Gast #695164
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
Gast #695183
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.