Anda di halaman 1dari 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 Caption Font/Style/fsBold = = = LabelPorta Porta: true

Em seguida, modificaremos as propriedades do ComboBox. Name Style Items.Strings ItemIndex = = = = ComboBoxPorta csDropDownList Porta 0, Porta 1 0

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 Caption Font/Style/fsBold = = = LabelSentido Sentido: true

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

Name Style Items.Strings ItemIndex

= = = =

ComboBoxSentido csDropDownList Horrio, Anti-horrio 0

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 Caption Font/Style/fsBold GroupIndex AllowAllUp

= = = = =

SpeedButtonBaixo Torque Baixo true 1 True

Name Caption Font/Style/fsBold GroupIndex AllowAllUp

= = = = =

SpeedButtonAlto Torque Alto true 2 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 Interval = = TimerMotor 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

1 00000001

2 00000010

4 00000100

8 00001000

1 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

3 00000011

6 00000110

12 00001100

9 00001001

3 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; 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

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

// 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

Anda mungkin juga menyukai