Arduino Nano - Driver de Motor DC DRV8833

Este tutorial ensina você a usar o Arduino Nano com o módulo driver de motor DRV8833 para girar pequenos motores DC. Em detalhes, vamos aprender:

Arduino Nano Driver de Motor DC DRV8833

Nós sugerimos:

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×DRV8833 Motor Driver Module
2×Motor DC 5V
1×5V Power Adapter
1×Conector de Alimentação DC
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Driver de Motor DRV8833

Pinagem do Driver de Motor DRV8833

O DRV8833 é um chip de ponte H dupla da Texas Instruments. Um módulo pode acionar dois motores DC com escovas de forma independente (ele também pode acionar um motor de passo bipolar, mas isso está fora deste tutorial). A alimentação do motor deve ficar entre 2.7V e 10.8V. Cada canal fornece cerca de 1.5A de forma contínua e até 2A em picos curtos quando se mantém frio. Suas saídas são MOSFETs com uma baixa resistência em condução (cerca de 360 mΩ), então a perda de tensão é pequena e a placa fica bem mais fria que um L298N. Isso o torna uma boa escolha para robôs a bateria na faixa de 3V a 9V. O chip também se protege contra subtensão, sobrecorrente e superaquecimento.

Não há um pino separado de alimentação lógica: o chip cria sua própria tensão lógica interna a partir do VCC. Portanto, os sinais de 5V que saem do Arduino Nano são aceitos diretamente.

Pinagem do módulo driver de motor DRV8833

O módulo DRV8833 tem doze pinos:

  • Pino VCC: deve ser conectado à fonte de alimentação do motor (2.7V a 10.8V)
  • Pino GND: deve ser conectado ao GND da fonte de alimentação do motor E ao GND do Arduino Nano
  • Pino EEP (nSLEEP): deve ser colocado em HIGH para acordar o driver. Conecte-o ao pino 5V do Arduino Nano. Se estiver em LOW, o chip dorme e os motores não se movem
  • Pino ULT (nFAULT): saída de falha. Ele vai para LOW quando o chip detecta um problema. Este pino é opcional e pode ficar desconectado
  • Pinos IN1, IN2: entradas de controle do motor A, usadas tanto para a direção quanto para a velocidade
  • Pinos IN3, IN4: entradas de controle do motor B, usadas tanto para a direção quanto para a velocidade
  • Pinos OUT1, OUT2: devem ser conectados aos dois fios do motor A
  • Pinos OUT3, OUT4: devem ser conectados aos dois fios do motor B

※ Nota:

A disposição e os nomes dos pinos podem ser diferentes de um fabricante para outro. Algumas placas imprimem AIN1/AIN2/BIN1/BIN2, AOUT1/AOUT2/BOUT1/BOUT2, SLP e FLT no lugar dos nomes acima. É essencial sempre consultar os nomes impressos no módulo ao usá-lo. Olhe com atenção!

Como o DRV8833 Controla um Motor

Ao contrário do L298N, o DRV8833 não tem pino de velocidade ENA ou ENB. Os dois pinos IN de um canal definem tanto a direção quanto a velocidade. A tabela abaixo mostra o motor A (o motor B funciona do mesmo jeito com IN3 e IN4):

IN1 IN2 Motor A
LOW LOW Roda livre (o motor desacelera livremente)
HIGH LOW Para frente
LOW HIGH Reverso
HIGH HIGH Freio (o motor para rapidamente)

Para mudar a velocidade, um sinal PWM é enviado a um dos dois pinos enquanto o outro fica em LOW:

  • Para frente com velocidade: PWM em IN1, IN2 = LOW
  • Reverso com velocidade: IN1 = LOW, PWM em IN2

Como qualquer um dos pinos pode levar PWM, os dois pinos IN de cada canal devem ser conectados a pinos do Arduino Nano com suporte a PWM. No Arduino Nano, esses pinos são D3, D5, D6, D9, D10 e D11. Se você quer rever como um motor DC e o PWM funcionam, veja o tutorial Arduino Nano - Motor DC.

※ Nota:

  • Nunca alimente os motores pelo pino 5V do Arduino Nano. Use uma fonte externa, como um adaptador de 5V ou um conjunto de 4 pilhas AA (cerca de 6V).
  • O GND da fonte do motor, do módulo DRV8833 e do Arduino Nano deve ser conectado junto. Sem um terra comum, os motores vão se comportar de forma estranha.
  • Para cargas mais pesadas, os dois canais podem ser ligados em paralelo para cerca de 3A, mas isso é opcional e não é abordado aqui.

Controlar Um Motor DC com Arduino Nano e DRV8833

Diagrama de Ligação

Os fios do motor A vão para OUT1 e OUT2, e o Arduino Nano aciona o IN1 pelo pino D10 e o IN2 pelo pino D9.

Diagrama de ligação do Arduino Nano com DRV8833 e um motor DC

This image is created using Fritzing. Click to enlarge image

Módulo DRV8833 Arduino Nano / Alimentação
IN1 D10
IN2 D9
EEP 5V
GND GND (compartilhado com a fonte de alimentação)
VCC + do adaptador de alimentação de 5V (via conector de alimentação DC)
OUT1, OUT2 Fios do motor A

Como Programar o DRV8833

  • O primeiro passo é especificar os pinos do Arduino Nano que estão conectados ao IN1 e ao IN2:
const int IN1_PIN = 10; const int IN2_PIN = 9;
  • Defina os dois pinos como saídas no setup():
pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT);
  • Para girar para frente em uma velocidade escolhida (0 a 255), envie PWM para o IN1 e mantenha o IN2 em LOW:
analogWrite(IN1_PIN, speed); digitalWrite(IN2_PIN, LOW);
  • Para girar em reverso, troque as funções dos dois pinos:
digitalWrite(IN1_PIN, LOW); analogWrite(IN2_PIN, speed);
  • Para frear, coloque os dois pinos em HIGH. Para rodar livre, coloque os dois pinos em LOW:
digitalWrite(IN1_PIN, HIGH); // brake digitalWrite(IN2_PIN, HIGH);

Código Arduino Nano para DRV8833 - Um Motor DC

O sketch abaixo repete estes passos: acelera o motor, mantém a velocidade máxima, deixa em roda livre, faz o motor girar em reverso e, por fim, freia. Cada passo é impresso no Serial Monitor.

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-drv8833-dc-motor-driver */ // Arduino Nano + DRV8833: control ONE DC motor (motor A) // The DRV8833 has no ENA pin. The speed is set by PWM on IN1 or IN2. const int IN1_PIN = 10; // The Arduino Nano pin connected to the IN1 pin of DRV8833 (PWM pin) const int IN2_PIN = 9; // The Arduino Nano pin connected to the IN2 pin of DRV8833 (PWM pin) void setup() { Serial.begin(9600); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); motorCoast(); // start with the motor free Serial.println("DRV8833 - one motor test started"); } void loop() { // 1. Forward: speed up slowly from 0 to 255 Serial.println("Forward: speeding up"); for (int speed = 0; speed <= 255; speed += 5) { motorForward(speed); delay(40); } // 2. Keep full speed for 2 seconds Serial.println("Forward: full speed"); delay(2000); // 3. Coast: both inputs LOW, the motor slows down by itself Serial.println("Coast (free stop)"); motorCoast(); delay(2000); // 4. Reverse at about 70% speed Serial.println("Reverse: speed 180"); motorReverse(180); delay(2000); // 5. Brake: both inputs HIGH, the motor stops fast Serial.println("Brake (fast stop)"); motorBrake(); delay(2000); } // Forward: PWM on IN1, IN2 stays LOW. speed = 0..255 void motorForward(int speed) { analogWrite(IN1_PIN, speed); digitalWrite(IN2_PIN, LOW); } // Reverse: IN1 stays LOW, PWM on IN2. speed = 0..255 void motorReverse(int speed) { digitalWrite(IN1_PIN, LOW); analogWrite(IN2_PIN, speed); } // Coast: IN1 = LOW, IN2 = LOW void motorCoast() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW); } // Brake: IN1 = HIGH, IN2 = HIGH void motorBrake() { digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, HIGH); }

Passos Rápidos

  • Se esta é a primeira vez que você usa o Arduino Nano, veja como configurar o ambiente para Arduino Nano no Arduino IDE.
  • Ligue os componentes como mostrado no diagrama. Mantenha o adaptador de 5V desconectado por enquanto.
  • Conecte a placa Arduino Nano ao seu computador usando um cabo USB.
  • Abra o Arduino IDE no seu computador e selecione a placa Arduino Nano e a porta COM dela.
  • Copie o código acima e cole no Arduino IDE.
  • Clique no botão Upload para fazer o upload do código para o Arduino Nano.
  • Conecte o adaptador de 5V para alimentar o motor.
  • Abra o Serial Monitor e defina o baud rate como 9600.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
DRV8833 - one motor test started Forward: speeding up Forward: full speed Coast (free stop) Reverse: speed 180 Brake (fast stop) Forward: speeding up Forward: full speed
Ln 11, Col 1
Arduino Nano on COM15
2
  • Observe o motor: ele acelera, continua girando, rola devagar até parar, gira para o outro lado e depois para de repente quando freia.

※ Nota:

Se o motor girar no sentido "errado" quando o Serial Monitor mostrar Forward, é só trocar os dois fios do motor em OUT1 e OUT2.

Controlar Dois Motores DC com Arduino Nano e DRV8833

Diagrama de Ligação

Para o segundo motor, adicione quatro fios: o motor B vai para OUT3 e OUT4, o IN3 vai para o pino D6 e o IN4 vai para o pino D5. O resto da ligação continua o mesmo.

Diagrama de ligação do Arduino Nano com DRV8833 e dois motores DC

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Nano e outros componentes.

Módulo DRV8833 Arduino Nano / Alimentação
IN1 D10
IN2 D9
IN3 D6
IN4 D5
EEP 5V
GND GND (compartilhado com a fonte de alimentação)
VCC + do adaptador de alimentação de 5V (via conector de alimentação DC)
OUT1, OUT2 Motor A (roda esquerda)
OUT3, OUT4 Motor B (roda direita)

Código Arduino Nano para DRV8833 - Dois Motores DC

Pense nos dois motores como as rodas esquerda e direita de um pequeno carrinho robô. O código usa duas funções auxiliares, motorA(speed) e motorB(speed). A velocidade é um número com sinal de -255 a 255: um valor positivo gira a roda para frente, um valor negativo gira para trás e 0 deixa em roda livre. Com essas duas funções, o carro pode andar para frente, andar para trás, virar à esquerda, virar à direita e parar.

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-drv8833-dc-motor-driver */ // Arduino Nano + DRV8833: control TWO DC motors (like a small robot car) // Motor A = left wheel, Motor B = right wheel // All four IN pins must be PWM pins (3, 5, 6, 9, 10, 11 on the Arduino Nano) const int IN1_PIN = 10; // The Arduino Nano pin connected to the IN1 pin of DRV8833 (motor A) const int IN2_PIN = 9; // The Arduino Nano pin connected to the IN2 pin of DRV8833 (motor A) const int IN3_PIN = 6; // The Arduino Nano pin connected to the IN3 pin of DRV8833 (motor B) const int IN4_PIN = 5; // The Arduino Nano pin connected to the IN4 pin of DRV8833 (motor B) const int CAR_SPEED = 200; // 0..255 void setup() { Serial.begin(9600); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); pinMode(IN3_PIN, OUTPUT); pinMode(IN4_PIN, OUTPUT); stopCar(); Serial.println("DRV8833 - two motors test started"); } void loop() { Serial.println("Move forward"); motorA(CAR_SPEED); motorB(CAR_SPEED); delay(2000); Serial.println("Move backward"); motorA(-CAR_SPEED); motorB(-CAR_SPEED); delay(2000); Serial.println("Turn left"); motorA(-CAR_SPEED); // left wheel goes back motorB(CAR_SPEED); // right wheel goes forward delay(1000); Serial.println("Turn right"); motorA(CAR_SPEED); // left wheel goes forward motorB(-CAR_SPEED); // right wheel goes back delay(1000); Serial.println("Stop"); stopCar(); delay(2000); } // Drive one channel with a signed speed: // speed > 0 -> forward (PWM on the first pin, second pin LOW) // speed < 0 -> reverse (first pin LOW, PWM on the second pin) // speed == 0 -> coast (both pins LOW) void driveChannel(int pinA, int pinB, int speed) { speed = constrain(speed, -255, 255); if (speed > 0) { analogWrite(pinA, speed); digitalWrite(pinB, LOW); } else if (speed < 0) { digitalWrite(pinA, LOW); analogWrite(pinB, -speed); } else { digitalWrite(pinA, LOW); digitalWrite(pinB, LOW); } } // speed: -255..255 void motorA(int speed) { driveChannel(IN1_PIN, IN2_PIN, speed); } // speed: -255..255 void motorB(int speed) { driveChannel(IN3_PIN, IN4_PIN, speed); } void stopCar() { motorA(0); motorB(0); }

Passos Rápidos

  • Ligue o segundo motor como mostrado no diagrama.
  • Conecte a placa Arduino Nano ao seu computador usando um cabo USB.
  • Copie o código acima e abra no Arduino IDE.
  • Clique no botão Upload para fazer o upload do código para o Arduino Nano.
  • Conecte o adaptador de 5V.
  • Abra o Serial Monitor e observe os dois motores.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
DRV8833 - two motors test started Move forward Move backward Turn left Turn right Stop Move forward Move backward
Ln 11, Col 1
Arduino Nano on COM15
2
  • Para virar à esquerda, o motor A gira para trás enquanto o motor B gira para frente. Para virar à direita, é o oposto.

Conhecimento Adicional

Vamos comparar os drivers de motor DRV8833 e L298N.

DRV8833 L298N
Tensão do motor 2.7V a 10.8V 5V a 35V
Corrente por canal cerca de 1.5A (2A de pico) cerca de 2A
Peças de chaveamento MOSFET transistor bipolar
Perda de tensão e calor pequena grande
Pino de controle de velocidade não, o PWM vai para os pinos IN sim, ENA e ENB
Alimentação lógica feita dentro do chip pino separado de 5V
Tamanho da placa muito pequena grande com dissipador de calor

É evidente que o DRV8833 é a melhor opção para robôs pequenos a bateria de baixa tensão, enquanto o L298N ainda é necessário para motores de 12V ou mais.

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!