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();
}
}
}
}
Últimos comentários: