Forum: Mikrocontroller und Digitale Elektronik PWM für Schrittmotorsteuerung


von Alexander L. (yelram)


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.

von Karl H. (kbuchegg)


Lesenswert?

Vielleicht übersehe ich ja auch was.
Aber ich wüsste nicht wirklich, was jetzt ein Schrittmotor mit PWM zu 
tun hat.

von Floh (Gast)


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.
:-)

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.