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