• Welcome to LusoRobótica - Robótica em Português.
 

5 phases - stepper motor driver

Started by c3dr1c, 12 de February de 2013, 22:00

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

c3dr1c

Boas pessoal.

Decidi utilizar o meu motor de 5 phases num projecto futuro que tenho idealizado, mas nao encontro nenhum IC por ai à venda para o controlar.

Portanto decidi fazer o meu driver utilizando logica digital mas parece-me que  estou a ir por um caminho que envolve utilizar muitas portas logicas. Alguem me consegue dar uma ajuda para simplificar o circuito ou ir por outro caminho?

O circuito base é este:


Portanto preciso de 10 saida digitais do micro, mas como isso é so perder recursos quero reduzir para apenas 2 saidas (CLK, DIR). Então para half-step temos a sequencia na tabela abaixo. Como sao apenas 10 "estados" diferentes podemos simplificar/reduzir as saidas digitais para 4.


E aqui está o circuito. Dentro do rectangulo vermelho está a simplificação e dentro do verde um contador de 4 bits com clock sincrono, utilizando flip-flops JK. Mas este contador so conta numa direcção, tenho portanto de alterar o contador para poder inverter a direcção de contagem e criar uma condição para quando for 1001 fazer no "estado" seguinte clear, mas isso faço depois... Agora, será que dá para simplificar o circuito?
Outra coisa que me lembrei, será que devo acrecentar uma porta OR a cada AND de 3 entradas, para igualar os tempos de propagação?


Cumps
"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

senso

Usa um micro para tratar da lógica.
Avr fanboy

c3dr1c

Pois realmente é a melhor solução e aproveito e treino mais um pouco de avr-gcc...

Mas nao sei por onde começar, alguem me da uma dica? Bem tambem ainda nao meti a cabeça a pensar...


Preciso de 3 input's: CLK, DIR, EN
Preciso de 10 output's: A, B, C, D, E, F, G, H, I, e J
Basicamente tenho uma sequência de "ligar/desligar os output's" a cumprir, que tanto pode decorrer em ambos os sentidos. A sequência avança para a "linha de estados" seguinte sempre que o CLK muda do estado 0 para 1. Caso DIR=0 -> CW, caso DIR=1 -> CCW

A minha primeira impressão é criar a sequencia, mas como faço isso? Crio várias linhas em que cada linha liga e desliga os output's? Faço um contador e trabalho a partir dele? Tou mesmo à nora.

Se fosse labview criava um contador decimal de numeros inteiros e sempre que o numero actual do contador for divisivel por 2 liga um output. Assim ja conseguia ligar e desligar o output uma vez sim, outra vez nao, outra vez sim, etc... Basta alterar o numero por qual é divisivel para definir a frequencia com que se liga o output. Mas isto nao é labview :P


"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke

senso

E podes fazer precisamente o mesmo em C.
Ou fazes uma máquina de estados com switch/case, ou com um monte de if's ou arrays a fazer de look up tables.
Avr fanboy

c3dr1c

Será algo deste genero o ponto de partida?

"O único modo de descobrir os limites do possivel é aventurarmo-nos um pouco para além deles em direcção ao impossivel."

Uma das Três Leis de Arthur C. Clarke