Controlador de motor de passo
com PIC 12C508
025
www.tavernier-c.com
Quando não estamos usando um motor
de passo para obter um posicionamento
preciso de um elemento de um robô,
podemos usar este como um motor de
tração, em vez dos tradicionais servos
modificados. Nesse caso, não há necessidade de contar os passos que o motor dá,
uma vez que o que queremos é que este
gire de uma forma contínua numa direção
ou em outra.
Existem várias soluções para controlar um
motor, onde algumas são apresentadas
nesta edição: usando um circuito integrado especifico para controle de motores
de passo, usando um ou mais saídas de
uma porta de um microcontrolador previamente programado, ou construir um
circuito de controle baseado em circuito
integrados lógicos convencionais.
Contudo, estas soluções estão longe de
ser perfeitas quando se pretende utilizar
um motor de passo como motor de tração.
Todos eles precisam gerar pulsos de uma
forma contínua enquanto quisermos que
o motor rode, mesmo que seja necessário
implementar um oscilador programável,
ou usar recursos do microcontrolador
principal do robô.
Decidimos então sugerir uma outra
solução para controlar este motor de
passo de modo que ele gire numa direção
ou em outra, recorrendo a simples sinais
lógicos. Como os motores de propulsão
em robôs são usados habitualmente aos
pares, vamos disponibilizar um controlador duplo, adaptando um circuito integrado bastante comum de modo a realizar
uma outra tarefa diferente.
Uma vez que um motor de passo, quando
usado para tração, não precisa ser preciso
em termos do posicionamento, e também
no que diz respeito à precisão dos passos,
os modelos simples com um único pólo
são adequados. Assim, o nosso circuito foi
projetado para usar este tipo de motores.
Isto permite controlarmos o motor através
de duas entradas lógicas TTL ou CMOS.
Quando estas duas entradas (L e R) estão
no nível lógico alto (ou em aberto) o motor
41
fica parado, mas em modo travado, dado
que estamos falando de um motor de
passo. Quando a entrada L vai para o nível
lógico zero, o motor roda numa direção,
enquanto que se a entrada R for para o
nível lógico zero ele roda na outra direção.
Se ambas as entradas estiverem no nível
lógico zero, a entrada R tem prioridade,
de forma que o motor roda nessa direção.
A velocidade de rotação do motor é
fixa, mas, como estamos fornecendo
a listagem com o código fonte do software usado nesta aplicação, é muito
simples o leitor alterar isto se não estiver
ao seu agrado, ou mesmo para incluir
a possibilidade de ajuste de velocidade externo, caso seja necessário.
O circuito da parte inteligente do nosso
controlador é apresentado na Figura
1, e como pode ver este usa um microcontrolador PIC12C508 da Microchip.
Neste caso, configurado para usar o
gerador de relógio interno e o modo
de reset do circuito, não precisando
de qualquer componente externo para
essas funções, de forma que todas as
linhas das portas estão disponíveis.
As portas paralelas GP2 e GP3 são usadas como entradas, e como GP2 não tem
resistências pull-up internas, isto é implementado por R1. As portas paralelas GP0,
GP1, GP4 e GP5 são usadas como saídas
para gerar os pulsos de controle para o
motor. Estes podem ser amplificados por
dois tipos de estágios de potência, dependendo do tipo e do número de motores a
controlar; daqui a alguns instantes vamos
dar uma olhada nesses circuitos.
O 12C508 precisa ser alimentado com
uma tensão de 5 V, derivada da alimentação do motor através de um regulador
de três pinos (IC2). Se o controlador for
apenas para um motor, ou se o motor a
controlar precisar mais de 500 mA por
enrolamento, pode ser usado o estágio
de potência apresentado na Figura 2. Este
utiliza transistores bipolares convencionais que, dadas as suas características, são
capazes de comutar correntes até 3 A. Os
diodos D1 a D8 limitam os eventuais picos
de corrente gerados pela comutação da
alimentação dos enrolamentos do motor,
protegendo desse modo os transistores.
Contudo, se o motor usado precisar menos
de 500 mA, e mais importante, se precisar
controlar dois motores deste tipo, existe
uma solução elegante e engenhosa, apresentada na Figura 3. Esta usa um circuito
integrado excitador ULN2803, usado geralmente para excitar relés, e que inclui oito
transistores Darlington de média potência
mais os respectivos diodos de proteção.
Assim, este circuito integrado é capaz de
controlar qualquer tipo de motor passo-a-passo de pólo simples, desde que a tensão não exceda os 50 V e a corrente por
enrolamento seja inferior a 500 mA.
Adicionalmente, como o ULN2803 possui oito estágios idênticos, pode ser usado
com dois controladores como o que se
pode ver na Figura 1, e, neste caso, controlar dois motores de propulsão para
robô: um na esquerda e outro na direita,
designados por MA e MB na figura.
Construir uma ou outra destas versões é
muito simples. O PIC12C508 precisa ser
programado com o arquivo objeto do
programa, que você pode encontrar no
site da Elektor, ou então no site do autor
(www.tavernier-c.com).
Se você construir o amplificador de
potência com transistor, tenha em
mente que T1-T4 não precisam de dissipador de calor desde que a corrente consumida pelo motor não
1
IC2
+U
7805
C2
C1
C3
C4
47µ
16V
10n
220n
470µ
25V
IC1
R1
1
10k
C. Tavernier
L
R
GP0
5
4
GP1
7
GP0
6
GP1
GP2/T0CK
GP3/MCLR
GP4/OSC2
GP5/OSC1
8
3
GP4
2
GP5
12C508
070302 - 11
2
3
+U
+U
D8
BD679
R1
GP0
T4
1k
L2
D1
D2
R2
GP1
10
1k
BD679
D7
T3
GP0A
GP1A
L2
D1...D8 = 1N4004
M1
L1
+U M
M
L3
R3
GP4
GP5A
GP0B
GP1B
L4
GP4B
D6
BD679
GP4A
GP5B
T2
1
2
3
4
5
6
7
8
I1
I2
I3
O1
IC1
I4
I5
I6
MA
O2
O3
O4
ULN2803
O5
O6
I7
O7
I8
O8
VEE
M
18
L3
17
L4
16
+U M
15
14
13
12
L6
11
9
1k
L1
MB
L5
M
D3
L7
D4
R4
GP5
L8
1k
BD679
T1
D5
070302 - 13
070302 - 12
Tabela 1. Programação da duração do passo,
através da alteração da constante usada no
programa.
Constante binária de
passo
Duração
10010010
1 ms
10010011
2 ms
10010100
4 ms
10010101
8 ms
10010110
16 ms
10010111
32 ms
exceda o 1 A. Caso contrário, parafuse-os a uma pequena chapa de alumínio
com alguns cm2 de área. Para simplificar
a construção mecânica, esta pode ser
comum aos quatro transistores, mas neste
caso vai precisar usar uma mica isoladora
entre o alumínio e os transistores.
Se você construir a versão baseada no
ULN2803, não existem precauções especiais, além de não exceder a corrente
máxima permitida de 500 mA.
Como estamos fornecendo a listagem completa do software programado no PIC12C508, o leitor pode
efetuar as modificações que achar
necessárias. Se você não está familiarizado com o assembler do PIC, aqui
ficam os detalhes que precisa para a alteração mais importante que possa querer
fazer: alterar a velocidade dos pulsos
de controle do motor, e assim, alterar a
sua velocidade de rotação. A palavra de
controle pode ser encontrada na Tabela 1.
Para fazer isto, você apenas precisa alterar
a constante binária na linha:
MOVLW B’10010101’
Mesmo por cima da linha que contém
OPTION na listagem do código fonte. Com
o valor original, a duração de um passo é de
8 ms, mas a tabela acima indica que constante deve usar de acordo com a duração
de passo que pretende.
(070302-1)
Artigo original: PIC12C508 Stepper Motor Controller – July/August
2007
42
Download

Controlador de motor de passo com PIC 12C508