Arne
Basic 2k - Experiência 6 - Controle de motor de passo
A
proposta Nesta
sexta experiência
demonstrarei como utilizar o Arne Basic 2k no controle de um
motor de passo do tipo unipolar (6 ou 5 fios). E como já é de
costume, primeiro acho interessante mostrar um pouco da teoria para
em seguida apresentar a parte prática. A teoria Os
motores de passo são amplamente difundidos no mundo da
eletrônica / mecatrônica / microrobótica. Sua
precisão, aliada a sua força (torque) fazem deste motor
um excelente “posicionador”. Eles estão presentes em
impressoras, pequenos CNC’s, mesas “XY”, etc. Por estas e
muitas outras razões, os motores de passo também são
utilizados em pequenos e médios robôs. Alguns dos robôs que publiquei
na revista Mecatrônica Fácil, como o ADR-2, ADR-3 e o
Desenhista, utilizaram motores de passo para se
locomover.
Para operar um motor de passo do tipo unipolar, é necessário “ligar” e “desligar” (chaveamento) suas bobinas em uma seqüência correta. A freqüência com que estas bobinas são “chaveadas” determinará a velocidade de giro do motor. Para fazê-lo girar em sentido contrário devemos inverter a seqüência de chaveamento. Veja a tabela abaixo, nela descrevo a seqüência para operar um motor de passo unipolar de seis fios (duas bobinas independentes). Tabela - Seqüência para chaveamento
Os valores iguais a “1” equivalem à bobina ligada e os valores iguais a “0” equivalem à bobina desligada. A analise da tabela é feita do “passo 1” para o “passo 4”. A partir desse ponto a operação é repetida para manter o motor em funcionamento. Lembrando que a maioria dos motores necessitam de mais de 70 passos para uma volta completa. Quanto mais passos para uma volta o motor necessitar, mais preciso o mesmo será. Para fazer o motor girar em sentido contrário, devemos fazer a analise inversa na tabela. O primeiro passo passa a ser o de número “4” e o último o de número “1”. Esta operação é repetida até conseguirmos o número de voltas desejado. Infelizmente não existe uma padronização entre os fabricantes de motores de passo, que nos permita através de um código de cores identificar as ligações de suas bobinas internamente. Para isso é necessário que você, de posse de um multímetro na posição de leitura de resistências, faça uma analise de seu motor. A figura abaixo demonstra como isso deve ser feito. Em
um motor de 6 fios, as bobinas vão se apresentar separadas. Neste caso
um valor resistivo maior medido entre dois pontos mostrará as "pontas"
da bobina. Um valor igual a metade do valor encontrado para as "pontas"
mostrará a "tomada central" da bobina (center tap). É neste ponto que a
tensão de alimentação do motor deve ser ligado. Já
motores de 5 fios são um pouco mais complicados de se determinar, pois
os fios das tomadas centrais de ambas as bobinas estão ligados
internamente. Porém o conceito é o mesmo.
Na figura abaixo você tem o
esquema
elétrico proposto para esta experiência. Como você mesmo pode ver,
trata-se também de um
circuito extremamente
simples. Eu recomendo a montagem do mesmo em uma matriz de
contatos, afinal você está apenas "testando" um circuito. A chave S1 gira o motor no sentido horário, a chave S2 gira o motor no sentido anti-horário e a chave S3 pára o motor.
Para esta experiência é recomendável o uso de uma fonte de 12VDC com 1A
no mínimo de corrente. O motor de passo deve ser do tipo, unipolar com
5 ou 6 fios, tensão de bobina 12VDC. Os com 4 fios não servem nesta
experiência. Cuidado com motores muito grandes, pois estes geralmente
consomem uma corrente grande. Prefira os menores para realizar esta
experiência, já que independente do tamanho a forma de controle será
sempre a mesma. Você pode ver o código fonte logo abaixo. Este programa é mais um excelente exemplo da estrutura da Linguagem de programação BASIC utilizada pelo compilador BASCOM-AVR. Este exemplo mostra alguns recursos do compilador, além do básico da programação BASIC. Vamos em frente com nossas experiências!!! Como diria o sr. Miagui - "Daniel San!!! Começou a aprender karatê ontem e já quer ser faixa preta?!?! Primeiro ralar bastante... depois ganha primeira faixa... vermelha né!!!" ehehehehe Código fonte:'******************************************************************************* '* Programa TESTE_STEPMOTOR_ARNEBASIC2K.BAS '* Desenvolvido por Márcio José Soares '* para do Arne Basic 2k '* '* Obs.: Este programa foi desenvolvido para testar o uso de um motor de passo '* com o Arne Basic 2k. Veja o circuito em www.arnerobotics.com.br '* '* S1 gira horário '* S2 gira anti-horário '* S3 pára motor '* '* O motor de passo usado nesta experiência é do tipo unipolar!!! '* '* Para ligar o motor ao Arne Basic 2k é necessário um drive de corrente!!! '* Veja o circuito no site para saber mais!!!! '******************************************************************************* '******************************************************************************* 'Configs necessários ao microcontrolador $crystal = 10000000 $regfile = "attiny2313.dat" Config Portb = &B11111111 'todo portB é saída Config Portd = &B11101010 'todo portD é saída, exceto PD0, PD2 e PD4 Config Debounce = 30 'tempo para debounce das chaves = 30 ms '******************************************************************************* 'Variáveis globais Dim Sentido As Byte 'sentido de giro Dim Motortab(4) As Byte 'tabela para controle do motor Dim Ponteiro As Integer 'posição do ponteiro na tabela '******************************************************************************* 'Liga pinos de I/O's a "nomes" mais fáceis ao entendimento humano ;-) Motor Alias Portb 'porta de controle do motor S1 Alias Pind.0 'pino de entrada para chave 1 S2 Alias Pind.2 'pino de entrada para chave 2 S3 Alias Pind.4 'pino de entrada para chave 3 '******************************************************************************* 'Declaração das subrotinas Declare Sub Check_tec() Declare Sub Direita() Declare Sub Esquerda() Declare Sub Para() '******************************************************************************* 'Início do programa Waitms 500 'aguarda 0,5 segundo Sentido = 0 'motor parado Ponteiro = 1 Motortab(1) = &B00000101 'tabela de controle para motor Motortab(2) = &B00001001 Motortab(3) = &B00001010 Motortab(4) = &B00000110 Call Para() '******************************************************************************* 'Laço principal... faz eternamente Do Call Check_tec() 'chama rotina para ver se tem tecla Select Case Sentido Case 1 : Call Direita() 'gira motor a direita Case 2 : Call Esquerda() 'gira a esquerda Case 3 : Call Para() 'pára motor Case Else : Call Para() 'qualquer outro valor, pára End Select Loop '******************************************************************************* 'Subrotina para verificar se alguma tecla foi pressionada 'S1 gira a direita 'S2 gira a esquerda 'S3 pára motor Sub Check_tec() Debounce S1 , 0 , Mdir 'desvia se zero Debounce S2 , 0 , Mesq 'desvia se zero Debounce S2 , 0 , Mpara 'desvia se zero Goto Fim 'desvia para fim da subrotina 'avisa que deve girar a direita Mdir: Sentido = 1 Goto Fim 'desvia para fim 'avisa que deve girar a esquerda Mesq: Sentido = 2 Goto Fim 'desvia para fim 'avisa que deve girar a esquerda Mpara: Sentido = 3 'Label para sair da função Fim: End Sub '******************************************************************************* 'Subrotina para girar motor a direita Sub Direita() Motor = Motortab(ponteiro) 'coloca valor da tabela no port Incr Ponteiro ' incrementa ponteiro If Ponteiro = 5 Then 'se chegou no fim Ponteiro = 1 'retorna valor End If End Sub '******************************************************************************* 'Subrotina para girar a esquerda Sub Esquerda() Motor = Motortab(ponteiro) Decr Ponteiro 'decrementa valor If Ponteiro = 0 Then 'se chegou ao fim Ponteiro = 4 'retorna valor End If End Sub '******************************************************************************* 'Subrotina para parar motor Sub Para() Motor = &B00000000 'zera porta e para motor End Sub End 'fim do program |
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |