Table of Contents

Motores

Relacionado com: [HW] Módulo de Motores

Esta biblioteca contém funções para controlar diferentes motores no HomeLab. Existem funções para motores DC, stepper e servomotores.

Tipos

  • prescale
    Enumeração de tipos de prescaler de relógios PWM. Determina o factor de divisão do sistema de relógio. É recomendado o uso dos dois primeiros factores de divisão. Opções:
    • TIMER2_NO_PRESCALE - Sem uso de factor de divisão.
    • TIMER2_PRESCALE_8 - Factor de divisão 8.
    • TIMER2_PRESCALE_64 - Factor de divisão 64.
    • TIMER2_PRESCALE_256 - Factor de divisão 256.
    • TIMER2_PRESCALE_1024 - Factor de divisão 1024.

Funções

  • void dcmotor_init(unsigned char index)

Inicializa um dos controladores de motor DC. Parâmetros:

  • index - Indíce do controlador do motor. 0 a 3.
  • void dcmotor_drive(unsigned char index, signed char direction)

Alimenta um dos controladores de motor DC. Parâmetros:

  • index - Indíce do controlador do motor. 0 a 3.
  • direction - Polaridade do motor. -1, 0 ou +1. No caso do 0 o motor é parado, caso contrário o motor é accionado na direcção dada.
  • void dcmotor_drive_pwm_init(unsigned char index, timer2_prescale prescaler)
    Inicializa um dos controladores de motor DC para controlo de velocidade. Adicionalmente, pode definir-se um prescaler adequado, dependendo da frequência do PWM que se precisa. Parâmetros:
    • index - Indíce do controlador do motor. 0 a 3.
    • prescaler - Selecção do prescaler do relógio. As interrupções podem ocorrer de forma muito rápida e perturbar o programa. Por exemplo, quando sensor UH é usado, é necessário configurar o prescaler para TIMER2_PRESCALE_8.
  • void dcmotor_drive_pwm(unsigned char index, signed char direction, unsigned char speed)

Alimenta um dos controladores de motor DC. O motor roda numa dada direcção e velocidade Parâmetros:

  • index - Indíce do controlador do motor. 0 a 3.
  • direction - Polaridade do motor. -1 ou +1.
  • speed - Velocidade do motor. 0 a 255. Para 0 o motor pára e para 255 o motor está na velocidade máxima.
  • void unipolar_init(unsigned char index)

Inicializa o controlador de um dos motores stepper. Parâmetros:

  • index - Indíce do controlador do motor. 0 ou 1.
  • void unipolar_halfstep(unsigned char index, signed char direction, unsigned short num_steps, unsigned char speed)

Comando de meio passo para um motor stepper unipolar. Esta função bloqueia o processador até os passos estarem concluídos. Parâmetros:

  • index - Indíce do controlador do motor. 0 ou 1.
  • direction - Direcção de rotação. -1 ou +1.
  • num_steps - Contagem de meios passos.
  • speed - Tempo de um passo em milisegundos.
  • void bipolar_init(void)

Inicializa o controlador de um motor stepper bipolar.

  • void bipolar_halfstep(signed char direction, unsigned short num_steps, unsigned char speed)

Comando de meio passo para um motor stepper bipolar. Esta função bloqueia o processador até os passos estarem concluídos. Parâmetros:

  • direction - Direcção de rotação. -1 ou +1.
  • num_steps - Contagem de meios passos.
  • speed - Tempo de um passo em milisegundos.
  • void servomotor_init(unsigned char index)

Inicializa as unidades de geração de sinal PWM de um servomotor no timer 1 do ATmega128. O sinal PWM é de 50 hz com período elevado a 1.5 ms ± 0.5 ms. Parâmetros::

  • index - Indíce do servomotor. 0 ou 1.
  • void servomotor_position(unsigned char index, signed short position)

Comando de controlo da largura do pulso do servomotor. Se o posicionamento do servomotor é executado, a sua posição é alterada, se é rodado, a sua velocidade de rotação é alterada. Parâmetros:

  • index - Indíce do servomotor. 0 ou 1.
  • position - Posição ou velocidade de rotação. -100 a +100. 0 corresponde a paragem.

Exemplo

O programa seguinte demonstra o uso de motores DC, stepper e servomotores.

#include <homelab/module/motors.h>
 
int main(void)
{
	// DC motors initialization.
	dcmotor_init(0);
	dcmotor_init(1);
 
	// Bipolar stepper initialization.
	bipolar_init();
 
	// Servo motors initialization.
	servomotor_init(0);
	servomotor_init(1);
 
	// One DC motors drives forward, another in backward direction.
	dcmotor_drive(0, -1);
	dcmotor_drive(1, +1);
 
	// Rotating the stepper motor 100 steps in one direction
	// and then back with twice the speed.
	bipolar_halfstep(1, 100, 50);
	bipolar_halfstep(-1, 100, 25);
 
	// Rotating servo motors in opposite directions.
	servomotor_position(0, -100);
	servomotor_position(1, +100);
}

Este exemplo demonstra o ajustamento da velocidade para um motor DC.

#include <homelab/module/motors.h>
 
int main(void)
{
        unsigned char speed = 0;
 
	// DC motors initialization
  	dcmotor_drive_pwm_init(0, TIMER2_NO_PRESCALE);
 
  	while(1)
  	{   	
		speed = 100;
 
		// DC motors drives predefined speed and direction.
		dcmotor_drive_pwm(0, 1, speed);			      
  	}
}
pt/software/homelab/library/module/motor.txt · Last modified: by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0