Motor de Passo Funcionando
motores de passo
Se você tiver curiosidade, indico um vídeo produzido por alunos da UNIVASF que explica de modo bem interessante, o funcionamento de um motor de passo, com bobinas, corrente elétrica e uma bússola.
Motor de passo, o que é?
(trecho tirado daqui)
Um motor de passo é um tipo de motor que como o nome indica, roda em "passos", ou seja em ângulos certos (por norma, escrito no próprio motor).
Para fazer um passo, deve-se fazer passar bastante corrente pelas bobinas do motor, de modo a criar um campo magnético e a atrair um dos dentes do eixo.
Na figura, retirada daqui, temos em 1, 2, 3 e 4, solenóides (bobinas) nos quais se passa certa corrente elétrica, de forma que se cria um campo eletromagnético, o qual o atrai os dentes da peça contendo o solenóide em direção a engrenagem, de forma que quando cada solenóide for ativado, a cada passo, se tem o movimento da engrenagem para a direção do passo seguinte. Desta forma temos a seguinte configuração:
Este desenho é from Wikipedia (embora eu tenha alterado um pouco...)
- Em I - O solenóide do topo (1) esta ativado, atraindo o dente superior do eixo.
- Em II - O solenóide do topo (1) é desativado, e o solenóide da direita (2) é ativado, movendo o quarto dente mais próximo à direita. Isto resulta em uma rotação de 3.6°.
- Em III - O solenóide inferior (3) é ativado; outra rotação de 3.6° ocorre
- Em IV - O solenóide à esquerda (4) é ativado, rodando novamente o eixo em 3.6°. Quando o solenóide do topo (1) for ativado novemante, o eixo terá rodado em um dente de posição, como existem 25 dentes, serão necessários 100 passos para uma rotação completa.
O motor utilizado é o M35SP-7T (folha de dados do motor)da MITSUMI.
Pela folha de dados:
Notamos que:
- Possui 4 fases, sendo
- 50 ohms/fase (entre 46,5 ohms e 53,5 ohms)
- 7,5°/passo
- Excitação de 2 em 2 fases - motor unipolar
Isso quer dizer que:
- dos 5 fios que saem do motor de passo (pela ordem laranja, amarelo, marrom e preto, correspondendo às 2 bobinas):
- 2 vão ficar com uma tensão mais elevada e
- 2 com uma mais baixa (neste caso a GND).
- Além disso, mais 1 fio (vermelho) segue para alimentação externa (no caso, em geral 18V, mas podendo chegar a 24V)
Cabe colocar aqui que, pela folha de dados do motor, a indutância de suas bobinas é de 50R/fase, assim, para alimentá-lo com 18V temos que ter no mínimo 360mA/fase. Ou seja, para as 4 fases, ao todo, deveremos ter, ao mínimo, 1,4A (!!!!), que é uma intensidade de corrente bem elevada.
A corrente que deve passar pelo motor para acioná-lo de nenhum modo poderáser dada pelo Arduino (nele, a corrente é de 40mA por porta), de modo que para acionar o motor, é necessário aumentar o sinal de corrente que sai do Arduino e chega ao motor.
Mas como se faz isso? - CI's
É necessário usar o que chamamos de CI (circuito integrado, como o mostrado acima), um componente que associa diferentes transistores SMD em paralelo, de modo a permitir aumento de tensão, corrente, regular sinal, etc..., conforme a necessidade do projeto.
Neste caso, pode-se utilizar o que é chamado de ponte H (um conjunto de transistores associados de modo a não permitir correntes de fuga):
Ponte H (CI L293D) associado ao motor de passo, vista no programa Fritzing, (acima, à esquerda) e à direita imagem real do CI.
Ou um CI chamado ULN 2003A (datasheet aqui), que basicamente aumenta o sinal de corrente que sai do Arduino e vai chegar no motor, e ao quals e pode associar o sinal de tensão de 18V sem prejudicar o funcionamento do Arduino:
Ao centro, imagem do CI ULN2003A
O CI que utilizamos foi o ULN2003A, devido a questões financeiras e porque em termos de arranjo no experimento ocupa menos espaço e é mais fácil associar os fios. Na ligação com o motor fica mais ou menos assim:
No lado esquerdo da imagem acima, CI ULN2003A mostrado em detalhe, observa-se do lado esquerdo do CI, os cabos se ligam ao motor e do direito do CI ao Arduino nos pinos em que se deseja realizar o movimento, podendo variar também a velocidade do motor de passo. Para este teste (o da imagem) foi utilizado um diferente do Mitsumi do resultado final, mas com as mesmas especificações. Ao lado direito, imagem mostrando a ligação de um motor de passo ao CI e do CI ao Arduino.
Falando em associação dos fios entre motor e CI ULN2003A e entre CI e arduino, esta ordem de fios ocorre assim:
No caso do motor utilizado, a ordem dos fios é esta
Cor do
fio
|
Motor de
Passo – CI
|
CI –
Arduino
|
Laranja
|
16
|
8
|
Amarelo
|
15
|
9
|
Marrom
|
14
|
10
|
Preto
|
13
|
11
|
Vermelho
|
9
|
---
|
Modos de Operação
Os modos de operação variam conforme a necessidade de uso do motor de passo. Por exemplo, no caso do experimento implementado, temos um Conversor de Frequência, associado a estrutura da cabeça de leitura do scanner, o qual deve varrer a extensão dos comprimentos de onda do espectro projetado pela rede de difração. (Veremos adiante sobre redes de difração, e indicamos que acesse a aba Teoria com Simuladores).
Para tanto, a velocidade do motor de passo deve ser baixa o suficiente para que ele trabalhe com precisão suficiente. Isso porquê, os números de passos que a cabeça de leitura do scanner desloca, deve resultar em um intervalo de distância baixo. Com isso, podemos fazer a coleta do comprimento de onda proporcionalmente precisa.
Sendo assim, nos testes e no resultado final usamos um Arduino MEGA, o CI ULN2003A, motor de passo Mitsumi M35SP-7.
Nas imagens acima,
temos a montagem do motor associado ao ci e este ao arduino. Na imagem de
baixo, detalhe do ci montado em um soquete de 8 16 pinos, e com cabos
conectados.
Para o controle da ida e da volta da cabeça de leitura, basta fazer o motor gira no sentido anti-horário (frente), e a cabeça de leitura faz a ida, ou para o sentido horário (para trás), na qual a cabeça de leitura volta.
O programa para isso é bastante simples:
const int stepsPerRevolution = 50; // muda o ajuste de passo por revolução do motor
char leitura; //comando para o arduino associar a leitura do teclado
Stepper myStepper(stepsPerRevolution, 4,5,6,7); // inicia a biblioteca do motor de
//passo nos pinos 4 a 7, de modo que a
//função "stepsPerRevolution" dará o
//comando de cada uma das portas
//digitais associadas para o motor girar
//ou para o sentido anti-horário ou
//horário:
//horário:
void setup() {
myStepper.setSpeed(50); // ajusta a velocidade de giro do motor para 50 rpm:
Serial.begin(9600); // inicia comunicação com a porta serial :
}
void loop() {
leitura = Serial.read();
// uma volta para trás:
if(leitura == 't') {
myStepper.step(stepsPerRevolution); //comando para acionar passos para trás
Serial.println("clockwise = tras"); //imprime o comando "para trás"
delay(5); //espera 5ms.
}
if(leitura == 'f') {
myStepper.step(-stepsPerRevolution); //comando para acionar os passos para frente
Serial.println("anti-clockwise = frente"); // imprime o comando "para frente"
delay(5); //espera 5ms.
}
}
Como quero atingir uma velocidade baixa, tenho que manter o ajuste de velocidade em um número baixo, e posso utilizar um baixo tempo de espera, pois o motor de passo terá força para arrancar com esta velocidade.
Desta forma consigo manter velocidade baixa, sem sobrecarga do motor (deste que os fios estejam corretamente ligados, evitando superaquecimento, e retorno de corrente), e faço com que a cabeça de leitura se mova a passos curtos e consiga coletar mais informação.
Mais detalhes de como funciona um motor de passo, você encontra na aba Espectrofotômetro: Componentes
No próximo item veremos como é realizado o cálculo do comprimento de onda através do motor de passo
ta dando erro de nome da terceira linha
ResponderExcluirEsse é o erro `Stepper does not name a type esse é o erro no arduino uno
ResponderExcluir