28BYJ-48 Motor Passo-a-Passo com ULN2003

Olá,

Mais um periférico muito útil, o motor passo-a-passo.

Neste caso utilizei o driver ULN2003, com o motor de 5V o 28BYJ-48.

Existem vários vídeos ilustrativos do funcionamento deste motor, ex: Video Youtube.

Este versátil motor é muito utilizado na industria para rigoroso posicionamento de braços de robôs.

Segundo o datasheet este motor possui um redutor de 1/64 ou seja para fazer os 360º precisa de 64 passos. Sendo que 360/64=5,625 graus ( cada passo ).

 

Abaixo apresento um codigo muito simples como se pode colocar um motor passo-a-passo, sequência de activação 4 passos.

28BYJ-48 Stepper Motor with ULN2003
/*
 * Stepper_ULN2003.c
 * http://www.microelectronic.pt
 * Created: 11-03-2017
 * Author: Norlinux
 */ 
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define  F_CPU 16000000UL/* 16 MHz External Oscillator */
#define PORT_AVR PORTC
#define DDR_AVR DDRC
#define delay_motor() _delay_ms(4);

int main(void)
{
	DDR_AVR = 0xFF;	
	int	j=150, i=150;
	int Motor1_Dir[4]={1,2,4,3};
	int Motor1_Esq[4]={3,4,2,1};
	int Motor2_Dir[4]={16,32,64,48};
	int Motor2_Esq[4]={48,64,32,16};
	while(1)
	{
		while(j)
		{
		j--;
		i=150;
		for(uint8_t i=0;i<=4;i++)
		{

			PORT_AVR=(3*Motor1_Esq[i]);
			delay_motor();
			PORT_AVR=(3*Motor2_Esq[i]);
			delay_motor();
		}
		}
		while (i)
		{
		j=150;
		i--;
		for(uint8_t i=0;i<=4;i++)
		{

			PORT_AVR=(3*Motor1_Dir[i]);
			delay_motor();
			PORT_AVR=(3*Motor2_Dir[i]);
			delay_motor();
		}
		}
	}
}

Deixe uma resposta

Your email address will not be published.

www.000webhost.com