Controle de velocidade do motor DC usando Arduino e PWM

Tempo de leitura: 6 minutes

Controle de velocidade do motor DC usando Arduino e PWM

O controle de velocidade do motor DC com interface de PC é um projeto DIY fácil. Neste projeto, a velocidade do motor DC é controlada enviando o comando através do PC. O Arduino é conectado diretamente ao PC através do cabo USB e o comando é dado ao Arduino no monitor serial do IDE do Arduino.

O motor é conectado a um transistor, e a base do transistor é conectada ao pino PWM do Arduino e a velocidade do motor é variada de acordo com o sinal PWM vindo do Arduino.

 

Arduino DC Motor Control – Trabalhando

O Arduino está conectado ao PC por meio do cabo USB. Podemos enviar o comando para o PC no monitor serial. Podemos alterar a velocidade do motor de 0 para 9. Quando 0 é enviado pelo Monitor Serial, o motor funciona na velocidade mínima (ou seja, zero). Quando a velocidade é variada de 1 a 9, a velocidade aumenta, sendo o valor 9 definido como a velocidade máxima do motor.

Uma tecnologia de controlador de motor PWM DC é usada para controlar a velocidade. No PWM, o Arduino envia uma onda pulsante semelhante ao modo astável do IC do temporizador 555.

 

Controle de velocidade PWM (modulação por largura de pulso)

Microcontrolador e Arduino são dispositivos digitais; eles não podem fornecer a saída analógica. O microcontrolador fornece Zero e UM como saída, onde ZERO é lógico LOW e ONE é lógico HIGH. Em nosso caso, estamos usando a versão de 5 volts do Arduino. Portanto, é lógico que ZERO é tensão zero e lógico ALTA é 5 tensão.

A saída digital é boa para dispositivos digitais, mas às vezes precisamos da saída analógica. Nesse caso, o PWM é muito útil. No PWM, o sinal de saída alterna entre zero e um, na frequência alta e fixa, conforme mostrado na figura abaixo.

Sinal de saída de PWM

Conforme mostrado na figura acima, o tempo de ON é “Ton” e o tempo de OFF é “Toff”. T é a soma de “Ton” e “Toff”, que é chamado de período de tempo. No conceito de PWM “T” não está variando e “Ton” e “Toff” podem variar, desta forma quando “Ton” aumenta “Toff” diminui e “Toff” aumenta quando “Ton” diminui proporcionalmente.

O ciclo de trabalho é a fração de um período de tempo. O ciclo de trabalho é comumente expresso como uma porcentagem ou proporção. Um período é o tempo que leva para um sinal completar um ciclo liga e desliga. Como uma fórmula, um ciclo de trabalho pode ser expresso como:

CICLO DE SERVIÇO = (Ton ÷ T) x100%

Agora, a velocidade do motor varia de acordo com o ciclo de trabalho. Suponha que o serviço seja zero, o motor não funcione e quando o ciclo de serviço for 100% o motor se move em RPM máximo. Mas este conceito nem sempre é correto porque o motor começa a funcionar depois de fornecer alguma tensão fixa que é chamada de tensão limite.

 

Transistor (2N2222)

O microcontrolador e o Arduino podem processar sinais e consumir quase 20 a 40mA de corrente, mas os motores precisam de alta corrente e tensão, então estamos usando o transistor para acionar o motor. O transistor é conectado em série com o motor e a base do transistor é conectada ao pino PWM do Arduino por meio de uma resistência. O sinal PWM está vindo do Arduino e o transistor funciona como uma chave e provoca um curto-circuito no Emissor (E) e no Coletor (C) quando o sinal PWM está no estado Alto e normalmente abre quando o sinal PWM está no estado BAIXO. Este processo funciona continuamente e os motores funcionam na velocidade desejada.

Componentes

ComponentesEspecificaçãoQuantidadeCompre no Amazon ou MercadoLivre
Arduino NanoNano1https://amzn.to/2KvyHiu
Motor DC 12VBaixo consumo de energia1https://amzn.to/39KSweg
Transistor2N22221https://amzn.to/38VQA3n
Adaptador de energia12 Volts1https://amzn.to/2XUweRz
Resistência1K1https://amzn.to/3qwBBCL
Diode1N40041https://amzn.to/38XVZHf
Cabo USBPara Arduino Nano1

 

Controle de Motor Arduino DC – Circuito

O diagrama do circuito é mostrado na figura abaixo. Se você estiver fazendo este circuito no PCB de uso geral (ZERO PCB) ou placa de ensaio, esta figura é útil

Além disso, se você for bom no PCB Desig, use as imagens fornecidas abaixo.

Arduino-PWM DC Motor Control – PCB Design

 

Controle de velocidade do motor DC

No circuito é usado um Arduino Nano, que é muito pequeno e amigável para a placa de ensaio (ProtoBoard).

O pino BASE de um transistor (2n2222) é conectado ao pino D9 do Arduino por meio de uma resistência de 1k ohm, a resistência é usada para limitação de corrente. O motor está conectado entre o pino coletor do transistor e o Vcc. Um diodo (1n4004) é conectado em paralelo ao motor em polarização reversa; é usado para bloquear a corrente reversa. O pino emissor do transistor é conectado ao solo. Este circuito é alimentado por um adaptador de 12 volts.

 

 

Controle de velocidade do motor DC – Programa de download para o Arduino

int out1 = 9;
int val;

void setup() {
  Serial.begin(9600); 
  pinMode(out1,OUTPUT);
  pinMode(out1,OUTPUT);
}

void loop() {
  if (Serial.available()){
    val = Serial.read();
  }

  if (val == '0') {analogWrite(out1, 0); Serial.println("Velocidade é = 0"); val = 10;}
  if (val == '1') {analogWrite(out1, 255); delay(10); analogWrite(out1, 175) ; Serial.println("Velocidade é = 1"); val = 10;}
  if (val == '2') {analogWrite(out1, 255); delay(10); analogWrite(out1, 185) ; Serial.println("Velocidade é = 2"); val = 10;}
  if (val == '3') {analogWrite(out1, 255); delay(10); analogWrite(out1, 195); Serial.println("Velocidade é = 3"); val = 10;}
  if (val == '4') {analogWrite(out1, 255); delay(10); analogWrite(out1, 205); Serial.println("Velocidade é = 4"); val = 10;}
  if (val == '5') {analogWrite(out1, 255); delay(10); analogWrite(out1, 215); Serial.println("Velocidade é = 5"); val = 10;}
  if (val == '6') {analogWrite(out1, 255); delay(10); analogWrite(out1, 225); Serial.println("Velocidade é = 6"); val = 10;}
  if (val == '7') {analogWrite(out1, 255); delay(10); analogWrite(out1, 235); Serial.println("Velocidade é = 7"); val = 10;}
  if (val == '8') {analogWrite(out1, 255); delay(10); analogWrite(out1, 245); Serial.println("Velocidade é = 8"); val = 10;}
  if (val == '9') {analogWrite(out1, 255); delay(10); analogWrite(out1, 255); Serial.println("Velocidade é = 9"); val = 10;}

}

 

No início do código, dois inteiros são declarados pelo nome “out1” e “val”, onde out1 é igual a 9, o que mostra que o pino D9 do Arduino é usado como pino de saída (ou pino PWM). Além disso, os dados provenientes do monitor serial são salvos no segundo inteiro “val”.

No void setup(), a comunicação serial é iniciada usando a função “Serial.begin(9600)” onde 9600 é a taxa de transmissão do monitor serial. Depois disso, “out1” é declarado como saída porque o motor é um dispositivo de saída.

No void loop, “serial.available” é usado dentro da condição “if”, torna-se verdadeiro quando qualquer dado é enviado pelo monitor serial. Estes dados são salvos em “val” inteiro usando a função “Serial.read”.

Depois disso, muitas condições “se” são usadas, na primeira “if condição”, quando ‘0’ é enviado através do monitor serial, ele se torna verdadeiro. No suporte, “analogWrite(out1, 0)” é usado para operar o motor no valor PWM zero. Na função “analogWrite(out1, 0)”, “out1” é usado para indicar o pino que queremos usar e “0” é o valor PWM neste pino. Depois disso, “Velocidade é = 0” é mostrado no monitor serial usando a função “Serial.println”. Depois disso, o número inteiro “val” é atualizado para 10, onde 10 é o valor aleatório, que é diferente de 0 a 9.

 

Na próxima linha, se a condição for usada para “val == 1”, neste momento o motor funciona com o valor PWM de 175. As mesmas condições são usadas até 9, nos 9 o motor funciona com o valor de 255 PWM, 255 é o valor PWM máximo .

Processo

  • Conecte o Arduino via USB e faça o upload do código
  • Abra o monitor serial e defina a taxa de transmissão em 9600
  • Agora digite qualquer número de 0 a 9.

Depois de digitar qualquer valor de zero a 9, a velocidade do motor varia.