• Giovana Veiga

[PT-EN] Controle de Motores DC usando Sinal Digital

Updated: Aug 6

Drones, Submarinos ou carros, todos os veículos possuem uma entidade em comum, sem a qual é impossível que funcionem: o Motor. Realmente, é inimaginável um veículo sem a materialização mecânica da energia elétrica. Existem diversos tipos de motores, e o foco deste artigo é o controle e uso de motores DC (corrente contínua) usando sinais digitais.


O motor DC gira em um sentido quando polarizado diretamente e no sentido oposto quando polarizado reversamente. Você deve imaginar que como LEDs, buzzers e outros componentes eletrônicos simples, é possível ligá-los às portas digitais ou analógicas do seu microcontrolador e controlá-los enviando sinais diretos. Mesmo que a voltagem das portas analógicas/digitais seja suficiente, a alta corrente exigida por esses componentes pode (literalmente) fritar o microcontrolador. Então, como utilizar motores, controlando sua velocidade, sentido de rotação e usando até uma fonte de alimentação externa?


Para contornar essa situação utilizamos um circuito conhecido como Ponte H. Uma ponte H é um circuito com o formato que lembra a letra H e é capaz de alterar a polarização do elemento central através de sinais externos. Simplificadamente, esse circuito possui 4 chaves que quando ligadas em determinadas combinações permitem a passagem de corrente no motor na direção desejada, alterando seu sentido de rotação. Essas chaves podem ser substituídas por componentes eletrônicos, como Transistores, o que permite que a polaridade do elemento central dependa exclusivamente de um sinal digital externo enviado para o circuito.

Circuito Ponte H
Ponte H usando Transistores

Como controlar o motor usando esses conceitos:


Uma implementação usual da ponte H é feita usando o CI l293D. Esse chip contém 2 Pontes H, por meio de 4 vias, isto é, pode controlar dois motores independentes, aguentando até 600mAh em cada e tensão de 4,5 a 36 Volts.

L293 Pinout


Os pinos funcionam da seguinte maneira:


1,2EN: Ativa os canais 1 e 2

1A - 4A: Input

1Y - 4Y: Saída para os motores

3,4EN: Ativa os canais 3 e 4

Ground: Terra do CI

Vcc1: Alimentação do CI

Vcc2: Alimentação dos motores (De 4.5V a 36V)



1 - Primeiro, vamos alimentar o CI usando 5 volts do Arduíno (Vcc1), a alimentação para os motores (Vcc2) e ligar os grounds.

Implementando a Ponte H - Parte 1

2 - Agora conectamos o 3,4EN e os Inputs 3A E 4A ao Arduino.

Implementando a Ponte H - Parte 2

3 - Agora é só conectar os terminais do motor nos outputs 3Y e 4Y.

Implementando a Ponte H - Parte 3

O código


Utilizamos o código abaixo, que será explicado mais abaixo, para implementar a ponte H.


int enable1 = A0;

int in1 = 2;

int in2 = 3;


//Executado apenas uma vez

void setup(){

pinMode(enable1, OUTPUT);

pinMode(in1,OUTPUT);

pinMode(in2,OUTPUT);

}


//Executado repetidamente

void loop(){

//Define a velocidade do motor

analogWrite(enable1, 255);

//Gira o motor para um lado por 1 segundo

digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);

delay(1000);

//Gira o motor para o outro lado

digitalWrite(in1,LOW);

digitalWrite(in2,HIGH);

delay(1000);


}


Destrinchando o código


int enable1 = A0;

int in1 = 2;

int in2 = 3;

Declaramos os pinos onde ligamos os inputs no CI.


void setup(){

pinMode(enable1, OUTPUT);

pinMode(in1,OUTPUT);

pinMode(in2,OUTPUT);

}

Na função Setup definimos os pinos como OUTPUT.


analogWrite(enable1, 255);

Os pinos 3,4EN e 1,2EN, além de ativar os respectivos canais podem definir a velocidade dos motores se aplicado um sinal PWM. O 255 representa a velocidade máxima, ou seja, a tensão total aplicada no pino Vcc2 do L293D.


digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);


Agora vamos de fato aprender a controlar o sentido de rotação dos motores. O comportamento dos motores é controlado por sinais lógicos enviados nas inputs do CI. Então para o nosso circuito:


Montagem do circuito com Arduíno.

Escrito por Gabriel Guimarães.


Digital Control of DC Motors



Drones, submarines or automobiles, all vehicles have one entity in common, without which it is impossible for it to work: the Motor. Indeed, a vehicle without mechanical materialization of electrical energy is unimaginable. In fact, there are several types of motors, but the focus of this article is the control and use of DC motors using digital signals.


The DC motor rotates in one direction when directly polarized and in the opposite direction when reversed polarized. You should imagine that like LEDs, buzzers and other simple electronic components, it is possible to connect them to the digital or analog ports on your microcontroller and control them by sending direct signals. Even if the voltage of the analog / digital ports is sufficient, the high current required by these components can (literally) fry the microcontroller. So, how to use motors, controlling their speed, direction of rotation and even using an external power supply?


To get around this situation we use a circuit known as the H-Bridge. An H-bridge is a circuit with the shape that resembles the letter H and is capable of altering the polarization of the central element through external signals. Turning it simple, this circuit has 4 switches that, when connected in certain combinations, allow current to flow in the motor in the desired direction, changing its direction of rotation. These switches can be replaced by electronic components, such as Transistors, which allows the polarity of the central element to depend exclusively on an external digital signal sent to the circuit.




How to control motor using these concepts:


An usual implementation of the H bridge is done using IC l293D. This chip contains 2 H-bridges, through 4 ways, that is, it can control two independent motors, holding up to 600mAh in each and voltage from 4.5 to 36 Volts.



The pins work as follows:


1,2EN - Activate channels 1 e 2

1A ~ 4A - Input

1Y - 4Y - Output for motors

3,4EN - Activate channels 3 e 4

Ground - IC Ground

Vcc1 - IC Voltage Input

Vcc2 - Output Power for motors (From 4.5V to 36V)




1-First we will power up IC using 5 volts of the Arduino (Vcc1), the power for the motors (Vcc2) and connect the grounds.







2- Now we connect 3,4EN and the Inputs 3A and 4A on the Arduino.


3- Now just connect the motor terminals to outputs 3Y and 4Y.


-Code

int enable1 = A0;

int in1 = 2;

int in2 = 3;


//Executing only once

void setup(){

pinMode(enable1, OUTPUT);

pinMode(in1,OUTPUT);

pinMode(in2,OUTPUT);

}


//Executing in loop

void loop(){

//Define the motor speed

analogWrite(enable1, 255);

//Rotates the motor to one side for 1 second

digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);

delay(1000);

//Rotates the motor to other side

digitalWrite(in1,LOW);

digitalWrite(in2,HIGH);

delay(1000);


}



-Detailing the Code:


int enable1 = A0;

int in1 = 2;

int in2 = 3;

We Declare the pins where we connected the inputs on IC.


void setup(){

pinMode(enable1, OUTPUT);

pinMode(in1,OUTPUT);

pinMode(in2,OUTPUT);

}

In function Setup we define the pins as OUTPUT.


analogWrite(enable1, 255);

The pins 3,4EN and 1,2EN, in addition to activating the respective channels can define the speed of the motors if a PWM signal is applied. 255 represents the maximum speed, that is, the total voltage applied to the L293D's Vcc2 pin.



digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);


Now let's actually learn how to control the direction of rotation of the motors. The behavior of the motors is controlled by logic signals sent on the IC inputs. So, for our circuit:





4A/in23A//in1 HIGHLOWMotor rotates in clockwise directionLOWHIGHMotor rotates in anticlockwise directionLOWLOWStopped Motor





Written por Gabriel Guimarães