Bard HP

  

     Usando a Porta Paralela do seu PC
     para acionar um motor de Passo

                                             

 

    Introdução

        Um dos motivos que me fizeram escrever esse artigo é que com esse site eu sempre pretendi
      popularizar os conhecimentos sobre eletrônica e robótica pois muitos acham isso uma coisa do
      outro mundo e na verdade não é. Esse artigo tem o objetivo  de esclarecer como podemos
      fazer com que um PC  possa funcionar como um microcontrolador, pois se analisar friamente
      oque é um microcontrolar veremos que ele não passa de um circuito processado  que possui
      memória e tem dispositivos de Entrada/Saida de dados, parece que estamos descrevendo um
      PC,  não é verdade?.

   

     Cuidados a serem tomados

       Como o título desse artigo diz , iremos usar a porta paralela para fazer um pequeno experimento,
       então peço encarecidamente para o leitor seguir a risca esses conselhos pois a porta paralela é 
       algo muito delicado, e qualquer ligação que por ventura você faça errado,  seu PC  literalmente
       pode queimar, e o dano será maior se sua placa for com dispositivos ON BOARD.  Todos os
       artigos sobre Porta Paralela que são encontrados na internet, recomendam que se deve
       interfacear a porta paralela com um outro circuito, usando-se acopladores ópticos,  mas nesse
       caso  o nosso circuito é tão simples que estarei dispensando esse componente que tornaria o
       nosso circuito bem mais complicado, e até o fim das minhas férias irei escrever sobre os 
       acoplamentos ópticos.

      Lista de Componentes

     1 Conector DB 25 Macho             (custa 1 Real)
      1 Circuito Integrado  ULN 2003     (Custa 1 Real)
      1 Motor de Passo de  no máximo 500 mA  por fase (consumo)  ( 10 Reais)
      1 Diodo   1N4001

   
       Mapa da Porta Paralela

              

       Identificando os fios do motor

        Um dos passos mais trabalhosos nesse projeto é identificar os fios do motor. Vou tomar por base um
     motor de 6 fios onde 2 são para ser ligados em +VCC. Usando um multímetro deve-se medir as
     resistências entre todos os fios. Logo você irá notar que vai haver 3 tipos de resistência: R , 2R e infinito,
     imagine que a resistência entre o fios 1 e 2 de 2R e entre os fios 1 e 3 deu R e entre os fios 2 e 3 também
     deu R. Com isso podemos dizer que o fio 3 é o fio de alimentação +, e os fios 1 e 3 fazem parte da mesma
     bobina. A mesma coisa deve ocorrer com os 3 fios restantes, sendo que se você medir as resistências entre
     qualquer um dos fios 1,2,3 e 4,5,6, elas vão dar infinito, pois eles não estão ligados entre si. Supondo que
     o fio 3 e o fio 6 sejam nos nossos fios de alimentação, teremos que liga-los na alimentação de 12V( no
     caso do motor que eu estou usando, no caso de vocês chequem o valor que o motor necessita ser alimentado, e
     o alimentem com essa tensão)

      Achando a ordem correta de acionamento das Bobinas

     Verificar a ordem das bobinas é um passo extremamente importante, pois se isso não for verificado,
    provavelmente o seu motor  não irá funcionar do jeito que você quer. Para verificar a ordem das
    bobinas, basta  alimentar os fios de alimentação com a tensão requerida, e com o terra da fonte,
    vá encostando nos outros 4 cabos que sobraram, um de cada vez, você irá perceber que o motor
    começará a girar, a cada vez que você encostar o terra em um cabo diferente, uma hora ele vai girar
    girar em um sentido, outras em outro sentido.. Vá trocando a ordem dos cabos  que você liga no terra,
    até que o seu motor gire 4 vezes consecutivas no mesmo sentido. Anote a ordem dos cabos que você
    ligou no terra para dar essa seqüência de 4 giradinhas no mesmo sentido, e com isso você tem   a ordem
    das bobinas. Agora basta você ligar os fios na ordem na saída do ULN 200

     Esquema do Circuito


  

 

 

 

   Um pouco de Algebra Booleana

     A porta paralela possui 8 Bits que podemos mudar o nivel lógico de 0 para 1 ou vice-versa, no entanto
   as funções que acessam a porta paralela podem usar valores tanto em binários, hexadecimais ou inteiros,
   então irei explicar como transformar um em outro.

     Base Binária:

   Temos 8 bits que podemos manipular, então claramente temos  11111111 para todas as saídas igual a 5V,
   ou 00000001  para apenas uma saída igual a 5V e o restante igual  0V.

     Base Decimal:

    Pensando primeiro em Binário para depois transformando em inteiro, então  por exemplo  temos,

   (00010111)B =  20 + 21 + 22 + 24 = 23 na base decimal.

     Base Hexadecimal

     Pensando em Binário primeiro pois é o mais intuitivo e passando para hexadecimal, temos:
   
     (00010111)B=   17 na base Hexadecimal

     Esse caso não é tão óbvio como o caso acima, então para transformar em Hexadecimal, temos
   que separar  o numero em binário em agrupamentos de 4 números, no caso acima temos,
   0001 e 0111 , depois calcularemos o valor desses dois números em decimal,  assim encontramos
   o valor 1 para o primeiro binário e 7 para o segundo,  com isso achamos o número 17, que o 
   valor em Hexadecimal.

   Obs: Note que  10  em decimal é igual a A em Hexadecimal., e assim por diante.

 

    Visual Basic x Windows

 

    Para quem tem o WIN95/98 :

     1- pegue esse arquivo:
     http://www.mrshp.hpg.ig.com.br/rob/inpout32.zip

     2-descompacte em algum lugar, e copie o arquivo inpout32.dll pra
    %windir%\system32 ou %windir%\system dependendo do seu sistema

     3- veja o programa exemplo que vem com esse arquivo para aprender.

     4- Qualquer duvida, me contatem!!


     Para quem tem WINXP/2000

     1- pegue esse arquivo:
     http://www.mattjustice.com/parport/userport.zip

     2-Copiar UserPort.sys para %windir%\system32\drivers
     3-Rodar o UserPort.exe para setar configuracao da sua porta paralela
     4- seguir os passos do tutorial acima de quem tem o WIN95/98


    Obs: É necessario rodar sempre esse programa Userport, pois com o
           Winxp/2000 não é possivel interfacear a porta paralela diretamente, li
           isso em varios  artigos na internet, e testei aqui, e realmente da certo.

 

     Observações

   A LPT1 se encontra no endereço H378 e funciona como descrito no artigo acima
    A LPT2 se encontra no endereço H278 e todas as porta D0 - D7 são negadas, isto
    é, a tensão de 5V é dado quando o nível lógico é Zero.

 

     Finalizando

     A lógica de programação para fazer o motor funcionar é a de energizar uma bobina
   de cada vez na ordem correta, assim o eixo do motor irá se alinhar com o campo
   induzido por essa bobina, assim no exemplo que eu vou citar , temos um objeto Timer
  cuja função foi programada  desse modo (onde conta = integer):

 

   If conta =1 Then
     Out &H378, 1
   End If

   If conta = 2 Then
      Out &H378,  2
   End If

   If conta = 3 Then
      Out &H378, 4
   End If

   If conta = 4 Then
       Out &H378, 8
   End If
  
  conta = conta +1

  If conta = 5 Then conta = 1
 

  End Sub


  
No caso de C/C++ é  só acessar o endereço correto pra interfacear
  
a porta paralela.