====== Motor de passo ======
//Conhecimento prévio:
[HW] [[en:hardware:homelab:combo]],
[AVR] [[en:avr:io]],
[LIB] [[en:software:homelab:library:module:motor]], \\
[LIB] [[en:software:homelab:library:delay]]//
===== Teoria =====
[{{ :examples:motor:stepper:stepper.jpg?220|Motor de passo}}]
Motores de passo são amplamente utilizados em aplicações que exigem precisão. Ao contrário de motores DC, os motores de passo não têm escovas ou comutador - eles têm várias bobinas independentes, que são comutadas com eletrônicas externas (drivers). Rodar o rotor é feito por comutação de bobinas passo a passo, sem feedback. Esta é uma das falhas dos motores de passo - em caso de sobrecarga mecânica, quando o rotor não está girando, os passos são misturadas e o movimento torna-se impreciso. Dois tipos de motores de passo são distinguidos por bobinas: motores de passo unipolar e bipolar. Por construção três segmentos adicionais são considerados:
* Passo de relutância váriável (alta precisão, baixo torque, baixo preço)
* Passo de ímã permanente (baixa precisão, alto torque, baixo preço)
* Passo híbrido síncrono (alta precisão, alto torque, alto preço)
Motores de passo de relutância variável tem rolamentos dentados e rotor de ferro dentado. A maior força de tracção ocorre quando os dentes de ambos os lados estão cobrindo o outro. O motor de passo de ímã permanente, tal como o nome indica, são ímãs permanentes que orientam de acordo com a polaridade dos enrolamentos. Em motores de passo híbrido síncrono são usadas ambas as tecnologias.
Dependendo do modelo do motor de passo, realizando uma rotação completa (360 graus) do rotor, exige centésimos de passos de comutações. Para o movimento estável e suave, são usados sistemas eletrônico de controle apropriados que controlam o motor de acordo com os seus parâmetros (inércia do rotor, torque, ressonância etc.). Em adição à electrônica de controle, diferentes métodos de comutação podem ser aplicados. Comutando um enrolamento numa fila é chamado passo completo, se a unidade é alternada entre um e dois enrolamentos é chamado meio passo. Micro passos de cosenos também é utilizado, permitindo controlo especialmente preciso e suave.
**Motor passo unipolar**
O motor de passo unipolar tem 5 ou 6 derivações. De acordo com o esquema do motor apenas ¼ dos enrolamentos são ativados. Linhas //Vcc// são normalmente conectadas à fonte de alimentação positiva. Durante a comutação as extremidades dos enrolamentos 1a, 1b, 2a e 2b são conectados através de transistores apenas para o chão e isso faz com que os seus aparelhos eletrônicos de controle sejam bastante simples.
**Motor passo bipolar**
[{{ :examples:motor:stepper:motor_stepper_unipolar.png?250|Enrolamentos de um motor de passo unipolar.}}]
[{{ :examples:motor:stepper:motor_stepper_bipolar.png?250|Enrolamentos de um motor de passo bipolar.}}]
O Motor de passo bipolar difere do unipolar por ter a polaridade dos enrolamentos alterada durante a comutação. Metade dos enrolamentos são activados ao mesmo tempo, isto permite ganhar maior eficiência do que motores de passo unipolar. Motores de passo bipolar têm quatro ligações, cada uma ligada a uma meia-ponte diferente. Durante a comutação meias-pontes estão aplicando tensão positiva ou negativa às extremidades dos enrolamentos. Motores unipolares podem ser iniciados usando o driver bipolar: basta conectar linhas 1a, 1b, 2a e 2b dos enrolamentos (//Vcc// não será conectado).
A comutação necessária para o controle de motores de passo com enrolamentos em modo de passo completo e modo de meio passo é apresentado na tabela em baixo. Uma vez que nos drivers de motores de passo unipolar só ocorre abertura dos transistores, os passos são marcados por 0 e 1. O controle dos motores de passo bipolare podem precisar de mais sinais e, portanto, os passos são marcados usando a polaridade das saídas de driver:
^ ^ Unipolar ^^^^ Bipolar ^^^^
^ Passo ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^
^ Passo completo ^^^^^^^^^
| 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - |
| 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - |
| 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - |
| 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + |
^ Meio passo ^^^^^^^^^
| 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - |
| 2 ^ 1 ^ 1 | 0 | 0 ^ + ^ + | - | - |
| 3 | 0 ^ 1 | 0 | 0 | - ^ + | - | - |
| 4 | 0 ^ 1 ^ 1 | 0 | - ^ + ^ + | - |
| 5 | 0 | 0 ^ 1 | 0 | - | - ^ + | - |
| 6 | 0 | 0 ^ 1 ^ 1 | - | - ^ + ^ + |
| 7 | 0 | 0 | 0 ^ 1 | - | - | - ^ + |
| 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + |
===== Prática =====
O Módulo combinação tem pontes-H para controlar motores de passo bipolares e a matriz de transistores para motor de passo unipolar.
Existem funções //bipolar_init// e //unipolar_init// na biblioteca do HomeLab que definem os pinos de saída e funções // bipolar_halfstep// e //unipolar_halfstep// que executam rotações por meio passos determinados. A comutação é feita por tabela de meios passos, mas as operações de bit mais complexas são utilizadas. Motor de passo unipolar está ligado a um conector separado //Passo unipolar//, motor passo bipolar é conectado a um conector de motor DC, em que um dos motores bipolares ocupam pinos de driver de dois motor DC. A seção de código a seguir são funções de biblioteca HomeLab II (ATmega2561).
// Preparing for controlling the bipolar stepper motor
void bipolar_init(void)
{
DDRB |= 0x0F;
PORTB &= 0xF0;
}
// Moving the bipolar stepper motor by half steps
void bipolar_halfstep(signed char dir,
unsigned short num_steps, unsigned char speed)
{
unsigned short i;
unsigned char pattern, state1 = 0, state2 = 1;
// Insuring the direction +- 1
dir = ((dir < 0) ? -1 : +1);
// Execution of half-steps.
for (i = 0; i < num_steps; i++)
{
state1 += dir;
state2 += dir;
// Creating the pattern
pattern = (1 << ( (state1 % 8) >> 1) ) |
(1 << ( (state2 % 8) >> 1) );
// Setting the output.
PORTB = (PORTB & 0xF0) | (pattern & 0x0F);
// Taking a break to wait for executing the step
sw_delay_ms(speed);
}
// Stopping the motor
PORTB &= 0xF0;
}
Uso das funções é demonstrado no programa exemplo que roda o motor alternadamente numa direcção e, em seguida para a outra, 200 passos. A velocidade de rotação do motor é determinada pelo comprimento dos travões feitos entre as etapas. Se o intervalo é definido para ser demasiado curto, o motor não pode realizar a sua vez, devido à inércia do rotor e o veio não se move.
// The test program for the stepper motor of the HomeLab
#include
// Main program
int main(void)
{
// Set up of the motor
unipolar_init(0);
// Endless loop
while (true)
{
// Turning the rotor 200 half steps to one direction
// at speed of 30 ms/step.
unipolar_halfstep(0,+1, 2000, 30);
// Turning 200 half steps to the other direction
// at speed 30 ms/step.
unipolar_halfstep(0,-1, 2000, 30);
}
}