Página 1 de 2

Programa pra MOTOR_DC

MensagemEnviado: 24 Abr 2011 16:46
por antonio
Pessoal estoh fazendo aqui uns testes com um MOTOR_DC de 5V e não sei que estou fazendo errado que não funciona não!! Dah aí uma olhada pra ver onde esta dando pau!! estoh programando em C CCS e proteus
Desde jah agradeço
O codigo
Código: Selecionar todos
#include <16f873A.h>
#use delay(clock=4000000)
#fuses xt,put,nowdt,protect,nobrownout,NOCPD

#use STANDARD_IO(a)
#use STANDARD_IO(c)


#define forward  PIN_A5
#define reverse  PIN_A4
#define brake    PIN_A2
#define PinA     PIN_C5
#define PinB     PIN_C4
#define PinC     PIN_C3
#define PinD     PIN_C2

void Delay(void)
{
delay_ms(300);
}
void main()
{

   output_c(0x00);
   set_tris_a(0b00111100);
   set_tris_c(0x00);
 
 
do{
 
   if (!forward)
     {
     delay();
     //output_c(0x00);
     //delay();
     output_low(PinA);
     output_high(PinB);
     output_high(PinD);
     };
       if(!reverse)
       {
       delay();
       //output_c(0x00);
       //delay();
       output_high(PinA);
       output_low(PinB);
       output_high(PinD);
       };
         if(!brake)
         {
         delay();
         output_c(0x00);
         };
     }while(1);
}


o circuito no proteus

Imagem

MensagemEnviado: 24 Abr 2011 17:48
por andre_luis
Antonio

Ajudaria se voce postasse exatamente o que está ou não acontecendo.
Outra coisa : Esse uC possui PWM interno mas mesmo assim voce está o implementando por handshake ?

+++

MensagemEnviado: 24 Abr 2011 18:28
por antonio
andre_teprom escreveu:Antonio

Ajudaria se voce postasse exatamente o que está ou não acontecendo.
Outra coisa : Esse uC possui PWM interno mas mesmo assim voce está o implementando por handshake ?

+++


andre o que se passa eh simplesmente não funciona, ou seja a ideia eh klicando numa tecla o motor roda num sentido klicando em outra o motor roda em sentido contrario e a tecla era de padada do motor!

RA5-> forward
RA4_> reverse
RA2_>brake

Sim eu sei que este PIC tem PWM ,mas como não mango o PWM por enquanto,vou fazendo uns teste por software

MensagemEnviado: 24 Abr 2011 18:31
por MOR_AL
Algumas dicas:
1 - Na prática não se deve usar a ponte nessa configuração, com dois PNPs na parte de cima, junto a fonte de tensão. Porque? Porque o nível lógico '1', dependendo da carga, pode não ir até Vcc ou Vcc - 0,6V. Isso não vai cortar o transistor, mesmo que o pino seja jogado para '1'.

2 - Mesmo que funcione, o seu pulso vai levar algum tempo para ir de '0' para '1'. Durante esse tempo o transistor estará conduzindo. Tem que esperar um pouco até que corte, para fazer o outro ramo conduzir.

3 - Você está alterando um pino de cada vez. Isso pode dar problema. Se alterar um segundo pino na mesma porta, logo após a alteração do anterior, o pino anterior pode não ser alterado. É melhor primeiro cortar o ramo que você deseja em um byte de memória e depois jogar este byte para a porta. Aguarde um tempo até o corte ser efetivado. Depois faça o mesmo se quizer conduzir outro ramo.

4 - Também se costuma colocar resistor entre a base e o emissor, para que o corte seja mais rápido. Caso contrário os transistores podem aquecer muito e queimar.

5 - Os BC547 e 557 são para pequenas correntes. Tente usar BC337 e BC327. São do mesmo tamanho e suportam mais corrente. Meça antes a corrente com o eixo do motor travado. Mas seja rápido, pois se bobear pode queimá-lo. Essa corrente é a maior que vai aparecer no motor. Veja no manual, se os transistores suportam essa corrente. Já queimei muita ponte porque achava que o eixo do motor nunca travaria.

Procure entender o que eu postei, que vai te ajudar quando o programa funcionar e você for testar na prática.

No mais é ... Boa sorte.
MOR_AL

MensagemEnviado: 24 Abr 2011 19:24
por EvandrPic
Monte em protoboard a parte do motor e acionamento e teste na prática. Não confie no Proteus pois pode ser um bug do programa, do firmware que você fez ou da parte elétrica.
Acho que você não precisa de 4 pinos do microcontrolador para fazer o que está pretendendo.
Ligue as bases dos transístores envolvidos na rotação num sentido e no outro, respectivamente.

Talvez esses esquemas sirvam pra dar uma clareada:
Imagem

Outro esquema...
Imagem
O circuito acima possui duas chaves, quando se fecha o contato de uma delas, o motor gira em
um sentido, quando se fecha a outra, o motor gira no outro sentido. Caso as duas chaves sejam acionadas,
o motor irá parar.

...
http://www.vabsco.com/bardhp/proj/ponteh/main.html

Re: Programa pra MOTOR_DC

MensagemEnviado: 24 Abr 2011 19:48
por andre_luis
Antonio

Porque voce aciona somente 3 pinos se na ponte tem 4 transistores manipulados separadamente ?
Pode ser que aí esteja o problema.

Código: Selecionar todos
   if (!forward)
     {
     delay();
     output_low(PinA);
     output_high(PinB);
     output_high(PinD);
     };
       if(!reverse)
       {
       delay();
       output_high(PinA);
       output_low(PinB);
       output_high(PinD);
       };


+++

MensagemEnviado: 24 Abr 2011 20:05
por _blackmore_
para quê usar uma ponte H e mais um microcontrolador para acionar os transistores se nao precisa dele (microcontrolador)?

MensagemEnviado: 24 Abr 2011 20:29
por andre_luis
_blackmore_ escreveu:para quê usar uma ponte H e mais um microcontrolador para acionar os transistores se nao precisa dele (microcontrolador)?


E como faria ?

+++

MensagemEnviado: 24 Abr 2011 21:04
por _blackmore_
andre_teprom

está ali .. certinho e explicado no segundo esquema do EvandrPic

MensagemEnviado: 25 Abr 2011 08:02
por Andre_Cruz
Blackmore,

O antonio esta usando o controlador neste caso para aprender a usa-lo ! Da um desconto !

Abraço

André Cruz

MensagemEnviado: 25 Abr 2011 08:02
por antonio
Pessoal grato pelo suporte aqui do colegas!

Depois de tanta modificação continua dando pau fiz diversos testes com o que o pessoal aqui descreveu mas não funciona,como eu alterou o codigo dah uma olhada !!
Pessoal os teste que tenho feito eh só no proteus,, eu não testei fisicamente ,porque neste momento não tenho protoboard livre,loge que tenha um protoboard livre faço os teste fisicamente

codigo modificado!
Código: Selecionar todos
#include <16f873A.h>
#use delay(clock=4000000)
#fuses xt,put,nowdt,protect,nobrownout,NOCPD

#use STANDARD_IO(a)
#use STANDARD_IO(c)


#define forward  PIN_A5
#define reverse  PIN_A4
#define brake    PIN_A2

void Delay(void)
{
delay_ms(300);
}
void main()
{

   //output_c(0x00);
   //set_tris_a(0b00111100);
   //set_tris_c(0x00);
 
 
for(;;){
 
   if (!forward)
     {
     output_c(0x00);
     delay();
     output_c(0b00010000);

     };
       if(!reverse)
       {
       output_c(0x00);
       delay();
       output_c(0b00100000);
       };
         if(!brake)
         {
         delay();
         output_c(0x00);
         };
     }
}


o circuito no proteus modificado
Imagem

MensagemEnviado: 25 Abr 2011 09:49
por EvandrPic
Há muito tempo eu cheguei a usar o Proteus para testes e me lembro que tinha um exemplo com motor. Era algo parecido com o que você quer.
Já olhou se nessa versão que você está usando tem esse exemplo com motor e ponte H?

MensagemEnviado: 25 Abr 2011 10:19
por MOR_AL
Antonio.
Tente essa ponte que eu fiz e funcionou.
Imagem

A_Hor (Anti-Horário) -.....H (Horário) - .....Situação

A.................0.......................0...........- Motor parado
B.................0.......................1...........- Motor girando no sentido horário.
C.................1.......................0...........- Motor girando no sentido anti-horário
D.................1.......................1...........- TRANSISTORES QUEIMANDO!!!
Obs:
1 - Nunca use a condição D.
2 - Entre a condição B e C, ou C e B, SEMPRE passe pela condição A.
MOR_AL

MensagemEnviado: 25 Abr 2011 12:16
por _blackmore_
Andre_Cruz

O antonio esta usando o controlador neste caso para aprender a usa-lo !


respondido ...

MensagemEnviado: 25 Abr 2011 13:17
por antonio
Pessoal os testes continuam!!

Depois de tanto teste feito, acho que o problema bem do codigo mesmo !!

Quando se pressiona a tecla RA5 deveria mudar no PIN_RC4 o seu estado¨!
Isto foi um teste que eu fiz desligando a ponte H do PIC, e vi que o estado do PIN_RC4 não mudava, porque o PORTC começa a zero "output_c(0x00); " no proteus o PORTC fica a azul ,estado (0),depois de pressionada a tecla "forward" o PIN_RC4 deve mudar para vermelho estado logico (1), e isso não faz!? o mesmo para as outras teclas!

O circuito com a tecla pressionada!
Imagem