Moe
11.11.2004, 18:27
Hallo,
habe den ganzen Tag versucht herauszufinden, wie man einen Getriebemotor (4,5-15V, 1A) über PWM ansteuern kann. Ich habe das RNCONTROL 14 von roboterhardware der einen L293D integriert hat. Es gelingt mir, über die Motorklemmen Spannung auszugeben. Leider kann ich immer nur 0V oder 12 V an den Motor geben - ich möchte das gerne regelbar machen.
Im folgenden Code habe ich die von mir benutzten Befehle für das PWMen dargestellt:
#define PWM_init DDRD= _BV(PD4) | _BV(PD5);
#define upcounting TCCR1A = _BV(COM1A0) | _BV(COM1A1)
#define downcounting TCCR1A |= _BV(COM1A1)
#define T_prescaler_256 TCCR1B |= _BV(CS12)
#define T_stop TCCR1B = ~_BV(CS12) & ~_BV(CS11) & ~_BV(CS10)
void main(void){
....
outp(0xFF, DDRC); // Alle Ports von C als Output setzen
outp(0xFF, PORTC); // Alle Ports 0
outp(0xFF, DDRD); // Alle Ports von D als Output setzen
outp(0xFF, PORTD); // Alle Ports 0
PWM_init;
upcounting;
sbi(PORTC, 6);//Drehrichtung
cbi(PORTC, 7);//Drehrichtung
sbi(PORTD, 4);
//Timer2_stop;
//Timer2_prescaler_256;
for(i = 0; i > 1023; ++i){
OCR1B= i;
OCR1A= i;
ms_sleep(30);
}
....
}
Wenn ich sbi(PORTD, 4) setze, dann liegen gleich 12V an den Klemmen. Lasse ich eben diesen Befehl weg, dann messe ich nur zwischen 35 bis 75 mV und der Motor macht gar nichts.
Ich habe im Manual vom Atmega32 nachgeschaut, werde aber nicht richtig schlau daraus. Vielleicht kann mir jemand einen Tipp geben.
Für Eure Mühe schönen Dank!
Gruß!
habe den ganzen Tag versucht herauszufinden, wie man einen Getriebemotor (4,5-15V, 1A) über PWM ansteuern kann. Ich habe das RNCONTROL 14 von roboterhardware der einen L293D integriert hat. Es gelingt mir, über die Motorklemmen Spannung auszugeben. Leider kann ich immer nur 0V oder 12 V an den Motor geben - ich möchte das gerne regelbar machen.
Im folgenden Code habe ich die von mir benutzten Befehle für das PWMen dargestellt:
#define PWM_init DDRD= _BV(PD4) | _BV(PD5);
#define upcounting TCCR1A = _BV(COM1A0) | _BV(COM1A1)
#define downcounting TCCR1A |= _BV(COM1A1)
#define T_prescaler_256 TCCR1B |= _BV(CS12)
#define T_stop TCCR1B = ~_BV(CS12) & ~_BV(CS11) & ~_BV(CS10)
void main(void){
....
outp(0xFF, DDRC); // Alle Ports von C als Output setzen
outp(0xFF, PORTC); // Alle Ports 0
outp(0xFF, DDRD); // Alle Ports von D als Output setzen
outp(0xFF, PORTD); // Alle Ports 0
PWM_init;
upcounting;
sbi(PORTC, 6);//Drehrichtung
cbi(PORTC, 7);//Drehrichtung
sbi(PORTD, 4);
//Timer2_stop;
//Timer2_prescaler_256;
for(i = 0; i > 1023; ++i){
OCR1B= i;
OCR1A= i;
ms_sleep(30);
}
....
}
Wenn ich sbi(PORTD, 4) setze, dann liegen gleich 12V an den Klemmen. Lasse ich eben diesen Befehl weg, dann messe ich nur zwischen 35 bis 75 mV und der Motor macht gar nichts.
Ich habe im Manual vom Atmega32 nachgeschaut, werde aber nicht richtig schlau daraus. Vielleicht kann mir jemand einen Tipp geben.
Für Eure Mühe schönen Dank!
Gruß!