PWM für Schrittmotorsteuerung

OP #2056025
Lesenswert?

Hallo liebe Gemeinde!

Ich bin Anfänger im Programmieren von µC und brauche Hilfe. Zu machen 
habe ich ein Programm welches mir einen Schrittmotor über eine PWM 
steuert. Der Motor soll sozusagen über eine Rampe anfahren.
µC = PIC 18f4525 mit 40Mhz.

Was ich aus dem Datenblatt und dem Forum rauslesen konnte, benötigt die 
PWM den Timer2. Getestet wird das ganze an der LED des RC2 Pins an 
meinem Test Board. Im Moment ist es leider so, dass die LED entweder 
ständig auf "1" oder ständig auf "0" ist, was nicht meinen Vorstellungen 
entspricht.

Ziel wäre es:
blinkender Zustand -> einige Sec. auf "1" -> blinkender Zustand -> LED 
aus.

Der folgende Code ist mit Hilfe des Datenblattes und den Infos aus 
diesem Forum erstellt worden, hat aber sicher noch unzählige Fehler in 
sich, da ich noch nicht so geübt darin bin.

void initalizePWM()
{
  //Port Einstellungen
    TRISC=0x00;             //PORTC als Ausgang definieren
    PORTC=0x00;             //PORTC Inhalt löschen

  //CCP/PWM Modul Einstellungen
    CCP1CON=1;              //jede steigende Flanke
    PR2=0xFF;               //max. Periode (0-255 bei Timer2) 8 Bit
    PWM1CON=0x2F;
    CCPR1L=128;             //CCPR1L/CCPR1H=Duty Cylce???

  //Timer 2 Einstellungen
    T2CONbits.T2CKPS1=1;     //Timer 2 prescaler:
    T2CONbits.T2CKPS0=1;
//  T2CONbits.TOUTPS3=1;     //Timer 2 postscaler:
//  T2CONbits.TOUTPS2=1;
//  T2CONbits.TOUTPS1=1;
//  T2CONbits.TOUTPS0=1;
    PORTC=0x04;
    T2CONbits.TMR2ON=1;      //Timer 2 an

}

void main()
{
}

Wenn mir jemand helfen kann, ich würde mich über hilfreiche Kommentare 
freuen.
Gast #2056223
Lesenswert?

Alexander L. schrieb:
> habe ich ein Programm welches mir einen Schrittmotor über eine PWM
> steuert. Der Motor soll sozusagen über eine Rampe anfahren.

Ein Schrittmotor wird z.B. so angesteuert:

Timerinterrupt:
  static int phase =0;
  if(phase == 0)
    Phase 1;
  if(phase == 1)
    Phase 2;
  if(phase == 2)
    Phase 3;
  if(phase == 3)
    Phase 4;

  phase++;
  if(phase == 4)
    phase=0;
Ende

Je schneller du den Interrupt wiederholen lästt, umso schneller dreht 
der Schrittmotor. Hat erst mal nix mit PWM zu tun.
:-)

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