Olá pessoal que acompanha o blog, hoje temos mais uma postagem do senhor Renato Lôbo Rodrigues,e neste exemplo será demonstrado como acionar um motor de passo por fase.
lista de peças para montagem em bancada:
- matriz de contatos pequena
- pic12F675, microcontrolador da Microchip
- 2 resistor de 10k para pull-up dos botões
- 2 botões de pressão
- 1 capacitor de acoplamento 104
- cabinhos para ligações dos componentes
- fonte de 5V 2A.
- Uma ponte H L298
- Motor de passo pequeno de 1A por fase
O código fonte:
/////////////////////////////////////////////////////////////////////// // Projeto: Motor de passo Bipolar // // Nome: Renato Lôbo Rodrigues // // Data: 28/06/17 // // Email: lobosoft@oi.com.br // /////////////////////////////////////////////////////////////////////// #include <12F675.h> // inclusão do pic em questão #OCS 4 MHz // oscilador 4.000.000 herts #use fast_io(A) // O método rápido de fazer E/S //Configura os fusiveis #fuses NOWDT #fuses PUT #fuses NOBROWNOUT #fuses NOMCLR #fuses INTRC_IO #fuses PROTECT //======================================================================= //Definições de variaveis globais //======================================================================= #bit pulso = 0x05.2 //define pino A2 para pulso do motor #bit dir = 0x05.3 //define pino A3 para direção de rotação #bit A = 0x05.0 // define pino A0 para motor terminal A #bit B = 0x05.1 // define pino A1 para motor terminal B #bit C = 0x05.4 // define pino A2 para motor terminal C #bit D = 0x05.5 // define pino A3 para motor terminal D #byte tris_portA = 0x85 // direção dos pinos do portA int8 i = 0; // variável i(indice) do tipo inteiro 8 bits //======================================================================= void motor() //função para girar o motor de passo Bipolar { if (i<1) i=4; //se i é menor que 1 então i = 4 if (i>4) i=1; //se i é maior que 4 então 1 = 1 switch(i) { case 1:A=1;B=0;C=0;D=1; break; //1001 case 2:A=0;B=1;C=0;D=1; break; //0101 case 3:A=0;B=1;C=1;D=0; break; //0110 case 4:A=1;B=0;C=1;D=0; break; //1010 } } void main()//Rotina principal do programa { tris_portA = 0b00001100; //pinos A2 e A3 como entrada e o restante como saida While(true) //loop infinito { if(!pulso) //se pulso é verdadeiro { if(dir) i++; else i--; //igual a um: roda num sentido senão no outro sentido motor(); //vai para função motor() delay_us(800); //800 microsegundos / simulação: 80 milesegundos } } }//Fim de programa
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!