Hallo,
für eine Uni-Projekt soll ich mittels des vom PIC generierten PWM-Signals einen Schrittmotor antreiben. Jetzt habe ich folgendes Problem:
Der Pic läuft mit 48Mhz und wird von einen 20Mhz Quarz angetrieben. Ein Conrad S-54751HB wird mit 5V Spannung betrieben.
Per Oszi habe ich an den beiden PWM-Ausgängen des PIC ein wunderbares Rechecksignal mit einer Frequenz von 2,92kHz - soweit ich weiß laufen die Schrittmotoren aber nur mit 50Hz (max).
PR2 steht bei mir schon auf 255 und der Vorteiler liegt bei 16:1, d.h. das ich jezt schon die langsamste Frequenz habe, den mit der Pic generieren kann.
Hat jemand eine Idee, wie ich die Frequenz noch weiter runterbekomme? Muss ich mir jetzt ein eigenes Rechtecksignal bauen, dass mit 50Hz läuft, oder kann ich irgendwie doch noch den PIC dazu überreden, mir ein solches Signal zu liefern.
Hier ist noch der Code meiner init()-Funktion:
Code:
void mod_pwm_init() {
PR2 = 255;
old_steps = 128;
//clear registers
CCPR1L = 0;
CCPR2L = 0;
CCP1CON = 0;
CCP2CON = 0;
CCP1CONbits.DC1B0 = 0;
CCP1CONbits.DC1B1 = 0;
CCP2CONbits.DC2B0 = 0;
CCP2CONbits.DC2B1 = 0;
//set and enable PWM
CCP1CONbits.CCP1M2 = 1;
CCP1CONbits.CCP1M3 = 1;
CCP2CONbits.CCP2M2 = 1;
CCP2CONbits.CCP2M3 = 1;
//define CCP1 and CCP2 as output
TRISCbits.TRISC1 = 0;
TRISCbits.TRISC2 = 0;
//Pre-Devider set to 16:1
T2CONbits.T2CKPS0 = 0;
T2CONbits.T2CKPS1 = 1;
//turn PWM on
T2CONbits.TMR2ON = 1;
CCPR1L = old_steps;
CCPR2L = old_steps;
}
Betrachtet man die Hardwarelast durch ein eigenes Rechtecksignal, wäre der interne PWM wohl das bessere Ergebnis, oder?
Vielen Dank schonmal für eure Hilfe
Galdo
Lesezeichen