controlo de um step motor

Transcrição

controlo de um step motor
Relatório de Microprocessadores
2007/2008
Engenharia Física Tecnológica
CONTROLO DE UM S TEP M OTOR
Laboratório III
Trabalho realizado por:
André Cunha, nº53757
João Pereira, nº 55315
Grupo 3; 5ªfeira 13:00-16:00h
Lisboa, 22 de Outubro de 2007
Introdução e Objectivos
O objectivo deste trabalho consiste em controlar um step motor através da introdução de
comandos pela consola que os envia pela porta série. O comando deverá incluir um
parâmetro para o número de steps dado pelo motor, outro para a precisão dos micro passos
dados pelo motor e ainda outro para o sentido de rotação.
Adicionalmente fazer-se-á um pequeno estudo adicional para determinar a velocidade
máxima de rotação do motor escolhido.
Implementação, Procedimento e Análise
Em termos concretos, começaremos por seleccionar um step motor disponível,
determinaremos a sequência correcta dos pinos do motor e depois as sequências binárias
para a precisão normal e dupla de forma a criar os movimentos de rotação pretendidos.
Construir-se-á então um algoritmo em C para efectuar a rotação do motor com os
parâmetros desejados e integrar-se-á isto com um sistema estruturado de recepção,
interpretação e execução de comandos atingindo-se assim o objectivo deste trabalho
laboratorial.
1ª sessão de laboratório
Material utilizado:
Step motor OEM de 6 fios;
Osciloscópio digital;
Multímetro;
Foi-nos então atribuído o step motor da figura 1. Sem entrar em detalhes sobre a estrutura
dos step motors, começou-se por determinar com que tipo de step motor se ia trabalhar através
da medição da resistência entre os vários fios. Os resultados estão expressos na seguinte
tabela para melhor visualização:
0
∞
11,3
∞
22,3
∞
∞
0
∞
11,3
∞
22,3
11,3
∞
0
∞
11,3
∞
∞
11,3
∞
0
∞
11,3
22,3
∞
11,3
∞
0
∞
∞
22,3
∞
11,3
∞
0
Tabela 1 – Resistência entre os diferentes pinos do step motor
Concluíu-se então que a estrutura do step motor usado era a seguinte:
Figura 1 – Esquemático do step motor usado
Tendo então determinado a estrutura do step motor usado, restava agora saber a sequência de
disposição das bobines internas para saber com que ordem se deve fornecer corrente
através dos terminais do step motor.
Para descobrir a sequência correcta fazer-se-á uso da Lei de Indução de Faraday. Se a
passagem de corrente através das bobines gera um campo nas bobines que induz o
movimento do núcleo magnético do motor, o processo inverso, isto é, a rotação externa
(neste caso manual) do núcleo magnético do motor (agora gerador) vai induzir corrente nas
bobines de forma sequencial, corrente essa que podemos visualizar se ligarmos os terminais
do motor (agora gerador) às pontas de prova do osciloscópio.
Visuzalizando a diferença de fase entre os vários sinais gerados, podemos então determinar
com facilidade a sequencia correcta de rotação.
Canal (osciloscópio)
Pino (step motor)
Tabela 2 – Bijecção ordenada entre pinos e canais do osciloscópio
Figura 2 – Sinais gerados no osciloscópio (sentido horário)
Por fim, estabeleceram-se as sequências binárias que irão ser usadas no programa para
controlar o step motor e que tendo em conta o princípio de funcionamento deste e os dados
recolhidos acima, se tornam imediatas. Quando queremos efectuar movimentos em
precisão simples, basta-nos fornecer corrente de forma sequencial a cada pino
correspondendo isso à sequência binária:
1000, 0100, 0010, 0001, 1000, ...
Quando queremos efectuar movimentos em precisão dulpa, criamos um estado intermédio
através do fornecimento de corrente em simultâneo a dois pinos sucessivos. Isto vai
obrigar o núcleo magnético a colocar-se numa posição intermédia entre as duas bobines
gerando assim mais precisão. A sequência é naturalmente maior devido ao aumento de
resolução:
1000, 1100, 0100, 0110, 0010, 0011, 0001, 1001, 1000, ...
E aqui se concluiu a primeira sessão de laboratório.
2ª sessão de laboratório
MPLAB IDE e compilador de C para este IDE
SDK PIC184550
Breadboard
Base de trabalho (para fornecimento de alimentação de 5V)
ULN2803
Nota: Todo o código se encontra em anexo devidamente comentado e explicado. Este
relatório explícita apenas a filosofia usada bem como as escolhas efectuadas na
implementação.
Na segunda sessão começou-se por construir o algoritmo principal do programa que será o
núcleo da função responsável pela rotação do motor. A função de rotação deverá prever a
existência de orientação, precisão e assegurar que não existem saltos entre estados não
consecutivos (saltos bruscos).
Para resolver a questão da orientação resolveu-se utilizar o sinal do número de passos a dar
pelo motor, estabelecendo o sinal positivo para rotação no sentido anti-horário e sinal
negativo para o sentido inverso.
Para o segundo ponto, apesar da primeira sequência sugerir fortemente a utilização de um
shift right/left, a segunda lista torna esta solução pouco vantajosa uma vez que não é
suficientemente geral para prever o segundo caso. Desta forma, resolveu-se utilizar listas
que serão escolhidas de acordo com o modo de rotação desejado. Este método é muito
geral e facilita a futura implementação de situações que envolvam sequências numéricas
caóticas.
Por fim, para assegurar que não temos saltos bruscos tinham-se duas hipóteses, ou guardar
sempre o último estado do motor e rodar a partir desse ponto ou obrigar o motor a
efectuar sempre um determinado número de passos que assegure que estou sempre em
situação conhecida. Por questões de conveniência e sugestão do docente, escolheu-se a
segunda opção.
Como nota adicional, convém referir que a velocidade de rotação será controlada através
de um parâmetro interno do programa utilizando uma função de delay.
A função responsável pela interpretação e armazenamento dos parâmetros de orientação,
precisão e número de passos é a função interpreterRoda. A função responsável pela execução
do ciclo de rotação é a função executeRoda.
Utilizando a estrutura básica de interrupções e comunicação via porta série dos programas
anteriores já extensivamente explicados aquando dos mesmos, construíram-se as fundações
da interacção com o utilizador deste programa.
Ao contrário do que se fez nos programas anteriores, procedeu-se finalmente a uma
estruturação em blocos de todo o programa, estrutura essa já sub-entendida na explicação
do algoritmo principal. Convém referir neste contexto que todas as variáveis de relevo
foram armazenadas em estruturas para facilitar o aproveitamento futuro deste programa
noutras aplicações ou adição de funcionalidades.
Desta forma, a função principal é agora apenas directamente responsável pela gestão
directa das consequências das interrupções geradas o que se reflecte na gestão indirecta de
comandos. O ponto mais importante desta gestão indirecta que liga o algoritmo principal à
interacção com o utilizador, é feita através da função findCommand que trata da gestão dos
comandos introduzidos a pedido da função principal.
Regressando ao procedimento laboratorial propriamente dito, consultou-se então a datasheet
do ULN2803 que se vai usar como amplificador dos sinais lógicos que provêm do nosso
CPU para o step motor.
Efectuaram-se as ligações aos outputs do CPU para as entradas do ULN2803, ligaram-se as
suas saídas ao step motor de acordo com a ordem determinada na primeira sessão laboratorial
e por fim ligou-se a alimentação ao ULN2803 e também ao ponto comum do step motor
tendo o cuidado de usar uma resistência em série para protecção do motor.
Figura 3 – Pequeno esquemático de ligações entre ULN2803, step motor e alimentação
Finalmente, correu-se o programa utilizando o ambiente de desenvolvimento MPLAB e
testou-se o motor tendo este funcionado como previsto.
Por fim, para determinação da velocidade máxima de operação do step motor, conhecendo o
comportamento caótico das bobines aquando da recepção de sinais eléctricos e que apenas
estabilizam passado um determinado período de tempo, é nosso objectivo determinar este
limite, uma vez que representa o momento a partir do qual temos a certeza de que as
bobines se comportam correctamente assegurando o funcionamento eficiente do motor.
Com a utilização de um osciloscópio para medir a diferença entre steps lógicos consecutivos
bem como para visualizar o comportamento de uma das bobines do step motor, rapidamente
se verificou que as velocidades limite se encontravam utilizando delays de entre 5000 a
10000 ciclos de relógio.
Percorrendo estes valores conclui-se que o valor limite era de 6000 ciclos de relógio por
step, ou seja, tendo em conta que se usa um clock de 4 MHz , temos então que o tempo
mínimo de cada micro step é de 1,5 ms.
Figura 4 – Sinais da bobine e de dois steps consecutivos a 5000 ciclos de relógio (irregular)
Figura 5 – Sinais da bobine e de dois steps consecutivos a 6000 ciclos de relógio (limite)
Figura 6 – Sinais da bobine e de dois steps consecutivos a 10000 ciclos de relógio (estável)
Figura 7 – Sinais da bobine e de dois steps consecutivos a 50000 ciclos de relógio (estável)

Documentos relacionados