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 +1If conta = 5 Then conta = 1
End Sub
No caso de C/C++ é só acessar o endereço correto pra
interfacear
a porta paralela.