Controlador de motor DC usando codificador rotativo

Controlador de motor DC usando codificador rotativo

Controlar um motor DC significa:

  • Iniciar e parar o motor
  • Mude a direção de funcionamento do motor para frente (CW) ou reversa (CCW)
  • Variar a velocidade do motor (RPM)

Todos os diferentes tipos de controladores de motor CC controlam a velocidade e a direção do motor. Eles usam diferentes tipos de dispositivos de entrada como

  • Dois botões (ou talvez um único botão) são usados ​​para iniciar e parar o motor
  • A chave do tipo SPDT é usada para selecionar a direção do motor como CW ou CCW
  • O potenciômetro é usado para variar a velocidade do motor
  • Em alguns controladores, dois botões são usados ​​para aumentar e diminuir a velocidade do motor (em vez do potenciômetro)

Portanto, todos esses controladores de motor DC requerem botões, um potenciômetro, uma chave SPDT e talvez outros componentes para controlar a velocidade e direção do motor.

Mas neste projeto, apenas um codificador rotativo é usado para controlar totalmente o motor DC.

Significa que podemos

  • Variar a velocidade do motor
  • Altere a direção do motor e
  • Iniciar/parar motor

Com apenas um codificador rotativo. O codificador rotativo substitui todos os componentes acima, como botões, potenciômetro, interruptor, etc.

O projeto utiliza um codificador rotativo com uma placa de desenvolvimento Arduino NANO para controlar a velocidade e direção do motor DC. Ele também usa um módulo driver de motor (L293). O projeto completo pode ser construído com poucos componentes – módulos. Então vamos ver como isso é feito

Vamos primeiro coletar as coisas necessárias

Lista de itens obrigatórios

Placa de desenvolvimento Arduino NANO


Motor 12V CC


Módulo acionador de motor


Módulo codificador rotativo


Agora, primeiro construiremos o circuito e depois veremos seu funcionamento e operação. É simples construir este circuito porque precisamos conectar apenas 3 módulos. Pode-se construí-lo facilmente usando apenas fios de jumper e uma placa de ensaio. Aqui está o snap do circuito.

Diagrama de circuito

Conforme mostrado na figura, o circuito é construído usando três módulos – codificador rotativo, Arduino NANO e driver de motor DC L298.

  • O módulo codificador rotativo possui 5 pinos de interface. Destes 5 pinos – 2 pinos são para Vcc e Gnd, e eles estão conectados com saída de 5 V e Gnd da placa Arduino.
  • Seus outros 3 pinos, SW, DI e CLK, estão conectados aos pinos digitais D12, D2 e ​​D3 da placa Arduino, respectivamente.
  • O módulo driver do motor DC é usado para acionar o motor e fornecer a tensão e a corrente necessárias. Possui 4 entradas para acionar 2 motores DC, dos quais são utilizadas 2 entradas IN1 e IN2.
  • As saídas PWM D5 e D6 da placa Arduino estão conectadas a estes IN1 e IN2 que são usados ​​para acionar o motor
  • Um motor de 12 V CC está conectado a OUT1 e OUT2 do módulo acionador do motor, conforme mostrado
  • A placa Arduino e o módulo driver do motor recebem 12 V da fonte de alimentação externa

Funcionamento do circuito

Como eu disse antes, o mais interessante deste circuito é que, usando apenas este codificador rotativo, podemos…

  • Ligue ou pare o motor
  • Altere a direção do motor
  • Varie a velocidade do motor

Explicarei primeiro como funciona o circuito e depois explicarei como ele é feito.

  • Inicialmente, quando a alimentação de 12 V é aplicada à placa Arduino e ao módulo driver do motor, o motor é parado
  • O motor começa a funcionar em qualquer direção (sentido horário ou anti-horário) quando o interruptor do codificador rotativo é pressionado. Quando o interruptor é pressionado novamente – o motor para. Assim, pressionando alternadamente o interruptor – o motor funciona ou para
  • Enquanto o motor estiver funcionando no sentido horário, se começarmos a girar o codificador na mesma direção (sentido horário) – ele continuará aumentando a velocidade do motor até atingir o máximo.
  • Caso contrário, enquanto o motor estiver funcionando no sentido horário, e se começarmos a girar o codificador na direção reversa (sentido anti-horário) – ele começará a diminuir a velocidade do motor até parar
  • Agora, à medida que o codificador é girado ainda mais no sentido anti-horário, o motor começa a funcionar lentamente no sentido anti-horário e continua aumentando a velocidade até o máximo no sentido anti-horário
  • Assim, a velocidade do motor aumenta e diminui em qualquer direção girando o codificador no sentido horário e anti-horário
  • Assim, pode-se definir facilmente a velocidade desejada e a direção do motor usando apenas o codificador rotativo

Para entender o funcionamento do circuito em detalhes, primeiro precisamos entender o funcionamento de um codificador rotativo.

Funcionamento do codificador rotativo

O codificador rotativo consiste em um disco com fenda conectado ao pino C de aterramento comum e dois pinos de contato A e B, conforme mostrado na figura.

Ao girar o botão, A e B entram em contato com o pino C de aterramento comum, em uma ordem específica de acordo com a direção em que você está girando o botão.

Quando entram em contato com o terreno comum, produzem sinais. Esses sinais são deslocados 90° fora de fase entre si quando um pino entra em contato com o outro pino. Isso é chamado codificação de quadratura.

Quando você gira o botão no sentido horário, o pino A se conecta primeiro, seguido pelo pino B. Quando você gira o botão no sentido anti-horário, o pino B se conecta primeiro, seguido pelo pino A.

Ao rastrear quando cada pino se conecta e se desconecta do solo, podemos usar essas mudanças de sinal para determinar como o botão está sendo girado. Você pode fazer isso simplesmente observando o estado de B quando A muda de estado.

Quando o A muda de estado:

  • se B e A não forem iguais, então o botão foi girado no sentido horário
  • se B e A forem iguais, então o botão foi girado no sentido anti-horário

Veja a figura abaixo

Portanto, essas saídas A e B são pinos DI e CLK do módulo codificador rotativo. O Arduino verifica a saída de pulso de ambos e determina que o codificador está girado no sentido horário ou anti-horário.

Se o motor estiver girando no sentido horário em alguma velocidade e

  • Caso 1 – o codificador também é girado no sentido horário, então o Arduino aumentará a largura do PWM em D5 – então a velocidade do motor aumentará. se o codificador for girado continuamente no sentido horário – o motor atinge a velocidade máxima
  • Caso 2 – se o codificador for girado no sentido anti-horário, o Arduino diminuirá a largura do PWM em D5, diminuindo a velocidade do motor. E girar o codificador no sentido anti-horário continuamente fará com que a largura do PWM em D5 seja 0 e pare o motor uma vez. Continue a girar o codificador na mesma direção, aumentando a largura do PWM em D6, e o motor começará a girar no sentido anti-horário. Se alguém continuar girando o codificador no sentido anti-horário, a largura PWM em D6 se torna máxima e o motor atinge a velocidade máxima no sentido anti-horário.

O funcionamento e operação completos do circuito são baseados no programa baixado na memória FLASH do microcontrolador Arduino ATMega328. O programa é escrito em linguagem C usando Arduino IDE. O programa usa a biblioteca DC_Motor para variar a velocidade e direção do motor DC. Consulte a documentação da biblioteca DC_Motor para obter mais detalhes. aqui está o código do programa

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.