Autor Tópico: Ajuda para controlar motor de passo bipolar  (Lida 6536 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

rodrigoshaller

  • Visitante
Ajuda para controlar motor de passo bipolar
« Online: 21 de Maio de 2010, 19:54 »
Olá, estou fazendo um pêndulo invertido no meu projeto de TCC, só que estou com problemas para controlar um motor de passo bipolar de impressora. O controle precisa ser em linguagem C (para PIC 16f877A).


Tenho um circuito com 2 pontes-h (uma para cada bobina) sendo que a ordem de ativação é controlada pelo pic.

Tentei fazer uma "gambiarra" hoje para testar o motor, porém ele fica com uma velocidade muito limitada (limitação que não pode ser do motor, pois um motor de impressora se movimenta em velocidade relativamente rápida)

Código (Programa utilizado: PIC COMPILER):

#include <16f877A.h>             // *1 - identifica microcontrolador alvo
#device ADC=10                   // *2 - define AD para 10 bits, variando de 0 a 1023
#use delay (clock=20000000)      // *3 - define cristal para 20Mhz. Para outros valores, mude e recompile.
#include <cuscostdio_new_01.h>   // *4 - Biblioteca com funções específicas para a Placa CuscoPic
#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, PUT // *5 - configuração dos fusíveis do PIC
#define t1 10
#define t2 2

// programa principal
void main(void)       
{
   short run = 1;
 
  // laço principal
   while(run)
   {
     while(input(PIN_D0)==1) // Gira para a direita;
     {
         output_high(PIN_C0);// Ativa bobina A;
         delay_ms(t1);
         output_low(PIN_C0);// Desativa bobina A;
         delay_ms(t2);
         
         output_high(PIN_C1);// Ativa bobina B;
         delay_ms(t1);
         output_low(PIN_C1);// Desativa bobina B;
         delay_ms(t2);
         
         output_high(PIN_C2);// Ativa bobina !A;
         delay_ms(t1);
         output_low(PIN_C2);// Desativa bobina !A;
         delay_ms(t2);
         
         output_high(PIN_C3);// Ativa bobina !B;
         delay_ms(t1);
         output_low(PIN_C3);// Desativa bobina !B;
         delay_ms(t2);
     }
     while(input(PIN_D1)==1) // Gira para a esquerda;
     {
         output_high(PIN_C3);// Ativa bobina !B;
         delay_ms(t1);
         output_low(PIN_C3);// Desativa bobina !B;
         delay_ms(t2);
         
         output_high(PIN_C2);// Ativa bobina !A;
         delay_ms(t1);
         output_low(PIN_C2);// Desativa bobina !A;
         delay_ms(t2);
         
         output_high(PIN_C1);// Ativa bobina B;
         delay_ms(t1);
         output_low(PIN_C1);// Desativa bobina B;
         delay_ms(t2);
         
         output_high(PIN_C0);// Ativa bobina A;
         delay_ms(t1);
         output_low(PIN_C0);// Desativa bobina A;
         delay_ms(t2);
     }   
   }
}



Alterei t1 e t2 de várias formas, mas não obtive sucesso em relação a velocidade.

O motor da a impressão de estar dando umas trancadas entre um passo e outro, pois ele fica trepidando.


Alguem sabe por que não está funcionando?
Ou talvez saibam onde há uma biblioteca de controle de motores de passo bipolares que eu possa usar?

Desde já agradeço.

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Ajuda para controlar motor de passo bipolar
« Resposta #1 Online: 21 de Maio de 2010, 20:03 »

Rodrigo, para essa aplicação seria recomendável um servo e não um motor de passo.

O motor de passo pode funcionar, mas vc terá que usar um driver chopper ou implementar um com o uC ...

Pesquise sobre chopper no fórum ...

Seu programa não está adequado nem à tarefa, nem ao motor, não há rampa de aceleração / desaceleração e o acionamento está em modo wave drive, o pior. Recomendo que antes de mais nada familiarize-se com a operação de motores de passo ...

Offline F.Gilii

  • Administrador
  • CNCMASTER
  • *******
  • Posts: 13796
  • Sexo: Masculino
  • Consultoria, Automação e Construção de Máquinas
  • Cidade - UF: Atibaia - SP
  • Nome:: Fabio Gilii
  • Profissão: Tec. Mecanica de Precisão
Re: Ajuda para controlar motor de passo bipolar
« Resposta #2 Online: 21 de Maio de 2010, 20:06 »
Não entendo de programação, mas 1 milissegundo não é tempo demais para energizar a fase, e 2 ms tempo maior ainda para desenergizar?

Os drivers que conheço usam tempos mais curtos - por exemplo 5 us...

se eu fiz a conta certa (posso ter errado) 1 ms = 1000 us...

rodrigoshaller

  • Visitante
Re: Ajuda para controlar motor de passo bipolar
« Resposta #3 Online: 21 de Maio de 2010, 20:44 »
Citar
Seu programa não está adequado nem à tarefa, nem ao motor, não há rampa de aceleração / desaceleração e o acionamento está em modo wave drive, o pior. Recomendo que antes de mais nada familiarize-se com a operação de motores de passo ...

Por isso que eu disse: Gambiarra.

Citar
Rodrigo, para essa aplicação seria recomendável um servo e não um motor de passo.

Tarde demais para voltar atraz agora. Mas desde que o motor consiga atingir uma velocidade parecida com a de "impressão" está ótimo.

Citar
O motor de passo pode funcionar, mas vc terá que usar um driver chopper ou implementar um com o uC ...

Você saberia me dizer como implementar no microcontrolador? Realizei uma pesquisa no forum, mas não encontrei nada satisfatório.

Citar
Não entendo de programação, mas 1 milissegundo não é tempo demais para energizar a fase, e 2 ms tempo maior ainda para desenergizar?

Os drivers que conheço usam tempos mais curtos - por exemplo 5 us...

se eu fiz a conta certa (posso ter errado) 1 ms = 1000 us...

Estes valores são exemplos, mas o valor mais baixo que o motor conseguiu andar foi 5ms, menos que isso ele não funcionava (a menos que fosse feita uma aceleração gradual, por exemplo: iniciar o motor com 100ms, depois diminuir para 10ms, e depois para 1ms).


rodrigoshaller

  • Visitante
Re: Ajuda para controlar motor de passo bipolar
« Resposta #4 Online: 21 de Maio de 2010, 21:17 »
Citar
Tenho um circuito com 2 pontes-h (uma para cada bobina) sendo que a ordem de ativação é controlada pelo pic.

Isto não é carácterizado como Chopper?

"Qualquer sistema de potência a semicondutor empregado para retificar, inverter, ou mesmo para modular a potência de saída de uma fonte de energia DC ou AC é chamado de sistema conversor ou sistema de condicionamento de potência.
O “chopper” (que pode ser traduzido por cortador, pulsador, interruptor, etc.) que, devido ao princípio de operação, permite variar a tensão média DC aplicada a uma dada carga sem que ocorra uma grande dissipação de potência nos elementos chaveadores (tiristores ou transistores)."

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Ajuda para controlar motor de passo bipolar
« Resposta #5 Online: 21 de Maio de 2010, 22:10 »
Isto não é carácterizado como Chopper?

Não. Chopper pode ser designação genérica para fonte chaveada, mais especificamente no que se refere a motores de passo é uma fonte de corrente constante chaveada, regulada em malha fechada, o que não é o caso apresentado.

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Ajuda para controlar motor de passo bipolar
« Resposta #6 Online: 21 de Maio de 2010, 22:38 »
Rodrigo, não tenho código à mão para essa função, não é muito difícil implementar, mas requer conhecimentos de eletrônica tb ... talvez seja mais simples vc usar um driver qualquer e concentrar-se no programa de controle, que é o que interessa mais. De quebra vc alivia o uC ...

Há muitos exemplos de pêndulos por aí, acho que vale a pena pesquisar um pouco ...

PS: Esta nota de aplicação da Microchip pode ajudar:

http://ww1.microchip.com/downloads/en/AppNotes/00907a.pdf

Tb costumo indicar isto:

http://www.cs.uiowa.edu/~jones/step/
« Última modificação: 22 de Maio de 2010, 00:00 por C N C N o w ! »

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Ajuda para controlar motor de passo bipolar
« Resposta #7 Online: 22 de Maio de 2010, 13:38 »

Um pêndulo invetido requer pelo menos um motor e um sensor de posição e um algoritmo de controle em malha fechada (que pode ser do tipo PID, Fuzzy, ...). O motor deve ser rápido e de baixo momento de inércia (um motor DC seria mais indicado) para poder reverter o sentido de rotação rapidamente.  Eu usaria um motor DC e um potenciômetro. Há um tópico sobre pêndulo invertido no Forum. Eu estou entalado com esses projeto por unica e exclusivamente falta de tempo  :(

Mas, breve eu concluo...

Mas se quiser ir fazendo o seu, podemos orientar.

rodrigoshaller

  • Visitante
Re: Ajuda para controlar motor de passo bipolar
« Resposta #8 Online: 22 de Maio de 2010, 15:35 »
Citar
Um pêndulo invetido requer pelo menos um motor e um sensor de posição e um algoritmo de controle em malha fechada (que pode ser do tipo PID, Fuzzy, ...).

Ele tem um sensor de posição incremental e estou fazendo o algorítimo PID.


Citar
Mas se quiser ir fazendo o seu, podemos orientar.

Eu quero. Na verdade, já está quase concluído.

Só que encontrei essa pedra no meu caminho... (Controlar o motor de passo bipolar)

Sou leigo em programação, sei somente o básico...

Por isso preciso de ajuda para elaborar um algorítimo de controle para o motor.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Ajuda para controlar motor de passo bipolar
« Resposta #9 Online: 22 de Maio de 2010, 18:21 »
Citar
Um pêndulo invetido requer pelo menos um motor e um sensor de posição e um algoritmo de controle em malha fechada (que pode ser do tipo PID, Fuzzy, ...).

Ele tem um sensor de posição incremental e estou fazendo o algorítimo PID.

O motor de passo possui um sensor incremental? Acho muito mais fácil, para voce, processar sinal de um potenciômetro. Quantos passos por volta o seu encoder gera?

Sou leigo em programação, sei somente o básico...

Por isso preciso de ajuda para elaborar um algorítimo de controle para o motor.

Controlar um motor CC é fácil, além de ser um motor mais adequado a esta aplicação. O algoritmo PID não é dificil ser feito, ainda mais em C.

Antes de partir para o algoritmo é melhor resolver a parte do sensor (sugestão: potenciômetro) e atuador (motor CC).

rodrigoshaller

  • Visitante
Re: Ajuda para controlar motor de passo bipolar
« Resposta #10 Online: 23 de Maio de 2010, 21:54 »
Citar
Quantos passos por volta o seu encoder gera?


É um sensor de mouse de "bolinha", não estou com ele no momento, mas creio que são em média uns 50 passos por volta.

Citar
O algoritmo PID não é dificil ser feito, ainda mais em C.
O algorítimo não é problema, o único problema mesmo é o controle do motor de passo.

Mesmo sabendo que o ideal é um motor CC, vou insistir com o motor de passo.

Se ele alcança uma alta velocidade quando controlado pela impressora, significa que há uma maneira de fazê-lo.

Só preciso de uma ajudinha! :D

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Ajuda para controlar motor de passo bipolar
« Resposta #11 Online: 23 de Maio de 2010, 23:12 »
Citar
Quantos passos por volta o seu encoder gera?


É um sensor de mouse de "bolinha", não estou com ele no momento, mas creio que são em média uns 50 passos por volta.

Considere o seguinte, se o sensor fornece 50 passos por volta, são 360/50 = 7,2 graus por passo. Acho um valor alto para um controle eficiente. Ou seja, o pêndulo vai se mover no mínimo +/- 7,2 graus, voce não acha isso muito?

Citar
O algoritmo PID não é dificil ser feito, ainda mais em C.
O algorítimo não é problema, o único problema mesmo é o controle do motor de passo.

Mesmo sabendo que o ideal é um motor CC, vou insistir com o motor de passo.

Se ele alcança uma alta velocidade quando controlado pela impressora, significa que há uma maneira de fazê-lo.

Só preciso de uma ajudinha! :D

O que voce chama de "alta velocidade" deve ser pensando com cuidado, o que deve ser considerada é a dinâmica do sistema. Por exemplo, se o braço do pêndulo for pequeno, o momento de inércia é baixo e a velocidade do sistema também, ou seja, o motor de passo pode não servir dependendo do seu sistema. Além disso, um motor de passo, se não usar microstepping, vai se mover em trancos, o que não seria recomendável num pêndulo. Mas, é apenas minha opinião, apesar de mais de dez anos de experiência com controle de processos, sempre aprendemos algo novo...

Tenho o costume de projetar, planejar e pensar antes de sair fazendo... :)
« Última modificação: 23 de Maio de 2010, 23:16 por minilathe »

rodrigoshaller

  • Visitante
Re: Ajuda para controlar motor de passo bipolar
« Resposta #12 Online: 24 de Maio de 2010, 08:27 »
Citar
Considere o seguinte, se o sensor fornece 50 passos por volta, são 360/50 = 7,2 graus por passo. Acho um valor alto para um controle eficiente. Ou seja, o pêndulo vai se mover no mínimo +/- 7,2 graus, voce não acha isso muito?


Bem, não tenho experiência nenhuma, mas, ao meu ver, não acho que seja muito.

A engrenagem que gira a correia possui 20mm de circunferência; São 50 passos em 20mm.

Isso da 0,4mm por passo.


Sei que o projeto que estou fazendo está muito longe do ideal, fiz ele com os recursos que possuía e com o pouco conhecimento que tinha.

Não imaginei que teria problemas com o motor de passo, pelo contrário, pensei que seria até melhor.


Está um pouco em cima da hora para mudar o sensor e o motor, por isso estou disposto a continuar tentando desta maneira.


Isso serve de experiência para projetos futuros.


Citar
Tenho o costume de projetar, planejar e pensar antes de sair fazendo... :)


Eu entendo o que você quer dizer, até mesmo pesquisei antes de iniciar o projeto, mas creio que um pouco pela falta de experiência, não dei a devida importância para coisas simples.

Agora é tarde demais para voltar atraz, falta menos de 1 mês para a conclusão do projeto.

Quero concluí-lo, nem que seja para demonstrar o motivo pelo qual o projeto não funcionou.

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Ajuda para controlar motor de passo bipolar
« Resposta #13 Online: 24 de Maio de 2010, 08:42 »
Bem, não tenho experiência nenhuma, mas, ao meu ver, não acho que seja muito.

É muito sim.

Citar
A engrenagem que gira a correia possui 20mm de circunferência; São 50 passos em 20mm.

Explique melhor, não tá fazendo sentido ... vc tá misturando dimensão angular (passos) com linear (mm) ...

Citar
Não imaginei que teria problemas com o motor de passo, pelo contrário, pensei que seria até melhor.

Vc pode sim utilizar motor de passo, mas tem que pensar sistemicamente, tudo tem que ser coerente ... a princípio é má escolha, considerando um sistema simples e pequeno.

Citar
Está um pouco em cima da hora para mudar o sensor e o motor, por isso estou disposto a continuar tentando desta maneira.

Há quem diga que quando estamos com pressa é melhor fazer devagar ... e fazer certo logo da primeira vez ...

Citar
... pela falta de experiência, não dei a devida importância para coisas simples.

Na verdade a simplicidade de um sistema desses é apenas aparente ...

Citar
Agora é tarde demais para voltar atraz, falta menos de 1 mês para a conclusão do projeto.

Não sei da sua disponibilidade, mas acho que dá pra rever o projeto sim ...

Citar
Quero concluí-lo, nem que seja para demonstrar o motivo pelo qual o projeto não funcionou.

Não deixa de ser um critério, mas não seria melhor demonstrar pq funcionou ?

rodrigoshaller

  • Visitante
Re: Ajuda para controlar motor de passo bipolar
« Resposta #14 Online: 24 de Maio de 2010, 09:12 »
Citar
Explique melhor, não tá fazendo sentido ... vc tá misturando dimensão angular (passos) com linear (mm) ...

Me refiro à distância que o carro vai percorrer por passo.
Se o carro vai andar 20mm por volta do motor, ele vai andar 0,4mm por passo do motor.

Citar
Não sei da sua disponibilidade, mas acho que dá pra rever o projeto sim ...

O problema é que, como se já não bastasse resolver problemas mecânicos (que é extremamente difícil para mim), alterar o projeto envolve também uma série de pesquisas que devem ser mostradas na monografia, criação de placas de circuito impresso, compra de materiais, retrabalho, etc.

Apostar nisso sem ter certeza de que tudo vai funcionar de primeira é um tiro no escuro.

E quanto à minha disponibilidade de tempo... Não é muita!


Citar
Não deixa de ser um critério, mas não seria melhor demonstrar pq funcionou ?
Concerteza.

 

/** * */