Página 1 de 1

Stepper-motor testes simulação não roda!!

MensagemEnviado: 01 Jun 2012 04:37
por antonio
Pessoal tudo bem!!

Pessoal nunca trabalhei com stepper-motor,tenho aqui um e estou tentando fazer ele rodar com um PIC 16F877A com o ULN2003A,mais atè agora sem sucesso pelo menos no Proteus onde estou fazendo testes!

O codigo eh o que vem no livro Renato Silva que tirei da internet, mudifacando o codigo por vezes mas segue se funcionar seràh que o pessoal pode dar uma olhada no codigo pra ver onde està errando??

Estou usando o PIC 16F877A em vez do original 16F628A do livro!!

desde jà agradeço

O circuito no proteus!

Imagem

e o cadigo!
Código: Selecionar todos
#include <16F877A.h>
#FUSES NOWDT //Watch Dog Timer
#FUSES XT //oscilador cristal <= 4mhz
#FUSES NOPUT //Power Up Timer
#FUSES NOPROTECT //sem proteção para leitura da eprom
#FUSES BROWNOUT //Resetar quando detectar brownout
#FUSES NOLVP //prog. baixa voltagem desabilitado
#FUSES NOCPD //sem travar o chip
#use delay(clock=4000000)
//
#use fast_io(d)
#define tempo 40
//
int passo[] = {0b10000000, //0x80
               0b01000000, //0x40
               0b00100000, //0x20
               0b00010000 }; //0x10
int posicao;
//
void PulsaMotor( int direcao) {
if( direcao != 0) posicao ++ ;
output_d( passo[ posicao & 0x03 ]);
delay_ms( tempo );
}
void main(void)
{
int16 i; //define variável para contagem de passos
set_tris_d( 0x00 ); //define a direção do portB

while( TRUE ){ //loop permenente
//executa 1000 vezes para a esquerda

for(i = 0; i < 1000; i++) {
PulsaMotor(1);
};

executa 1000 vezes para a direita

PulsaMotor( 0 );
};
};
}

MensagemEnviado: 01 Jun 2012 12:08
por tcpipchip
Seja mais baixo nivel.
Diga o que pelo menos esta funcionando...

MensagemEnviado: 01 Jun 2012 14:40
por antonio
Cara! praticamente não faz nada,ou seja na simulação quando ligo no proteus faz 1/4 de volta e trava!

Fazendo nova simulaçao faz o mesmo,soh isso!!

MensagemEnviado: 02 Jun 2012 18:18
por tcpipchip
mas aparece 1000,0100,0010, 0001 no portd do uc ?

MensagemEnviado: 03 Jun 2012 09:24
por antonio
tcpipchip escreveu:mas aparece 1000,0100,0010, 0001 no portd do uc ?


Cara fazendo testes com LEDs no portd do uc ,os leds dah umas piscada e trava!

MensagemEnviado: 03 Jun 2012 17:24
por tcpipchip
Mexi um pouco no teu software...
Testei aqui e funcionou no PROTEUS e MPLAB e ISHIELD
Abraços
TCPIPCHIP

Código: Selecionar todos
#include <16F877A.h>
#FUSES NOWDT //Watch Dog Timer
#FUSES XT //oscilador cristal <= 4mhz
#FUSES NOPUT //Power Up Timer
#FUSES NOPROTECT //sem proteção para leitura da eprom
#FUSES BROWNOUT //Resetar quando detectar brownout
#FUSES NOLVP //prog. baixa voltagem desabilitado
#FUSES NOCPD //sem travar o chip
#use delay(clock=4000000)
//
#use fast_io(d)
#define tempo 1000
//
int passo[] = {0b10000000, //0x80
               0b01000000, //0x40
               0b00100000, //0x20
               0b00010000 }; //0x10
int posicao;
//

void PulsaMotor( int direcao) {
if( direcao != 0) posicao ++ ;
output_d( passo[ posicao & 0x03 ]);
delay_ms( tempo );
}

void main(void)
{
int16 i; //define variável para contagem de passos
set_tris_d( 0x00 ); //define a direção do portB

while( TRUE ){ //loop permenente
//executa 1000 vezes para a esquerda

for(i = 0; i < 1000; i++)
PulsaMotor(1);
for(i = 0; i < 1000; i++)
PulsaMotor( 0 );
}

}