Índice:

Dirija um motor de passo com um microprocessador AVR: 8 etapas
Dirija um motor de passo com um microprocessador AVR: 8 etapas

Vídeo: Dirija um motor de passo com um microprocessador AVR: 8 etapas

Vídeo: Dirija um motor de passo com um microprocessador AVR: 8 etapas
Vídeo: CONTROLE DE MOTOR DE PASSO POR PROTOCOLO | Vídeo Aula #470 2024, Julho
Anonim
Dirija um motor de passo com um microprocessador AVR
Dirija um motor de passo com um microprocessador AVR

Tem alguns motores de passo eliminados de impressoras / unidades de disco / etc por aí?

Faça algumas sondagens com um ohmímetro, seguido por um código de driver simples em seu microprocessador e você entrará em ação com estilo.

Etapa 1: Conheça os Steppers

Conheça os Steppers
Conheça os Steppers
Conheça os Steppers
Conheça os Steppers

Basicamente, você precisará descobrir para onde vão todos os pequenos fios.

O primeiro passo é descobrir se é um motor unipolar ou bipolar. Dê uma olhada em Jones on Steppers para obter informações mais detalhadas, e no Site de Ian Harries para obter um método simples de descobrir um motor desconhecido. Leia um pouco e junte-se a mim para dar uma olhada neste motor que comprei barato. (Eles estão à venda por US $ 0,99 no momento. Eles são pequenos, relativamente leves, mas não têm muito torque. Não sei para que servirão ainda.)

Etapa 2: Encontre um terreno comum

Encontre um terreno comum
Encontre um terreno comum
Encontre um terreno comum
Encontre um terreno comum

Então você tem cinco (ou quatro ou seis) fios. Seu motor terá duas metades e você provavelmente pode até dizer apenas olhando a qual lado cada fio pertence.

Se você está olhando apenas para quatro fios, está com sorte - é um motor bipolar. Tudo que você precisa fazer é descobrir quais dois pares de fios vão juntos. Se você tiver um motor unipolar, ou mais de 4 fios, terá que quebrar o seu ohmímetro. O que você está procurando é o fio comum (terra) para cada metade. Você pode dizer qual é o aterramento em um motor bipolar porque ele tem metade da resistência para qualquer um dos pólos do que os pólos têm entre si. Na foto estão minhas anotações de conectar fios em fios e observar a resistência (ou se eles estão conectados). Você pode ver que o Branco é o aterramento para o trio inferior b / c ele tem metade da resistência ao Vermelho ou Azul que eles têm entre si. (Este motor é estranho e não tem uma derivação central na bobina do ímã superior. É como se fosse meio bipolar, meio unipolar. Talvez você pudesse usar isso para detectar a rotação na bobina Vermelho-Branco-Azul quando o Preto-Amarelo a bobina está sendo acionada.)

Etapa 3: descobrir a ordem escalonada

Descobrir a ordem escalonada
Descobrir a ordem escalonada

Eu ia dirigir este motor como um bipolar, então estou ignorando o fio terra Branco. Eu só tenho quatro fios para me preocupar.

Você pode querer operar seu motor unipolar como bipolar de qualquer maneira, porque ele usa a bobina inteira em ambas as fases, em vez de alternar entre as duas metades de cada bobina. Mais bobina = mais torque. Passe a corrente por um par (observando a polaridade que você escolheu) e, em seguida, passe a corrente pelo outro par ao mesmo tempo. Ao conectar o segundo par, observe para que lado o motor gira. Escreva isso. Agora inverta a polaridade do primeiro par que você escolheu. Em seguida, conecte o segundo par novamente com a polaridade também invertida. Observe a direção. A partir disso, você deve ser capaz de descobrir a sequência de rotação do motor em qualquer direção. No meu exemplo, ambos acabaram girando no sentido anti-horário, portanto, percorrer a sequência da mesma maneira que escolhi acelera o motor no sentido anti-horário.

Etapa 4: levando o motor para um test drive

Tomando o motor para um test drive
Tomando o motor para um test drive

Se você ainda não está preparado para a programação de microprocessadores, pode se sair pior do que o Ghetto Development Kit ou qualquer um dos vários programadores PIC. Conecte os fios diretamente ao seu microproc e queime-o com o seguinte código:

/ * Brincando com o acionamento dos pequenos motores de passo. * /

/ * Incluir função de atraso * / #define F_CPU 1000000UL #include / * Defs de pino para ATTiny2313 * / / * Ordem horária * / #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define YELLOW _BV (PB3) #define DELAY 200 / * milissegundos entre as etapas * / int main (void) {DDRB = 0xff; / * Habilita saída em todos os pinos B * / PORTB = 0x00; / * Defina-os todos para 0v * / while (1) {/ * loop principal aqui * / PORTB = BLUE; _delay_ms (DELAY); PORTB = PRETO; _delay_ms (DELAY); PORTB = VERMELHO; _delay_ms (DELAY); PORTB = AMARELO; _delay_ms (DELAY); }} Quão simples é esse código? Muito simples. Tudo o que ele faz é fazer algumas definições agradáveis para que eu possa me referir aos fios por cor em vez de seus nomes de pinos, e então os ativa em sequência com um atraso ajustável entre eles. Para começar, selecionei um atraso de meio segundo entre as etapas. Veja o pequeno vídeo para os resultados. Se você estiver realmente no seu jogo, conte o número de passos por ciclo para descobrir a resolução angular de passo único do motor. (Ah, sim. PS. Dirige facilmente sem carga a 3,6 V. Veja a bateria no vídeo.)

Etapa 5: balançar para trás e para frente

Então você tem que rodar no sentido horário. Algo mais interessante? Uma pequena limpeza de código e podemos executá-lo para frente e para trás. Coloquei a sequência no sentido horário em uma matriz para que você possa percorrer as fases com um loop for simples. Agora você pode executar o loop para cima ou para baixo para ir no sentido horário ou anti-horário.

int main (vazio) {const uint8_t delay = 50; const uint8_t no sentido horário = {AZUL, PRETO, VERMELHO, AMARELO}; uint8_t i; DDRB = 0xff; / * Habilita saída em todos os pinos B * / PORTB = 0x00; / * Defina-os todos como 0v * / while (1) {/ * loop principal aqui * / for (i = 0; i <= 3; i ++) {/ * percorra as cores no sentido horário * / PORTB = sentido horário ; _delay_ms (delay); } para (i = 3; i> = 0; i -) {/ * percorrer as cores em sentido horário * / PORTB = sentido horário ; _delay_ms (delay); }}} Veja o vídeo atrevido para ver o que está por vir.

Etapa 6: Nunca meio passo, porque não sou meio-passo …

Deixando a letra da Quest de lado, é preciso acelerar o ritmo do seu motor. Você obtém mais corrente de pico, torque mais instantâneo e duas vezes a resolução angular. Resumindo: em vez de Azul, Preto, Vermelho, Amarelo, você dirige o motor com Azul, Azul + Preto, Preto, Preto + Vermelho, Vermelho, Vermelho + Amarelo, Amarelo, Amarelo + Azul. O resultado é que, na metade do tempo, você envolve os dois ímãs ao mesmo tempo. E durante os tempos em que os dois conjuntos estão engatados, o motor aponta a meio caminho entre os dois, diminuindo o ângulo entre os "passos" e fazendo o motor girar mais suavemente. Você pode dizer pelo vídeo? Não tenho certeza … Agora, a parte do código que faz a etapa intermediária se parece com isto:

void halfStepping (atraso uint16_t, direção uint8_t ) {uint8_t i; para (i = 0; i <= 3; i ++) {PORTB = direção ; / * parte de bobina única * / _delay_ms (atraso); PORTB | = direção [i + 1]; / * adicionar meio passo * / _delay_ms (delay); }} O primeiro comando PORTB define um único pólo como positivo e todo o resto como negativo. Então ele espera. Em seguida, o segundo comando PORTB define um segundo pólo (no outro enrolamento) para positivo, envolvendo ambos os enrolamentos para 1,4x o torque (e 2x a corrente). Uma lista completa do programa está anexada abaixo. Duas matrizes estão agora definidas (sentido horário, anti-horário) e ambas têm 5 elementos cada para permitir a entrada i + 1 na função halfStepping.

Etapa 7: Adicionar um driver de motor

Adicionar um driver de motor
Adicionar um driver de motor
Adicionar um driver de motor
Adicionar um driver de motor
Adicionar um driver de motor
Adicionar um driver de motor

Até agora tudo bem.

O único problema é que o motor não parece ter tanto torque, o que pode ser devido ao fato de que o microprocessador só irá produzir ~ 50mA por pino. O próximo passo óbvio seria conectá-lo a um motorista de motor para abastecê-lo com mais energia. Mas então, pensando um pouco: só estou dirigindo com 5v e a resistência do enrolamento da bobina é de aproximadamente 125 ohms. O que significa que o motor está consumindo apenas 40mA por pino e deve ser acionado perfeitamente pelo (robusto!) Chip AVR. Portanto, para obter mais voltagem acionando o motor, conectei-o a um chip ponte H SN754410. O circuito é bem simples. Cada pino do AVR vai para uma entrada e os pinos de saída correspondentes vão para o motor. O chip precisa de 5 V para a seção lógica e pode receber muito mais tensão na seção do motor. Executá-lo em 11,25 V (três baterias de 3,6 V) ajudou um pouco. Visivelmente mais torque no meu dedo, mas ainda não é uma potência. Nada mal para um motor menor do que um níquel. E agora o circuito se tornou um driver de motor de passo bipolar de uso geral. Adicionado 29 de novembro: Funcionou o motor ontem à noite a 12v por um tempo e começou a ficar quente. Não tenho certeza se era um problema de frequência de ressonância ou se era simplesmente muita corrente para os enrolamentos. De qualquer forma, tenha um pouco de cuidado se estiver dirigindo este pequeno motor com tensões maiores.

Etapa 8: Fim

Então, o que eu aprendi? Conduzir um motor de passo com um AVR (e um chip ponte H) é muito fácil, mesmo no modo de meio passo "sofisticado".

Não tenho certeza do que vou fazer com os pequenos motores de passo ainda, no entanto. Alguma sugestão?

Recomendado: