toraX
17.02.2006, 15:01
Hallo Leute,
ich versuch einen Programm zu schreiben das einen Schrittmotor zum laufen bringt.
Beim Ansteuern eines Getriebemotors hat alles geklappt, aber bei Schrittmotoren setzt es bei mir total aus. Hab schon mehrere Tutorials durchgelesen und werd aber nicht schlau daraus.
Ich hab das RN-Control Board und einen Unipolaren Schrittmotor (6 Anschlusskabel).
Ich hab wie in dem Tutorial
https://www.roboternetz.de/wissen/index.php/Schrittmotoren
beschrieben die Leitungen identifiziert und dann angeschlossen (die Mittelanzapfung hab ich nicht angeschlossen).
Ich hab folgendes Prog
#include <avr/io.h>
void init(void);
void timer1_init(void);
void delay_ms(unsigned int ms);
int main(void)
{
init();
timer1_init();
while(1)
{
OCR1AL = 60;
OCR1BL = 60;
//Schritt1
PORTC |= (1<<PC6);
PORTC &= ~(1<<PC7);
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB1);
//Schritt2
PORTC |= (1<<PC6);
PORTC &= ~(1<<PC7);
PORTB &= ~(1<<PB0);
PORTB |= (1<<PB1);
//SChritt3
PORTC &= ~(1<<PC6);
PORTC |= (1<<PC7);
PORTB &= ~(1<<PB0);
PORTB |= (1<<PB1);
//SChritt4
PORTC &= ~(1<<PC6);
PORTC |= (1<<PC7);
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB1);
}
return 0;
}
void init(void)
{
/* Port A als Eingang deklarieren ( A/D-Wandler Eingänge ) */
DDRA = 0x00;
PORTA = 0x00;
/* Port B als Ausgang deklarieren */
DDRB = 0xff;
PORTB = 0x00;
/* Port C als Ausgang deklarieren */
DDRC = 0xff;
PORTC = 0x00;
/* Port D als Ausgang deklarieren */
DDRD = 0xff;
PORTD = 0x00;
}
/* Timer1 initialisieren */
void timer1_init(void)
{
/* normale 8-bit PWM aktivieren ( nicht invertiert ),
Das Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet */
TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);
/* Einstellen der PWM-Frequenz auf 14 kHz ( Prescaler = 1 ) */
TCCR1B = (1<<CS10);
/* Interrupts für Timer1 deaktivieren
Achtung : Auch die Interrupts für die anderen Timer stehen in diesem Register */
TIMSK &= ~0x3c;
OCR1A = 0;
OCR1B = 0;
}
Bin totaler Anfänger auf dem Gebiet und würde mich über jeden Denkanstoss freuen.
Gruss
Torsten
ich versuch einen Programm zu schreiben das einen Schrittmotor zum laufen bringt.
Beim Ansteuern eines Getriebemotors hat alles geklappt, aber bei Schrittmotoren setzt es bei mir total aus. Hab schon mehrere Tutorials durchgelesen und werd aber nicht schlau daraus.
Ich hab das RN-Control Board und einen Unipolaren Schrittmotor (6 Anschlusskabel).
Ich hab wie in dem Tutorial
https://www.roboternetz.de/wissen/index.php/Schrittmotoren
beschrieben die Leitungen identifiziert und dann angeschlossen (die Mittelanzapfung hab ich nicht angeschlossen).
Ich hab folgendes Prog
#include <avr/io.h>
void init(void);
void timer1_init(void);
void delay_ms(unsigned int ms);
int main(void)
{
init();
timer1_init();
while(1)
{
OCR1AL = 60;
OCR1BL = 60;
//Schritt1
PORTC |= (1<<PC6);
PORTC &= ~(1<<PC7);
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB1);
//Schritt2
PORTC |= (1<<PC6);
PORTC &= ~(1<<PC7);
PORTB &= ~(1<<PB0);
PORTB |= (1<<PB1);
//SChritt3
PORTC &= ~(1<<PC6);
PORTC |= (1<<PC7);
PORTB &= ~(1<<PB0);
PORTB |= (1<<PB1);
//SChritt4
PORTC &= ~(1<<PC6);
PORTC |= (1<<PC7);
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB1);
}
return 0;
}
void init(void)
{
/* Port A als Eingang deklarieren ( A/D-Wandler Eingänge ) */
DDRA = 0x00;
PORTA = 0x00;
/* Port B als Ausgang deklarieren */
DDRB = 0xff;
PORTB = 0x00;
/* Port C als Ausgang deklarieren */
DDRC = 0xff;
PORTC = 0x00;
/* Port D als Ausgang deklarieren */
DDRD = 0xff;
PORTD = 0x00;
}
/* Timer1 initialisieren */
void timer1_init(void)
{
/* normale 8-bit PWM aktivieren ( nicht invertiert ),
Das Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet */
TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);
/* Einstellen der PWM-Frequenz auf 14 kHz ( Prescaler = 1 ) */
TCCR1B = (1<<CS10);
/* Interrupts für Timer1 deaktivieren
Achtung : Auch die Interrupts für die anderen Timer stehen in diesem Register */
TIMSK &= ~0x3c;
OCR1A = 0;
OCR1B = 0;
}
Bin totaler Anfänger auf dem Gebiet und würde mich über jeden Denkanstoss freuen.
Gruss
Torsten