This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| pt:examples:motor:stepper [2015/12/14 18:13] – Criação deste novo documento. artica | pt:examples:motor:stepper [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Motor de passo ====== | ||
| + | // | ||
| + | [HW] [[en: | ||
| + | [AVR] [[en: | ||
| + | [LIB] [[en: | ||
| + | [LIB] [[en: | ||
| + | |||
| + | ===== Teoria ===== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | |||
| + | 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, | ||
| + | * 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** | ||
| + | |||
| + | [{{ : | ||
| + | [{{ : | ||
| + | |||
| + | 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, | ||
| + | |||
| + | ^ ^ | ||
| + | ^ 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 // | ||
| + | |||
| + | <code c> | ||
| + | // 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. | ||
| + | |||
| + | <code c> | ||
| + | // 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, | ||
| + | |||
| + | // Turning 200 half steps to the other direction | ||
| + | // at speed 30 ms/step. | ||
| + | unipolar_halfstep(0, | ||
| + | } | ||
| + | } | ||
| + | </ | ||