Hallo zusammen,
ich möchte einen kleinen Roboter mit 2 Motoren mit einem PIC18F2550 zu steuern.
Um die Geschwindigkeit der Räder zu ändern verwende ich 2 PWM Signale CCP1 und CCP2.
Code:
// 20 MHz Takt
/** Configuration ********************************************************/
#pragma config PLLDIV = 2, CPUDIV = OSC1_PLL2, USBDIV = 2, FOSC = HSPLL_HS
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config VREGEN = ON //USB Voltage Regulator Enable:
#pragma config WDT = OFF //Watchdog Timer:
#pragma config MCLRE = ON //MCLR Enable:
#pragma config PBADEN = OFF //PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config LVP = OFF //Low Voltage ICSP:
#pragma config CCP2MX = ON
/** V E C T O R R E M A P P I N G *******************************************/
// Für den Bootlodader
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code
#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
void _high_ISR (void)
{
;
}
#pragma code _LOW_INTERRUPT_VECTOR = 0x000818
void _low_ISR (void)
{
;
}
#pragma code
void Port_Init(void)
{
TRISA = 0x00; //PORTA als Ausgang
TRISB = 0x00; //PORTB als Ausgang
TRISC = 0x00; //PORTC als Ausgang
// Interrupt konfiguration
RCONbits.IPEN = 0;
INTCON = 0xC8; // Enable all Interrupts
T1CON = 0b00101011;
// PIE1bits.TMR1IE = 1; // Enable Timer1 Interrupt
// IPR1bits.TMR1IP = 1; //
// PIR1bits.TMR1IF = 0; // Timer1 Interruptflag löschen
// PWM konfiguration
PR2=0x80; //1.:Register PR2 Wert zuweisen
CCPR1L=0x80; //2.:
CCPR2L=0x80;
CCP2CONbits.DC2B0=0;
CCP2CONbits.DC2B1=0;
CCP1CONbits.DC1B0=0;
CCP1CONbits.DC1B1=0;
TRISCbits.TRISC2=0; //3.: CCP1 als Ausgang
TRISCbits.TRISC1=0; // CCP2 als Ausgang
T2CONbits.T2CKPS1=0; //4.: TMR2 Prescale setzen (1:2)
T2CONbits.T2CKPS0=0; // Wert egal
T2CONbits.TMR2ON=1; //Timer2 ON
CCP1CONbits.CCP1M2=1; //5.: CCP1 für PWM konfiguriert
CCP1CONbits.CCP1M3=1;
CCP2CONbits.CCP2M2=1; // CCP2 für PWM konfiguriert
CCP2CONbits.CCP2M3=1;
PORTAbits.RA2 = 1; //power LED einschalten
}
Die PWM kann ich mit dem Oszi messen, jedoch hat die PWM2 nur einen Pegel von 1V und PWM1 wie erwartet 5V.
Was muss ich machen, damit PWM2 auch 5V hat. (Beide Pins sind unbelastet und nur mit dem Oszi verbunden)
Danke für eure Antworten.
Lesezeichen