Você está na página 1de 16

TUTORIAL

Controle de
Motor de Passo
Autor: Lus Fernando Patsko
Nvel: Intermedirio
Criao: 22/02/2006
ltima verso: 18/12/2006

PdP
Pesquisa e Desenvolvimento de Produtos

http://www.maxwellbohr.com.br
contato@maxwellbohr.com.br

http://www.automato.com.br
atendimento@automato.com.br

1 Introduo
Esse tutorial abordar a confeco de uma placa para o controle de um motor de passo e a
programao para que se possa control-lo por meio das portas de sadas digitais do MEC1000 ou
do KDR5000. O motor de passo muito utilizado na robtica porque pode ter sua rotao
controlada por meio de passos, como o nome j diz, e isso indispensvel em alguns aparelhos
onde exigido um maior grau de preciso, pois o uso de motores de corrente contnua
convencionais poderia resultar em danos no aparelho ou em mal funcionamento.

2 Material
O material necessrio ser um motor de passo, um integrado ULN2003, um conector latch
de 10 vias macho, um conector latch de 10 vias fmea, um cabo flat e uma placa de fenolite.

3 Funcionamento

Figura 1. Motores de passo

Os motores eltricos so dispositivos eletromecnicos que transformam energia eltrica em


movimento rotativo por meio de ms e indutores em seu interior. Os modelos de motores de
aplicao mais difundida so os motores de corrente contnua (CC ou DC), os de corrente alternada
(CA ou AC), os universais, que funcionam tanto com corrente contnua quanto alternada, os
servomotores e os de passo.
O motor de passo um motor com uma preciso muito grande do seu movimento. So
utilizados onde necessrio o controle do nmero de rotaes muito importante, tais como em
impressoras, drives de disquete e sistemas de automao industrial e robtica, pois, se no houvesse
esse controle, o movimento contnuo poderia estrag-los. O passo que esse motor pode dar o
menor deslocamento angular para o qual est projetado. O nmero de passos destes motores
dependem do nmero de plos que seu rotor possui. Assim, existem diversas resolues para eles
como, por exemplo, 0.72, 1.8, 3.6, 7.5, 15 e at 90 graus, ou seja, 500, 200, 100, 48, 24 e 4 passos
1

por rotao, respectivamente. Alm do mais, hoje existem controladores de modulao de largura
de pulso onde se obtm micropassos, desse modo observa-se uma resoluo de posicionamento
infinitamente preciso. Para se ter uma idia, h controladores que operam na faixa de 50.000
micropassos por rotao.
No seu interior h estatores formados por bobinas que geram, quando percorridos por uma
corrente eltrica, o campo magntico necessrio para o movimento do rotor, que construdo com
mas permanentes confeccionados de acordo com o nmero de passos. Essa rotao controlada
por meio de um circuito externo que promove a oscilao do sinal que percorrer os pares de
estatores e, por isso, no pode ser conectado diretamente alimentao, pois desse modo no
haveria a pulsao necessria para que o motor possa girar.

O movimento se d quando h um ciclo no campo magntico dos estatores, ou seja, a cada


vez que um par de estatores magnetizado, ocorre um passo do eixo do motor. necessrio
construir o oscilador para o motor de passo corretamente, conforme o nmero de passos que se
queira adquirir. No nosso caso, estaremos utilizando um motor com 4 pares de estatores e um rotor
com 12 plos. Desse modo, estaremos trabalhando com um motor que d 48 passos por rotao ou
um passo a cada 7,5.
Para que possamos controlar o motor precisamos saber para qual tenso ele est projetado e
qual a corrente que ele consome. No nosso caso estaremos alimentando o motor com uma tenso de
12 V e pela Lei de Ohm poderemos calcular a corrente que ser consumida pelo motor.
Observando-se os dados do motor descobrimos que sua resistncia interna de 135, ento,
fazendo os clculos descobrimos a corrente que ele consumir:
V = R i
12 = 135 i
i = 12
135
i 0,09A = 90mA.
2

Desse modo poderemos estar utilizando o ULN2003, que nada mais do que um array de
transistores Darlington, que trabalha com tenses de at 50V e suporta uma corrente de at
500mA, o suficiente para o controle do nosso motor de passo. Este integrado possui 7 entradas para
o controle de at 7 sadas que sero ligadas s sadas dos estatores. necessrio em primeiro lugar
descobrir qual a sada comum aos estatores e esta ser ligada entrada de 12V. As conexes das
sadas dos estatores sero ligados aos pinos 16, 15, 14 e 13 do integrado e as sadas digitais do Kit
correspondentes a eles sero conectadas aos pinos 1, 2, 3 e 4. O integrado estar ligado
alimentao por meio dos pinos 8 (GND) e 9 (V+). As portas 1, 2, 3 e 4 sero ligados por meio de
cabos flat ao MEC1000 ou ao KDR5000.

ULN2003
H trs modos bsicos de operao do motor de passo: dois onde se usa o passo completo,
um com apenas um estator energizado por passo, onde o consumo de energia e torque so baixos, e
o outro com dois estatores energizados por passo, onde torque e consumo de energia so maiores; e
um de meio-passo, gerando um torque prximo ao de passo completo com dois estatores
energizados, com um consumo superior de energia, porm com uma preciso maior deslocamento.
Com a finalidade de uma explicao mais clara e uma linha de cdigo menor, o programa de
controle do motor de passo disponibilizar apenas o uso das operaes de passo completo.

4 Montagem
Para a montagem da placa para o motor de passo necessrio observar bem a polaridade dos
fios para que no haja erro na hora da confeco da placa. O fio comum aos estatores aquele cuja
resistncia quando medida entre dois fios d o valor nominal da resistncia do motor. Este fio deve
ser ligado alimentao de 12V. Se medirmos a resistncia entre dois fios que so os extremos da
bobina, esta ser o dobro da resistncia nominal do motor.

Comearemos pelo diagrama esquemtico do circuito para que no haja erro na hora de
confeccionarmos a placa. Para isso temos que ter mo o integrado ULN2003 pois este o nico
componente eletrnico que ser soldado placa. O esquemtico est mostrado a seguir.

Observe que tanto o ULN2003 como o prprio motor de passo no utilizaro o pino de
alimentao de 5 Volts disponvel no pino 1 das portas de sadas digitais. Eles devero ser
alimentados com uma tenso de 12 Volts, disponvel nas sadas de alimentao do Kit. Sendo assim
possvel soldar um borne de 2 vias ou mesmo soldar dois fios diretamente na placa, sendo que um
ser o terminal positivo e o outro ser o terminal negativo. Basta lig-los nas sadas de alimentao
correspondentes.
O desenho da placa, vista pelo lado dos componentes, mostrado a seguir.

Devemos transferir o desenho para o lado cobreado da placa de fenolite tomando o cuidado
de invert-lo. Depois disso s fazer a perfurao da placa e desenhar as trilhas at s sadas dos
cabos flat. Observe que utilizaremos apenas 4 entradas e sadas do integrado, preferencialmente a
dos pinos 1, 2, 3 e 4 como entradas, os pinos 16, 15, 14 e 13 respectivamente como sadas das
entradas utilizadas e os pinos de alimentao que so o 8 (GND) e 9 (V+), podendo ligar o terminal
comum do motor de passo com este ltimo pino, pois ambos vo ao positivo. Aps o desenho das
trilhas colocamos a placa para ser corroda no percloreto de ferro.
Depois de feita a corroso da placa, soldaremos o ULN2003 conforme o diagrama,
observando muito bem sua pinagem, pois caso seja invertido, ele poder ser danificado. Com muita
ateno, compare a posio em que ser soldado com o esquema e com a pinagem do componente,
para conferir se os pinos estaro conectados adequadamente. Soldaremos tambm um conector
latch, com o propsito de ligar um cabo flat ao Kit e o conector adequado ao motor de passo. Para
as entradas de alimentao, podemos soldar um borne de 2 vias ou ento soldar dois fios
diretamente placa.

5 Programao
Depois da criao da placa para o controle do motor de passo, necessrio criar um
programa especfico para control-lo. Isso necessrio devido ao prprio funcionamento do motor.
Como vimos logo acima, no basta apenas aliment-lo corretamente, necessrio haver uma
oscilao que faa com que os estatores proporcionem o movimento. Devemos ento criar um
programa que proporcione essa oscilao nas sadas digitais.

Figura 2. Programa de controle da placa de


motor de passo.

Nosso primeiro passo criar a interface grfica do programa. Vamos utilizar o projeto
criado no tutorial Base que j nos fornece algumas funcionalidades interessantes. Para isso
copiamos o projeto daquele tutorial e em cima dele vamos adicionar alguns componentes grficos
extras.
A interface grfica composta por dois SpeedButton, dois Labels e dois ComboBox. Os
botes sero destinados a ligar e desligar o motor nos modos de torque alto e torque baixo. Uma
ComboBox selecionar a porta de sada digital e a outra o sentido da rotao do motor e os Labels
apenas indicaro o contedo de cada ComboBox. Tambm existe um componente Timer, que no
visvel durante a execuo do programa, mas essencial para seu funcionamento.
O primeiro passo modificar a propriedade Caption do Form principal de Projeto Base
para Motor de passo placa. importante deixar o nome desse programa um pouco diferente do
que destinado a controlar o motor de passo do Kit, para evitar confuses. Em seguida
adicionaremos um Label e um ComboBox para a seleo da porta de sadas digitais na interface.
Esses componentes podem ser encontrados na aba Standard.

Figura 3: Aba "Standard" da Barra de componente.

O componente Label possui o seguinte cone.

Figura 4: cone do componente Label.

E o componente ComboBox possui o seguinte cone.

Figura 5: cone do componente ComboBox.

Vamos ento adicion-los e modificar as propriedades do Label.


Name

LabelPorta

Caption

Porta:

Font/Style/fsBold

true

Em seguida, modificaremos as propriedades do ComboBox.


Name

ComboBoxPorta

Style

csDropDownList

Items.Strings

Porta 0, Porta 1

ItemIndex

Nesse momento, o nosso Form dever ter a seguinte aparncia:

Figura 6: Form aps incluso do Label e do


ComboBox.

O prximo passo ser adicionar os componentes responsveis pela seleo do sentido do


motor. Vamos adicionar um Label e modificar suas propriedades.
Name

LabelSentido

Caption

Sentido:

Font/Style/fsBold

true

Em seguida, adicionaremos um ComboBox e modificaremos as seguintes propriedades.

Name

ComboBoxSentido

Style

csDropDownList

Items.Strings

Horrio, Anti-horrio

ItemIndex

Nosso Form ento dever se parecer com o seguinte:

Figura 7: Form aps incluso do Label e do


ComboBox.

Devemos agora adicionar os SpeedButtons, cuja funo ser acionar ou desligar o motor.
Como temos dois modos de operao possveis, devemos colocar dois SpeedButtons, que
encontram-se na aba de componentes Additional.

Figura 8: Aba "Additional" da barra de componentes.

O componente SpeedButton possui o seguinte cone nessa barra.

Figura 9: cone do componente Button.

Name

SpeedButtonBaixo

Caption

Torque Baixo

Font/Style/fsBold

true

GroupIndex

AllowAllUp

True

Name

SpeedButtonAlto

Caption

Torque Alto

Font/Style/fsBold

true

GroupIndex

AllowAllUp

True

O ltimo componente a ser adicionado um Timer, que no ser visvel na interface grfica
do programa, no entanto, essencial para o seu funcionamento. O componente Timer encontra-se
na aba System da barra de componentes. A seguir uma imagem dessa aba.

Figura 10: Aba "System" da barra de componentes.

O componente Timer possui o seguinte cone:

Figura 11: cone do componente Timer.

Devemos adicion-lo e modificar as seguintes propriedades:


Name

TimerMotor

Interval

400

O nosso Form ento ficar da seguinte maneira:

Figura 12: Form aps incluso dos


SpeedButtons e do Timer.

Com a incluso desse componente, encerramos a criao da parte grfica e podemos partir
9

para a implementao do cdigo do programa. importante ressaltar que necessria muita


ateno nesse momento. Como a linha de cdigo relativamente extensa, fcil ocorrerem
pequenos deslizes que impeam que o programa funcione.
Como j foi mencionado, necessrio criar um programa que acione uma sada digital por
vez, possibilitando o movimento do eixo do motor. A cada sada acionada, uma porta do integrado
ULN2003 ser acionada que, por sua vez, acionar um estator do motor. Quando um estator do
motor acionado, seu eixo dar um passo. Para disponibilizar um maior torque do motor, basta
apenas acionarmos duas sadas digitais a cada vez, que ligaro dois estatores simultaneamente.
O primeiro passo para a implementao do cdigo ser dado no manipulador do evento
OnTimer, do TimerMotor que adicionamos no Form. Para criar esse manipulador podemos
selecionar o componente, ir no Object Inspector, selecionar a aba Events e dar um duplo clique
sobre a linha que est escrito OnTimer. Uma forma mais fcil de isso apenas dar um duplo clique
sobre o timer no Form e com isso o Delphi ir criar automaticamente um manipulador para o evento
OnTimer.
procedure TFormMain.TimerCheckTimer(Sender: TObject);
begin
end;
Como esse componente timer ser responsvel por enviar continuamente para o Kit as
informaes sobre o modo de operao, porta utilizada e sentido, devemos colocar um bloco tryexcept para evitar que o programa trave caso no haja nenhum Kit conectado.
procedure TFormMain.TimerCheckTimer(Sender: TObject);
begin
try
begin
end;
except
end;
end;
O prximo passo ser ento implementar o cdigo para os botes que acionaro o motor. No
mesmo procedimento, vamos utilizar uma estrutura de repetio while e uma estrutura de deciso if
para cada boto.
procedure TFormMain.TimerCheckTimer(Sender: TObject);
begin
try
10

begin
while SpeedButtonBaixo.Down = true do
begin
end;
if

SpeedButtonBaixo.Down = false do

begin
end;
while SpeedButtonAlto.Down = true do
begin
end;
if SpeedButtonAlto.Down = false do
begin
end;
end;
except
end;
end;
Agora, faremos uma pausa para analisar os comandos que sero enviados pelas sadas
digitais. Utilizaremos o mtodo DigitalPortWrite para enviar os comandos para a placa de controle
de motores-de-passo. Esse mtodo possui a seguinte declarao:
Procedure DigitalPortWrite(port : Integer;
value : Byte);
Ele possui dois parmetros, um que indica a porta que queremos definir o estado e outro que
define o estado da porta. O Mdulo de Entradas, Sadas e Servo-Motores possui duas portas de
sadas digitais, logo o primeiro parmetro pode ser 0, para indicar a primeira porta, ou 1, para
indicar a segunda. Esse parmetro ser selecionado pelo ComboBoxPorta.
J o segundo parmetro do mtodo DigitalPortWrite define quais bits da porta devero ser
setados para o nvel lgico 1 e quais devero ser setados para o nvel lgico 0. Esse parmetro um
valor de 8 bits sendo que cada bit dele ir definir o estado de um bit da porta sada. O bit 0 da porta
ser representado pelo bit 0 do parmetro, o bit 1 pelo bit 1 e assim por diante. Como o motor de
passo utilizado possui 4 estatores, precisaremos setar apenas 4 bits.
Para acionar o primeiro estator, basta acionar a primeira sada digital da porta onde o motor
est acoplado, utilizando o mtodo DigitalPortWrite. O primeiro parmetro ser utilizado para
selecionar a porta correta, enquanto que o segundo acionar as sadas desejadas. Enviando um
nmero 1 no segundo parmetro, acionaremos a primeira sada, pois esse nmero em cdigo binrio
00000001. Caso queiramos acionar a terceira porta, devemos enviar o nmero 4, que em cdigo
11

binrio 00000100. Caso, queiramos fazer com que um motor de passo gire, precisamos acionar
seus estatores, um de cada vez. Podemos fazer isso enviando um nmero, cujo equivalente em
binrio seja adequado para acionar cada uma das 4 sadas durante um curto intervalo. A tabela a
seguir mostra a relao entre o nmero enviado e seu valor binrio.
Nmero decimal
Valor binrio

00000001

00000010

00000100

00001000

00000001

Enviando esses valores, com um pequeno intervalo entre cada um, acionaremos cada uma
das quatro primeiras sadas digitais, e consequentemente, os quatro estatores do motor de passo.
Sendo assim, o motor se movimentar. Para fazer com que ele gire no sentido contrrio, basta
apenas inverter os nmeros a serem enviados para a porta de sada digital.
No modo descrito acima, acionamos um estator de cada vez, utilizando o modo de baixo
torque. Para um maior torque, basta apenas acionarmos dois estatores simultaneamente. Para isso,
devemos modificar os valores a serem enviados. Ao enviar esses valores, com um pequeno
intervalo entre cada um, teremos um maior torque disponvel no motor de passo, embora o consumo
tambm seja maior.
Nmero decimal
Valor binrio

12

00000011

00000110

00001100

00001001

00000011

Agora j aprendemos como devemos acionar as sadas digitais de modo a proporcionar o


giro do motor. Mas s h um problema. Precisamos que esses valores se repitam indefinidamente.
Para isso utilizamos a estrutura while, cuja funo repetir inmeras vezes uma determinada
funo. No nosso programa, enquanto um SpeedButton estiver acionado, ela enviar os bits para as
sadas digitais infinitas vezes.
Dentro do bloco definido pela estrutura while, utilizaremos a estrutura de deciso if-else.
Essa estrutura verificar o estado da ComboBox que indica o sentido e comparar com o valor 0. Se
o item selecionado na ComboBox for igual a zero (que o primeiro item), ento ser executada uma
operao. Caso o item no seja igual a zero, ento uma outra operao ser executada, atravs da
estrutura else.
Utilizaremos a funo Sleep para gerar o intervalo entre cada estator acionado. Essa funo
simplesmente interrompe o andamento do cdigo durante um intervalo, expresso em milsimos de
segundo. No nosso programa, utilizaremos um intervalo de 100ms. Intervalos diferentes podem ser
utilizados, mas um intervalo menor no muito recomendado, pois o motor de passo no suporta
velocidades de giro altas e poder no funcionar.
Quando nenhum SpeedButton estiver acionado, o motor de passo dever ser desligado. Para
isso, basta utilizarmos duas estruturas de deciso if, sendo cada uma destinada a um dos botes.
Ento utilizaremos o mtodo DigitalPortWrite, onde no seu segundo parmetro colocaremos o
nmero 0, que seta todas as sadas digitais da porta que est sendo utilizada em 0, desligando ento
o motor.
Desse modo, nossa linha de cdigo ficar assim. Observe que, devido o tamanho da linha de
cdigo, necessrio prestar muita ateno e segui-la rigorosamente. Um pequeno erro de pontuao
ou a falta de um end poder fazer com que o programa no funcione.
12

procedure TFormMain.TimerMotorTimer(Sender: TObject);


begin
try
begin
// Repetir infinitamente a ao enquanto o
// SpeedButtonBaixo estiver pressionado
while SpeedButtonBaixo.Down = true do
begin
//verifica o sentido selecionado
if ComboboxSentido.ItemIndex =0 then
begin
//atualiza o estado da porta de sada selecionada
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 1);
//gera um intervalo de 100ms
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 2);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 4);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 8);
Sleep(100);
Application.ProcessMessages();
end
else
begin
kit.DigitalPortWrite(ComboBoxPorta.Itemindex,
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex,
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex,
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex,
Sleep(100);
Application.ProcessMessages();
end;

8);
4);
2);
1);

end;
// Realizar a instruo quando o SpeedButtonBaixo no
// estiver acionado
if SpeedButtonBaixo.Down = false then
begin
//seta todas as sadas digitais em zero
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 0);
end;
13

// Repetir infinitamente a ao enquanto o SpeedButtonAlto


// estiver pressionado
while SpeedButtonAlto.Down = true do
begin
if ComboboxSentido.ItemIndex =0 then
begin
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 3);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 6);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 12);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 9);
Sleep(100);
Application.ProcessMessages();
end
else
begin
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 12);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 6);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 3);
Sleep(100);
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 9);
Sleep(100);
Application.ProcessMessages();
end;
end;
// Realizar a instruo quando o SpeedButtonAlto no
// estiver acionado
if SpeedButtonAlto.Down = false then
begin
kit.DigitalPortWrite(ComboBoxPorta.Itemindex, 0);
end;
end;
except
end;
end;
end.
Assim finalizamos a implementao do cdigo do nosso programa e j podemos utiliz-lo.
Uma boa maneira de realizar um primeiro teste com ele ligar uma barra de LEDs (cuja montagem
est descrita em outro tutorial). No modo de operao em baixo torque, um LED deve ser aceso por
vez, sendo que ao chegar ao quarto LED, o ciclo dever se reiniciar, e no modo de alto torque, dois
LEDs. Para uma melhor visualisao, mude o tempo da funao Sleep para 500ms, por exemplo.
14

Ao verificar que o programa funciona corretamente, basta apenas conectar a placa de


controle com o ULN2003 na porta de sada digital desejada e conectar o motor de passo nesta.
Tambm necessrio ligar a alimentao do motor de passo, ligando um cabo do terminal positivo
e um do negativo nas sadas de alimentao de 12 Volts e 0 Volts (GND), presentes no Kit.

Figura 13. Placa de controle de motor de passo ligado ao KDR5000.

6 Concluso
Com esse tutorial, foi possvel aprender a construo de uma placa destinada ao controle de
um motor de passo utilizando um integrado ULN2003 e elaborar a programao destinada a
control-lo, utilizando as portas de sadas digitais. Trata-se de um desenvolvimento complexo, mas
que pode resultar em timos resultados, tanto em conhecimento adquirido quanto em praticidade de
operao.

15

Você também pode gostar