Circuitos_1

Hoje irão ser construídos dois circuitos para controlar motores Unipolares.

Um motor unipolar é um tipo de motores de passo (Step) descrito como necessitando apenas uma fonte de corrente. Por oposição os motores bipolares requerem duas fontes de corrente para se moverem.

A complexidade deste tipo de motores é que são alimentados por fontes de corrente DC e requerem circuitos digitais para que as sequências de energização sejam accionadas na ordem certa. O Feedback nem sempre é necessário para o controlo, e este pode ser garantido através do uso de encoders que garantem a precisão. São motores que são habitualmente usados quando se requer precisão em detrimento da velocidade.

Tipicamente os motores Unipolares têm 5 ou 6 fios. Quando têm 5 significa que o fio de corrente está ligado internamente às duas bobines.

Para controlar o motor iremos usar um IC ULN2003A que é uma array darlington. Este pode fazer sink até 500mA por pino.

Um transístor Darlington é uma configuração de dois transístores NPN bipolares que permitem que haja amplificação da corrente por ambos os transístores. Existem mesmo deste tipo de transístores para poupança de espaço. Este tipo de transístor tem o nome do seu inventor Sidney Darlington. O IC ULN2003A além da configuração de transístor Darlington tem adicionalmente diodo de supressão de cargas indutivas e está preparado para funcionar com tensões de 3.3V ou 5V. É um integrado muito interessante para utilizações onde é necessário fazer o sink da corrente.

O primeiro circuito que será construído irá usar 4 pinos do micro-controlador. O segundo irá usar apenas 2 pinos.

Dica:

  • Pode igualmente usar-se um IC alternativo que é o ULN2803A que tem 8 transístores Darlington.

Sequência para 4 pinos (Rotação positiva):

TempoP1P2P3P4
11100
20110
30011
41001

Sequência para 2 pinos (Rotação positiva):

TempoP1P2
101
211
310
400

Para mover o motor na direção contrária deverá aplicar-se a sequência do fim para o principio.

Esquemático

Este é o circuito que usa 4 pinos do micro-controlador:

Circuitos_3_Schematics

Este circuito usa apenas 2 pinos do micro-controlador:

Circuitos_3_Schematics

Componentes (BOM)

Circuito 1:

  • 1x IC ULN2003A
  • 2x Resistência de 470 Ohms (R1,R2)
  • 1x LED de 5mm Vermelho (D1)
  • 1x LED de 5mm Verde (D2)
  • 1x Motor Unipolar 28BYJ48 DC 5V (M1)

Circuito 2:

  • 1x IC ULN2003A
  • 4x Resistência de 1K Ohms (R3-R6)
  • 2x Resistência de 470 Ohms (R1,R2)
  • 1x LED de 5mm Vermelho (D1)
  • 1x LED de 5mm Verde (D2)
  • 1x Motor Unipolar 28BYJ48 DC 5V (M1)

O motor usado para as experiências foi o 28BYJ48 DC 5V
Este motor tem a particularidade de o fio 2 e 3 estarem trocados. Sendo a sequência 1,3,2,4.
A alimentação do motor é feita no pino COM do IC.

Pin-out dos IC/Componentes

Circuitos_4_Pinout

Código

Os sketch devem ser carregados num Arduino através do seu IDE (foi usada a versão 1.6.6).
Nos sketchs foi usada a biblioteca Stepper.

O sketch para o circuito 1. Este funciona na configuração de 4 pinos.

#include <Stepper.h>

const int  motorSteps = (32 * 64);     // 28BYJ48 DC 5V

const int motorPin1 = 12;
const int motorPin2 = 11;
const int motorPin3 = 10;
const int motorPin4 = 9;
const int ledPin = 13;

// initialize of the Stepper library:
Stepper myStepper(motorSteps, motorPin1, motorPin2, motorPin3, motorPin4); 

void setup() {
  myStepper.setSpeed(10);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // Step forward
  digitalWrite(ledPin, HIGH);
  myStepper.step(motorSteps/2);
  delay(500);

  // Step backward
  digitalWrite(ledPin ,LOW);
  myStepper.step(-motorSteps/2);
  delay(500); 
}
// Sketch uses 2,292 bytes (7%) of program storage space. Maximum is 32,256 bytes.
// Global variables use 35 bytes (1%) of dynamic memory, leaving 2,013 bytes for local variables. Maximum is 2,048 bytes.

O sketch para o circuito 2. Este funciona na configuração de 2 pinos.

#include <Stepper.h>

const int  motorSteps = (32 * 64);     // 28BYJ48 DC 5V

const int motorPin1 = 12;
const int motorPin2 = 11;
const int ledPin = 13;

// initialize of the Stepper library:
Stepper myStepper(motorSteps, motorPin1, motorPin2); 

void setup() {
  myStepper.setSpeed(10);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // Step forward
  digitalWrite(ledPin, HIGH);
  myStepper.step(motorSteps/2);
  delay(500);

  // Step backward
  digitalWrite(ledPin ,LOW);
  myStepper.step(-motorSteps/2);
  delay(500); 
}
// Sketch uses 2,232 bytes (6%) of program storage space. Maximum is 32,256 bytes.
// Global variables use 35 bytes (1%) of dynamic memory, leaving 2,013 bytes for local variables. Maximum is 2,048 bytes.