This is an old revision of the document!


Samm-mootorid

Unipolaar samm-mootor

 

Bipolaar samm-mootor

/*-------------------------------------------------------------
Title:		Bipolar stepper motor with Actuator Board
Date:		080328
Ver.:		1.1
Compiler:	AVR-GCC
Target:		ATmega128
Hardware:	Actuator board, bipolar stepper
Author: 	Maido Hiiemaa / Raivo Sell 2008
 
Notes:	Optimization -02
Description: Drives stepper in both directions by 100 steps
---------------------------------------------------------------*/
#define STEPDELAY (50) // one step delay
#include <avr/io.h>
#include <util/delay.h>
 
//global variables to store commutation patterns
static unsigned char bipolar_pattern;
 
//Function prototypes
void bipolar_clockwise(int number_of_steps);
void bipolar_counter_clockwise(int number_of_steps);
 
///////////////// Functions //////////////////////////////////
void bipolar_clockwise(int number_of_steps){
	int i;
	for (i=0; i<number_of_steps; i++){ //repeat for each step
	bipolar_pattern = bipolar_pattern << 1;
	//shift pattern to the left
	if (bipolar_pattern>8){ bipolar_pattern=1; }
	// alter b'10000' to b'0001' if needed
		PORTB &= 0xF0; //zero last output (low bits)
		PORTB |= bipolar_pattern; //apply new pattern
	_delay_ms (STEPDELAY); //wait for the motor to complete the step
	}
	PORTB &= 0xF0; //turn off motor
}
 
void bipolar_counter_clockwise(int number_of_steps){
	int i;
	for (i=0; i<number_of_steps; i++){//repeat for each stepbipolar_pattern = bipolar_pattern >> 1;
	//shift pattern to the right
	bipolar_pattern = bipolar_pattern >> 1;
	if (bipolar_pattern==0) { bipolar_pattern=8; }
	//alter b'0000' to b'1000' if needed
		PORTB &= 0xF0; //clear low bits
		PORTB |= bipolar_pattern; //apply pattern to output
		_delay_ms (STEPDELAY); //wait for the motor to complete the step
	}
	PORTB &= 0xF0;//turn off motor
}
///////////////// Main function //////////////////////////////////
int main(void){
//output ports initialization
	DDRB=0xFF; //output port for bipolar stepper drive signals
	PORTB=0; //initial PORTB output
	bipolar_pattern=0x01; //initial pattern for bipolar stepper
 
	while(1){
		bipolar_clockwise(100);
		bipolar_counter_clockwise(100);
		}
}
et/examples/motors/stepper.1245183520.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0