Den Antrieb testen
(EN google-translate)
(PL google-translate)
Ansteuerung der Motoren gemäß RP6v2_MAINBOARD.pdf:
Richtung linker Motor: PC2 Richtung rechter Motor: PC3 Geschwindigkeit linker Motor (PWM): OC1B / PD4 Geschwindigkeit rechter Motor (PWM): OC1A / PD5
Code 0-1: Zuordnungen für die Motoransteuerung.
Testprogramm für die Motoren nur mit Hilfe von digitalen Ausgängen
#include<avr/io.h> void initialisiereMotore() { DDRC |= 0b00001100; DDRD |= 0b00011000; } void fahrt(int links, int rechts) { if(links==0) { PORTC &= ~(1<<PC2); PORTD &= ~(1<<PD4); } else if(links<0) { PORTC |= (1<<PC2); PORTD |= (1<<PD4); } else { PORTC &= ~(1<<PC2); PORTD |= (1<<PD4); } if(rechts==0) { PORTC &= ~(1<<PC3); PORTD &= ~(1<<PD5); } else if(rechts<0) { PORTC |= (1<<PC3); PORTD |= (1<<PD5); } else { PORTC &= ~(1<<PC3); PORTD |= (1<<PD5); } } int main() { unsigned long pause=0; initialisiereMotore(); while(1) { for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(1,1); //Geradeaus for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(-1,1); //Links-Drehung for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(0,0); //stop } }
Code 0-2: motortest.c - Testprogramm für die Motoren nur mit Hilfe von digitalen Ausgängen
Testprogramm für die Motoren nur mit Hilfe von digitalen Ausgängen und 10-Bit Phasenkorrekten PWM-Signalen von Timer 1
// avr-gcc -O2 -mmcu=atmega32 motortestpwm.c -o motortestpwm.elf // avr-objcopy -O ihex -j .text -j .data motortestpwm.elf motortestpwm.hex // Upload über RobotLoader_20100712 #include<avr/io.h> void initialisiereMotore() { DDRC |= 0b00001100; //Richtung //10-Bit Phasen-korrektes PWM-Signal. TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<FOC1A) | (0<<FOC1B) | (1<<WGM11) | (1<<WGM10); TCCR1B = (0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10); DDRD |= (1<<PD5) | (1<<PD4); //auf Ausgang setzen. OCR1A = 0; //PWM-Breite setzen (entspricht für Servo auf 0 Grad). OCR1B = 0; //PWM-Breite setzen (entspricht für Servo auf 0 Grad). } void fahrt(int links, int rechts) //Wertebereich: +-1023 { if(links==0) { PORTC &= ~(1<<PC2); OCR1B = 0; } else if(links<0) { PORTC |= (1<<PC2); OCR1B = -links; } else { PORTC &= ~(1<<PC2); OCR1B = links; } if(rechts==0) { PORTC &= ~(1<<PC3); OCR1A = 0; } else if(rechts<0) { PORTC |= (1<<PC3); OCR1A = -rechts; } else { PORTC &= ~(1<<PC3); OCR1A = rechts; } } int main() { unsigned long pause=0; initialisiereMotore(); while(1) { for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(1023,1023); //Geradeaus for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(0,0); //stop for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(200,200); //langsame Geradeaus for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(0,0); //stop for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(-1023,1023); //Links-Drehung for(pause=0;pause<300000;pause++) DDRB|=0; fahrt(0,0); //stop } }
Code 0-3: motortestpwm.c - Testprogramm für die Motoren nur mit Hilfe von digitalen Ausgängen und 10-Bit Phasenkorrekten PWM-Signalen von Timer 1