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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren