O código fonte:
////////////////////////////////////////////////////////////////////////////////
// Projeto: Girando motor de passo unipolar (28byj-48) nos dois sentidos. //
// Nome: Renato Lôbo Rodrigues //
// Data: 29/11/17 //
// Email: lobosoft@oi.com.br //
////////////////////////////////////////////////////////////////////////////////
//http://giocarduino.altervista.org/e19-motore-passo-passo.pdf
//dois botões pulsadores no pino 3 e 4 do pic e GND
//0 pino 4 do pic (A3) deve ter um resistor de pull-up
//pino 7 do pic em 1N1 da placa que acompanha o motor 28byj-48
//pino 6 do pic em 1N2
//pino 5 do pic em 1N3
//pino 2 do pic em 1N4
//GND em - da placa
//12V em + da placa
//Configuração PIC
#include <12f675.h>
//inicializando os fusiveis
#fuses INTRC_IO, NOMCLR, NOWDT,PROTECT,PUT,BROWNOUT,CPD
#use delay(clock=4Mhz) //clock interno de 4mhz
#byte tris_portA = 0x85 //sentido dos pinos do portA
#bit bot1= 0x05.3 //botão sentido horario
#bit bot2= 0x05.4 //botão sentido anti-horario
#bit bob_A1 = 0x05.0 //terminais do motor de passo bobina A e B
#bit bob_A2 = 0x05.1 //
#bit bob_B1 = 0x05.2 //
#bit bob_B2 = 0x05.5 //
//se 5 fios lique o center type no GND
//se 6 fios ligue os dois center type no GND
int1 roda = false; //iniciando a variaval roda como falsa
int1 dir = false; //iniciando a variaval dir como falsa
int8 pulso =0; //iniciando a pulso com zero
void motor(int8 num) //configuração de giro do motor em 0.5 passo
{
switch(num)
{
case 0: bob_A1=1;
bob_A2=0;
bob_B1=0;
bob_B2=0;
break;
case 1: bob_A1=1;
bob_A2=1;
bob_B1=0;
bob_B2=0;
break;
case 2: bob_A1=0;
bob_A2=1;
bob_B1=0;
bob_B2=0;
break;
case 3: bob_A1=0;
bob_A2=1;
bob_B1=1;
bob_B2=0;
break;
case 4: bob_A1=0;
bob_A2=0;
bob_B1=1;
bob_B2=0;
break;
case 5: bob_A1=0;
bob_A2=0;
bob_B1=1;
bob_B2=1;
break;
case 6: bob_A1=0;
bob_A2=0;
bob_B1=0;
bob_B2=1;
break;
case 7: bob_A1=1;
bob_A2=0;
bob_B1=0;
bob_B2=1;
break;
case 8: bob_A1=0; //motor desligado
bob_A2=0;
bob_B1=0;
bob_B2=0;
break;
}
}
#int_timer1
void rotina_t1() //na frenquência de 1khz esse motor gira a 20 rpm
{
if(roda)
{
if(dir)
{
if(pulso < 7)pulso++;else pulso=0; //gira anti-horário
}else{
if(pulso > 0)pulso--;else pulso=7; //gira horário
}
motor(pulso); //gira 0.5 passo a cada chamada
roda=false; //avisa que terminou 0 0.5 passo
}
else
{
motor(8);
}
set_timer1(64536 + get_timer1()); //preset de contagem do timer1
}
void main ()
{
int1 st1 = false,st2 = false; //status do botão
setup_comparator(NC_NC_NC_NC); //comparadores desligados
setup_vref(FALSE); //sem valor de referencia
port_a_pullups(0b00010000); //pull-up para pino A3
tris_portA=0b11011000; //entrada e saidos dos pinos
bob_A1=0; //todos pinos do motor inicia em zero
bob_A2=0;
bob_B1=0;
bob_B2=0;
// Timer1 para estouro a cada 1 ms.(Frequência do Ocilador 4Mhz)
enable_interrupts(global);
setup_timer_1(t1_internal | t1_div_by_1);
Enable_interrupts(int_timer1);
set_timer1(64536);
while (TRUE)
{
if(!roda)
{
if( bot1) st1 = false;
if(!bot1 && !st1) //gira horário
{
dir=false;
roda=true;
}
if( bot2) st2 = false;
if(!bot2 && !st2) //gira anti-horário
{
dir=true;
roda = true;
}
}
}
}
Obrigado a todos. até a próxima!
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!