This is an old revision of the document!


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)

Initializes one of a servo motor PWM signal generations units in ATmega128 timer 1. PWM signal is 50 hz with high period of 1.5 ms ± 0.5 ms. Parameters:

  • index - Index of servo motor. 0 or 1.
  • void servomotor_position(unsigned char index, signed short position)

Servo motor pulse width control command. If positioning servo motor is driven, its position is altered, if rotating one, its rotation speed is altered. Parameters:

  • index - Index of servo motor. 0 or 1.
  • position - Position or rotation speed. -100 to +100. 0 corresponds to stop.

Example

The following program demonstrates the usage of DC, stepper and servo motors.

#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);
}

This example demonstrates the speed adjustments of a DC motor.

#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.1449675773.txt.gz · Last modified: (external edit)
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