Controlando Motores de Passo através da Interface LPT
Dando seqüência as aplicações da interface LPT, nesta edição iremos estudar os motores de passo. Não iremos estudar os mesmos de forma exaustiva, pois já foi feito aqui mesmo, voce pode consultar a pagina PROJETOS, onde explicamos o funcionamento da interface de controle LPT. Trataremossimplesmente na implementação dos circuitos eletrônicos e suas funcionalidades bem como os programas para controlar os motores.
Existe uma infinidade de tipo de motores , em formatos e capacidade, bem como os motores bi-polares e os motores de 6 fios, como podemos observar na FIGURA 1 . Figura 1
Controlar os motores de passo, depois que passamos a entender como eles funciona fica relativamente fácil, motivo pelo qual sugerimos que o leitor leia os artigos já publicados em revistas tecnicas bem como site na internet. parte teórica com a parte pratica.
Sabemos que para controlar os motores de passo precisamos gerar uma lógica de controle a qual envia os sinais para cada uma das bobinas em uma determinada seqüências, a qual fará com que o motor entre em funcionamento.
Alem da seqüências lógica de controle ou chaveamento das bobinas iremos precisar também controlar uma outra variável, que é imprescindível no controle de motores de passo, que é o tempo em que cada uma das seqüências de controle tem de ter em relação a outra ao ser enviada para as bobinas do motor de passo.
Motores de passo não funcionam como os motores DC convencional, nos motores DC aplicamos a voltagem em seus pólos e ele gira em sua rotação máxima em um determinado sentido, ao invertermos a polaridade o motor gira no sentido oposto com a velocidade máxima de acordo com a alimentação incidente no motor.
Nos motores de passotemos de gerar uma seqüência lógica de pulsos em intervalos de tempo controlados. Isso parece complicado, mas não é tão assustador assim, alias é ate fácil de de fazer com a eletrônica e de programar.
Para gerar a seqüência de controle são necessários alguns componentes simples e da fácil obtenção, ou então Circuitos Integrados dedicados, existe uma gama enorme de CIs controladores de motor de passo vamos citar o L297/298, o famoso SAA1027 ( o qual nunca consegui comprar no Brasil e me parece que já esta fora de linha também), e vários outros que não é a nossa intenção falar deles no momento.
Veremos agora de forma pratica como controlar os motores. Vejamos a figura 1 onde observamos um dos motores de passo e seus respectivos fios, podemos observar que um deles possui 6 fios e o outro 5. A diferença entre o de 6 fios e o de 5 fios, é quem no de 6 fios possuímos 2 fios para alimentação enquanto que no de 5 fios,somente 1 pois internamente ao motor os fios da alimentação já estão conectados.
Vamos esquecer a alimentação e dar um desconto, no motor de 6 fios, tiramos 2, sobra 4 fios no motor de 5 fios, tiramos 1 sobra 4 fios, conta difícil de fazer, mas é isso que importa,temos 4 fios para serem devidamente chaveados, ou seja a lógica eletrônica da geração dos pulsos ira atuar exatamente nestes 4 fios.
Antes de falarmos sobre a geração das fases ou do chaveamento das bobinas, devemos falar sobre a geração de PASSO NORMAL ( Full-setep ) ou Meio Passo ( Half-Step ). No modo Passo Normal geramos uma seqüência equivalente a 4 pulsos de uma única vez, no modo Half Step, enviamos os 4 pulsos, porem com um intervalo de tempo, essa é uma forma simplista de mais, porem precisamos ser objetivos em nosso estudo, então vamos manter assim essa explicação, e os interessado devem buscar a parte teórica para solidificar o raciocínio.
Vale lembrar também que podemos ter vários sinais de controle em um circuito driver de motor de passo,o qual varia de modelo de driver para modelo de driver. No nosso caso iremos nos fixar somente na seqüencia LOGICA.
Vejamos a seqüência de bits abaixo:
1000
0100
0010
0001
Pronto, agora vamos começar a raciocinar, ao geramos essa seqüência acima, iremos energizar as bobinas do motor a qual ira movimentar o eixo, vejamos um detalhe interessante,a seqüência(0001 em binário, equivale a 1 em decimal) , a seqüência (0010 em binário equivale a2 em decimal, a seqüência 0100 equivale a 4 em decimal e a seqüência1000 em binário a 8 em decimal ), bonitinho né ?
Bacana, então para acionarmos um motor de passo basta que enviemos as bobinas o equivalente a 1,2,4,8 e o motor ira girar certo ?
Exatamente isso,obviamente que existe um pequeno porem, mas a gente vai ver isso depois, e para inverter o sentido de rotação ? È fácil, é só mandar na seqüência invertida, 8,4,2,1, relativamente simples.
Estudamos de maneira rápida como fazer para gerar as fases, ou a seqüência lógica de controle, devemos pensar em um outro detalhe, o tempo de geração de cada um desses pulsos. Ou seja, você envia para o circuito de controle DRIVER a seqüência 0001 depois de um X tempo a seqüência 0010 depois no mesmo espaço de tempogerado entre 0001 a 0010 enviamos 0100 e no mesmo espaço de tempo 1000, o mesmo é valido para revertemos o motor ou o sentido de rotação.
Agora entra uma variável importante no controle de motores de passo, que se trata da freqüência de ressonância do motor, por incrível que pareça tem isso, mas como assim, é muito simples, caso o tempo de geração da lógica seja muito curto o motor não ira girar e sim vibrar, isso mesmo ira vibrar , você percebera que o motor fica vibrando mas não gira.
Essa é a tal freqüência de ressonância ( a grosso modo ), que Varia de motor para motor ou seja caso o motor vibre e não gire, você na verdade tem um motor de passo ressonando na freqüência que você enviou os comandos para as bobinas. Como se resolve isso?
Simples, ao enviar ao circuito de controle uma seqüência 0001 aumenta-se o tempo entre a geração de uma fase para a outra, ate que o motor gire, que legal. È mas tem mais detalhes sobre motores de passo.
Bem quanto menor for o tempo de geração das fases mais rápido o motor vai girar, portanto ele terá menos torque ( não sei bem se devemos chamar de torque ), mas para vocês terem uma idéia, faça um teste, em uma impressora matricial, quando ela esta imprimindo, e você tocar o carro de impressão mesmo que levemente, a impressora já se perde e o mecanismos fica completamente maluco. Isso se deve a velocidade com que é gerada a seqüência, temos velocidade, mas o motor não tema firmeza devido a velocidade dos pulsos serem altas.
Caso você aumente o tempo de geração dos pulsos irar perceber que o motor ( TRAVA ) e tem uma força relativamente alta. Isso se deve simplesmente ao tempo em que as bobinas dos motores ficam energizadas, mais tempo energizadas mais força, menos tempo energizada mais velocidade e menos força e próximo do limite de fazermos o motor vibrar.
Pode parecer detalhes bobos, mas em vez de ficarmos falando um monte de coisas e cálculos e formas matermatica, que já estamos cansados de ler, e ver em publicações técnicas, acho o ideal é desmistificar as coisas, por isso certas explicações são simples que fica próxima do absurdo, mas você deve procurar estudar a fundo a parte teórica que envolve os motores de passo.
Já sabemos que para controlar um motor precisamos gerar uma seqüência de 4 bits, em uma determina seqüencia espaçados de um determinado tempo.
A afirmação acima é valida para qualquer tipo de motor de passo, portanto vamos nos valer do principio básico e de um conceito que nunca vai mudar, pois se mudar com certeza o motor não se chamara motor de passo. Conceito são conceitos, e o motor de passo funciona de modo muito simples como estamos observando.
Vejamos alguns detalhes sobre circuitos geradores da seqüência de fases. Na figura 2 temos o diagrama eletrônicomuito antigo,o que prova que conceito dificilmente muda em eletrônica, neste diagrama que foi extraído originalmente de um manual de um DRIVER DA ELEBRA, com cerca de 18 anos de idade, isso mesmo, faz mais de 18 anos que os motores de passo funciona da mesma forma.
Figura2
Mas observando o circuito da figura2 o leitor pode estar se perguntando, poxa , mas vimos ate agora que precisamos de 4 bits para gerar as seqüências, como estamos estudando um circuito que tem somente dois bits ?
Tai um outro detalhe bem interessante, vamos imaginar uma condição em um projeto que você tenha um micro controlador ou uma interface de 8 bits de saída e você precisa controlar 2 motores de passo, obvio, será fácil, 8 bits de saída eu preciso de controlar dois motores de passo 4 bits para cada motor, mamão com açúcar não tem stress.
Vamos complicar tudo, e se o chefe do projeto falar, precisamos ligar 4 motores de passo em uma porta de saída com 8 bits. E agora? Complicou né ? Sim e não, na verdade iremos usar uma lógica muito simples igual a da figura 3, onde a partir de 2 bits geramos 4 bits e portanto a as fases que precisamos
Vamos raciocinar de acordo com o circuito lógico, esquecendo o CI 74LS191 que é um contador, e vamos nos ater as entradas, iguinorando também o CI 7408. Raciocinando. Antes vejamos a tabela verdade 1 do CI 7486 uma porta XOR.
Ao aplicarmos os sinais 00, 01, 10 e 11 ao arranjo do circuito da figura 2, observe que teremos na saída exatamente o que estudamos anteriomente.
Ta ficando fácil e obvio agora. Para que não nos percamos na seqüência de raciocínio, vejamos os circuitos da figura3, 4 e 5, todos eles simplesmente são de 2 bits,e a lógica digital gera os 4 bits necessários para nosso estudo. Observe na quantidade de opções que temos, e sempre utilizando CIS de fácil obtenção. E o funcionamento é sempre idêntico. Nas figuras 3 e 4 utilizamos o transistor TIP122 como etapa de potencia, já no circuito da figura 5 utilizamops o ULN2803, somente para efeito de demosntração. No meu ponto de vista acho melhor utilizar o TIP 122 pois a capacidade de carga do mesmo é superior ao ULN2803 e o custo dos TIP em relação ao ULN2803 é pequeno. Mas para que complicarmos se podemos simplificar. Na verdade o circuito proposto tem como objetivo aplicarmos a projetos utilizando a interface de porta LPT que voce provavelmente ja viu aqui neste site. Nosso objetivo no final de toda a seqüência de projetos, é presentear o INTERNAUTA com um projeto de um braço robótico, e precisamos de controlar 8 motores para isso. O raciocínio é sempre o mesmo, na geração das seqüências de controle, tantode 2 bits como em 4 bits.
Observe que cada modulo de potencia deveram ser conectadas as portas de saída da interface LPT. Sendo o primeiro motor em SV3, pinos 8 e 7, o segundo motor pinos 6 e 5, o terceiro motor nos pinos 4 e 3 , o quarto motor nos pinos 2 e 1. O mesmo é valido para a segunda porta ou conector SV2. Não esquecer o TERRA no conector SV4.
Figura 3
Figura 4
Figura 5
Observe a figura 6, onde temos um circuito de driver sem a lógica de geração de 4 bits, pois iremos ligar diretamente a porta da interface LPT,a limitação é devido a termos duas portas de 8 bits de saída, controlaremos somente 4 motores, e nos diagramas das figuras 3, 4 e 5 podemos controlar ate 8 motores, observe que devemos conectar cada modulo de potencia nas saídas da placa LPT, sendo o primeiro motor no conector SV3 pinos 8,7,6,5 o segundo motor em SV3,pinos do conector 4,3,2,1 e repetir a mesma seqüência para os outro dois motores na saída SV2. Para o Leitor não ter duvidas de como efetuar a ligação entre as etapas de potencia e a interface LPT para porta paralela, observe a figura 6B diagrama para conectar a módulos de 4 bits e 6C para módulos de 2 bits, o qual é o nosso objetivo.
Figura 6
Figura 6B
Figura 6C
O Software de controle não se altera muito, pois em vez de gerarmos a seqüência1, 2, 4, 8 no caso de quatro bits, no caso de 2 bits iremos enviar para a saída 1,2,3 e o circuito lógico se vira em gerar as fases necessárias.
Bacana mas e o segundo motor, quala seqüência a ser gerada?
Vejamos o exemplo a baixo, imaginemos a porta A da interface LPT da seguinte forma:
D7D6D5D4D3D2D1D0 ( porta a )
Como seria a seqüência de controle então ? Lá vai, para o modo 4 bits, seria D0, D1, D2 e D3 para o motor de passo 1. Para o motor de passo 2 ficaria os bits D4, D5, D6 e D7.
Na porta B seria a mesma coisa, D0, D1, D2 e D3 para o terceiro motor e D4,D5,D6,D7 para o quarto motor
No caso de estamos utilizando2 bits, a distribuição ficaria assim
D0 e D1 para o motor 1, D2 e D3 para o motor 2, D4 e D5 para o motor 3 e D6 e D7 para o motor 4, e na porta B da interface LPT teríamos em D0 e D1 o motor 5, D2 e D3 motor 6, D4 e D5 motor 7 e finalmente Motor 8 em D6 e D7. A mesma coisa para a porta B da interface.
Veremos com ficaria a seqüência em DECIMAL e BINARIO para o caso do controle por 4 bits.
Como vamos utilizar D0,D1,D2e D3, teríamos a seqüência em 1,2,4,8 e no caso do segundo motor D4,D5,D6 e D7 seria 16,32,48,128. O mesmo é valido para a segunda porta.
Já no caso de 02 bits seria assim D0, D1 a seqüência seria1,2,3, para D2 e D3 seria 4,8,12, para D4 e D5 seria 16,32,48, e para D6 e D7 seria 64,128,192 o mesmo seria valido para a porta B.
Exemplificando mais ainda vejamos a tabela abaixo para controle usando4 bits.
Vejamos a tabela para controle utilizando somente 2 bits
Pronto, acho que agora esclarecemos o porquê e o como se gera as fases em um motor de passo, não devemos deixar de lembrá-los que foi suprimido o ZERO inicial de todas as fazes, porem isso é preciso para a seqüência ficar correta.
O que acontece com o motor de passo caso a seqüência esteja errada ou faltando uma delas? Simples, o eixo do motor ira girar de forma incorreta, será facilmente perceptível.
Agora vem a parte legal do artigo. Programar a interface. Já sabemos como os motores funciona, já sabemos que precisamos gerar uma seqüência de bits, já sabemos que devemos dar um tempo entre a geração das fases para que o motor gire corretamente, então vamos ao que interessa.
Vamos presumir que você escolheu o circuito de driver para 02 bits equivalente ao da figura 5, o qual possui o CIs 74LS86 e o 74LS86, o programaé igual para qualquer um dos circuitos drivers exemplos.
Entre no site da editora e baixo o arquivo stpMlpt.arj, e instale ele no seu micro, a tela do programa é mostrada na figura 7.
Figura 7
Descrevendo os controles do Software.
Caixa BASE DE TEMPO Controla a base de tempo entre a geração das fases, para os botões de controle.
Botões M1 a M4 Controla os motores manualmente.
Caixa Steper 1 ate Steper 8 Controla o sentido de rotação e a velocidade de geração das fases. Funciona como um acelerador.
Vejamos alguns pontos importantes do programa.No quadro 1 podemos observar a rotina de acionamento da interface,onde selecionamos o endereço da porta paralela disponívelno micro que estamos utilizando.
Quadro 1
Uma vez selecionado o endereço de controle da interface LPT no quadro 2 iremos observar a rotina que gera a base de tempo para os botões de controle dos motores.
Quadro 2
Selecionamos o endereço da porta, ativamos um determinado TEMPO para a geração dos PULSOS e agora vamos mandar o dado para a saída da porta LPT. Veja que demos dois exemplos diferentes para fazer a mesm a coisa quadro 3 e quadro 4.
Quadro 3
Observe no exemplo acima que geramos os códigos 0,1,2,3 e efetuamos um laço de tempo FOR...NEXT....com a variável tm1tempjá descrito no quadro 2. È nesse exato ponto que o programa controla o tempo de geração das fazes ao qual falamos no inicio do artigo. Através desse laço de tempo determinamos a velocidade com que os bits de controle é enviado para a saída da interface LPTe por fim ao circuito driver do motor de passo
No quadro 4 temos a mesma coisa feita no quadro 3 porem utilizamos um laço de contagem FOR....NEXT.. para gerar a seqüência.
Quadro 4
Que bacana,como esta ficando fácil controlar um motor de passo. Agora veremos alguns aperfeiçoamentos do programa.
Observe na tela do nosso programa de controle que temos a seqüência STEPER 01 ate 08,cada um com 3 botões e uma barra de rolagem. A barra de rolagem é responsável pela geração de tempo entre as seqüências, quadro 5
Quadro 5
No código fonte você percebera a existência de 16 TIMERS do Visual Basic 6 de uma olhada na figura 8
Figura 8
Você deve estar se perguntando!? Mas para que tanto timer? Simples, para controlarmos os motores com acionamento continuo. Nos botões demos os exemplos de como acionar o motor, cada click no botão o motor ira gira uma seqüência de passo em modo FULL ou seja gera a seqüência 0001, 0010, 0100, 1000 em 4 bits ou 00, 01, 10, 11 para 2 bits de controle.
Caso você queira que o motor gire sem parar devera ficar pressionado o botão. Chato isso. Mas como nossa intenção é ensinar você, então vamos dar exemplos para no futuro você mesmo ter sua linha de raciocínio. Basta de papo, os 16 timers estão ali justamente para girar o motor de forma continua.
Vejamos o quadro 6 com o código fonte de todos os botões do STEPER 1.
Quadro 6
Explicando a coisa toda:
Para cada motor utilizamos 02 timers, um deles gera a seqüência do motor PARA A FRENTE e o outro timer GERA A SEQEUNCIA PARA TRAZ, ou seja inverte.
Quando acionamos o BOTÂO( SH Sentido Horário ), Nos ativamos o TIMER 1 e desativamos o TIMER2,ao acionarmos o TIMER1 o programa executa a rotina contida em TIMER 1 que é:
Private Sub Timer1_Timer()
Out Control, 236
For x = 0 To 3: Out dados, x: For t = 1 To step1x: Next t: Next x
End Sub
Neste ponto o motor esta acionado continuamente, ele pode estar vibrando, em vez de girar, isso se deve a freqüência de ressonância a qual atingimos e isso não nos interessa, então acione a barra deslizante com a rotina abaixo.
Private Sub step1_Change()
step1y.Caption = step1
step1x = step1
step1x = step1x * 5000
End Sub
E instantaneamente o motor sai do estado de vibração e começa a girar. Que bacana. Ai você aciona o BOTÂO ( SHA Sentido Anti-Horário ) o conteúdo do botão é:
Private Sub Command25_Click()
Timer1.Enabled = False
Timer2.Enabled = True
End Sub
Então nos DESLIGAMOS o TIMER1 o qual estava fazendo o motor girar no sentido horário, e ligamos o TIMER2 que fará o motor girar em sentido anti horário. Veja as linhas de programa contidas em TIMER2
Private Sub Timer2_Timer()
Out Control, 236
For x = 3 To 0 Step -1: Out dados, x: For t = 1 To step1x: Next t: Next x
End Sub
Agora você resolve parar o motor clicando no botão X e terá o conteúdo do programa abaixo.
Private Sub Command27_Click()Timer1.Enabled = FalseTimer2.Enabled = False
End Sub
Para desligarmos o motor simplesmente colocamos os dois timers em falso ou desativado e o motor para.
Ainda sobre a rotina contida no TIMER2, perceba que efetuamos a contagem do 3 para o 0 com passo -1, ou seja iremos tirar de 3 ate chegar em zero e começa tudo novamente.
Essa rotina é idêntica para todos os outros 7 motores, salvo é claro a palavra de controle que é de acordo com a tabela de controle e a porta equivalente.
Para acionarmos a Porta A da interface enviamos OUT control,236, para controlar a Porta B enviamosOUT Control, 224.
Pronto, agora estamos no final e tentamos de forma bem pratica, e com o mínimo de teoria passar ao leitor algum conhecimento sobre motores de passo na pratica para uma aplicação real. Vamos a algumas considerações importantes.
Não espere de circuitos simples, uma alta eficiência, os circuitos aqui propostos tem como finalidade a pesquisa, o desenvolvimento o aprendizado, a partir deste ponto VOCE, INTERNAUTA, desenvolvera sua capacidade intelectual.
Sempre que preciso de circuitos eficientes, recorro aos diagramas de fabricantes de produtos e manuais de componentes. È nessas documentações que eu encontro a solução de forma pratica e ágil, assim como a mais de 15 anos atrás eu fiz um motor de passo girar gastando merreca, pois o tal do SAA1027 muito falando eu nunca conseguiu comprar no Brasil.
Agora sim a gente terminou este artigo, na sequencia iremos estudar o controle de servos motores, depois sobre os motores de corrente continua, e leitura e controle de sensores. Ate breve !