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)