Sei sulla pagina 1di 10

26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

m r n 0

Início  Arduino  Controle de velocidade de motor DC com PWM no Arduino UNO

Controle de velocidade de motor DC com PWM


no Arduino UNO
Arduino, Motores e Servos 
8 de janeiro de 2019 
Pedro Bertoleti

Os sistemas embarcados estão cada vez mais presentes no nosso dia-a-dia. Basta olhar ao seu redor: há
sistemas embarcados presentes em televisores, monitores, smartwatches, celulares, setup boxes, veículos,
iluminação inteligente, etc. En m, os sistemas embarcados dominam, mesmo que silenciosamente, a
maneira como a tecnologia evolui. Uma das tarefas dos sistemas embarcados é o controle de atuadores,
dos quais um dos mais comuns são motores DC (cuja velocidade pode ser controlada com precisão pela
grande maioria dos microcontroladores disponíveis no mercado). E é justamente disso que este post se
trata: como fazer o controle da velocidade de motores DC com PWM.

Material necessário
Para reproduzir o projeto deste post, você precisará de:

Um Arduino UNO (com cabo USB para programação)


Um Driver Motor Ponte H L298n
Um Motor DC 3-6V com Caixa de Redução e Eixo Duplo
Uma Fonte DC Chaveada 9V 1A Plug P4

https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 1/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Jumpers (macho-fêmea e macho-macho)

PWM: resumo
O nome PWM é uma sigla que signi ca Pulse Width Modulation (Modulação em Largura de Pulso). O PWM
trata-se de uma modulação digital / em sinal digital, ou seja, trabalha com somente dois níveis de sinal: on
(ou ‘1’) e o (ou ‘0’). Em termos simples, o PWM controla quanto tempo um sinal digital ca em on em uma
determinada janela de tempo xa (chamada de período). Observe a gura abaixo, onde o tempo em on é
representado por t1 e o período por t.

Eletricamente, é possível a rmar que o PWM faz com que a tensão média num dado período possa ser
controlada. Quanto mais tempo o sinal ca em on no período, maior a tensão média do sinal neste mesmo
período. A esta porção de tempo em que o sinal ca em on no referido período, é dado o nome de Duty
Cycle. O Duty Cycle é comumente tratado na forma porcentagem, como uma fração do período total do
sinal. Em termos matemáticos, este pode ser calculado como:

A tensão média, em termos do Duty Cycle, pode ser representada conforme mostra a gura abaixo.


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 2/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Logo, segue alguns exemplos de relação direta de Duty Cycle e tensão média:

Duty cycle de 0%: tensão média igual a 0V


Duty cycle de 50%: tensão média igual a metade da tensão do sinal lógico.
Duty cycle de 100%: tensão média igual a tensão do sinal lógico.

Além disso, em se tratando de atuadores DC (por exemplo, motores DC), é possível a rmar que o Duty
Cycle é aplicável também à potência entregue (em relação à máxima possível), ou seja:

Duty cycle de 0%: 0% de potência entregue ao atuador


Duty cycle de 50%: 50% da potência máxima entregue ao atuador
Duty cycle de 100%: 100% da potência máxima entregue ao atuador

Para mais informações sobre o PWM, consulte este e este sites.

Relação entre velocidade de motor DC e PWM


No caso dos motores DC, a “velocidade de giro” (RPM) pode ser controlada variando-se sua tensão de
alimentação. Além disso, o RPM é diretamente proporcional à tensão aplicada. Portanto, variando-se a
tensão média de alimentação do motor, varia-se o RPM do mesmo.

Em resumo: o sinal de PWM, devidamente ampli cado, pode ser usado para controlar o RPM de um motor
DC!

Isso signi ca que: 


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 3/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Duty cycle de 0%: tensão média igual a 0V, logo o motor ca parado
Duty cycle de 50%: tensão média igual a 50% da tensão de alimentação do motor, logo este girará
com RPM igual a metade de sua rotação máxima
Duty cycle de 100%: tensão média igual a tensão de alimentação do motor, logo este girará com RPM
igual a sua rotação máxima.

Neste caso, como ampli cador para acionar o motor DC, irá ser usado um driver de motor (com ponte H)
feito com o circuito integrado L298N. Trata-se de um driver muito versátil e muito utilizado para
acionamento de motores DC de 3 – 6V. Para maiores informações deste módulo, veja este nosso post.

PWM no Arduino
A programação do Arduino (incluindo o Arduino UNO, utilizado neste post) já possui uma função nativa
para gerar um sinal PWM em alguns dos pinos (aqueles identi cados com um símbolo/identi cação ~). Isso
torna muito mais fácil o desenvolvimento dos projetos que envolvem PWM, permitindo fácil utilização do
mesmo com pouquíssimo custo em termos computacionais (uso de memória Flash, RAM e processamento)
e escrita de códigos-fonte mais limpos e curtos. Tal função é chamada de analogWrite(), e recebe dois
parâmetros, conforme abaixo:

analogWrite(PINO, VALOR_ANALOGICO);

Onde:

PINO: número do pino do Arduino o qual se deseja que o sinal PWM seja gerado.
Conforme dito anteriormente, somente pinos com símbolo/identi cação ~ podem gerar sinais PWM.
VALOR_ANALOGICO: valor (de 0 a 255), proporcional ao Duty Cycle a ser gerado.
Ou seja, para Duty Cycle de 100%, deve-se utilizar valor 255, já para Duty Cycle 20% deve-se utilizar o
valor 51 e assim por diante.

Para mais detalhes da função analogWrite(), consulte o guia de referência o cial do Arduino.

Circuito esquemático
ATENÇÃO:
1) NÃO utilize a alimentação pela USB de programação. Você, obrigatoriamente, deve utilizar a Fonte DC
Chaveada 9V/1A. Caso contrário, você corre sérios riscos de dani car o dispositivo que está alimentando o
Arduino pela USB de programação (computador, por exemplo).
2) NÃO SE ESQUEÇA de colocar um jumper em ATIVA MA .


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 4/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

O motor deve ser ligado como o esquema abaixo.


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 5/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Código-fonte
Abaixo segue o código fonte do projeto. Este irá acionar o motor em velocidade crescente (de 0% a 100%
da rotação máxima) e depois de forma decrescente (de 100% a 0% da rotação máxima) de forma gradual,
de modo que seja possível perceber o motor acelerando e desacelerando. Observe que neste projeto o
motor gira apenas em sentido horário.

1 /* ?
2 Controle de velocidade de motor DC com PWM
3 Autores: Pedro Bertoleti e FilipeFlop
4 */
5
6 #define PINO_PWM 3 //pino do Arduino que terá a ligação para
7 #define TEMPO_NA_MESMA_VELOCIDADE 300 //tempo (ms) em que o motor ficara na mes
8
9 void setup()
10 {
11 //configura como saída pino terá a ligação para o driver de motor (ponte H) L298
12 pinMode(PINO_PWM, OUTPUT);
13 }
14
15 void loop()
16 {
17 int valor_pwm = 0; //variavel que armazena o valor do PWM (0..255 -> 0%..100%
18
19 //Aumento de velocidade (0%..100%)
20 for (valor_pwm = 0; valor_pwm < 256; valor_pwm++)
21 {
22 analogWrite(PINO_PWM, valor_pwm);
23 delay(TEMPO_NA_MESMA_VELOCIDADE);
24 }
25
26 //Diminuição de velocidade (100%..0%)
27 for (valor_pwm = 255; valor_pwm >= 0; valor_pwm--)
28 {
29 analogWrite(PINO_PWM, valor_pwm);
30 delay(TEMPO_NA_MESMA_VELOCIDADE);
31 }
32 }

Gostou deste post sobre como controlar a velocidade de um motor DC com PWM? Deixe seu comentário
logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse
nosso Fórum!

Referências

http://www.newtoncbraga.com.br/index.php/robotica/5169-mec071a
https://www.embarcados.com.br/pwm-do-arduino/
https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
https://www. lipe op.com/blog/motor-dc-arduino-ponte-h-l298n/


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 6/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Pedro Bertoleti

Engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP),


trabalha com desenvolvimento de software embarcado (bare-metal, RTOS e Linux Embarcado).
Colaborador do site FilipeFlop e portal Embarcados. Para mais informações, acesse:
https://www.facebook.com/pbertoleti

Deixe uma resposta

Conectar com:

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Comentário

Nome * E-mail *

Site


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 7/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Publicar comentário

Um Comentário

Não consegui entender, os pinos MA, pelo que eu li em livros, este pino Enable A e B, servem para controle
de velocidade dos motores… Se colocamos os jumpers, os motores não podem ser controlados, e apenas
rodarão na velocidade máxima.
Eu consegui controlar a velocidade do motor, colocando o EA e EB em portas PMW do Arduino, assim… no
código:
AnalogWrite( Motor1, porta EA no PWM (Velocidade));

Não entendi o porque deu certo em seu projeto, controlar a velocidade sem o EA e o EB, gostaria de ajuda
amigo

Agradeço

Johan Carlos Dos Santos 15 de janeiro de 2019 Responder

Material Necessário

Placa Uno R3 + Cabo USB para Arduino Driver Motor Ponte H L298n

Motor DC 3-6V com Caixa de Redução e Eixo Duplo Fonte DC Chaveada 9V 1A Plug P4

https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 8/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

Maker Hero

R$54,90
R$13,90 a R$21,90
R$14,90 a

Categorias

 Arduino (108)

 Display (10)

 Embarcados (60)

 ESP8266 (20)

 Impressão 3D (1)

 Módulos (22)

 Motores e Servos (19)

 News (61)

 Outros (19)

 Raspberry Pi (78) 
https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 9/10
26/03/2019 PWM com Arduino para controle de um motor DC - FilipeFlop

 Sensores (27)

 Shield (4)

 Wearable (6)

 Wireless (62)

y
y

    

Alguma dúvida? Entre em


contato!
(48) 3307-3495


https://www.filipeflop.com/blog/controle-motor-dc-pwm-arduino-uno/ 10/10

Potrebbero piacerti anche