Assim como o nome sugere, os controladores de motor CC controlam a velocidade e a direção de um motor CC. Para mudar a direção do motor, entretanto, a alimentação que ele recebe deve ser invertida. E, para variar a velocidade do motor CC, um sinal ou onda de modulação por largura de pulso (PWM) deve ser aplicado a ele.
À medida que a largura do pulso aumenta, a tensão média aplicada ao motor também aumentará – e vice-versa. Isto significa que a velocidade do motor DC varia com a largura do pulso.
PMW se tornou um método comumente usado para fazer exatamente isso. Mas outra opção que está ganhando popularidade é controlar a velocidade e a direção de um motor CC usando um joystick. Como funciona: quando o joystick está na posição central, o motor DC para. Quando o joystick é movido para cima ou para baixo, o motor gira na mesma direção – para frente ou para trás.
Além disso, quanto mais longe do centro o joystick for empurrado (em qualquer direção), mais rápida será a velocidade do motor nessa mesma direção. Assim, os usuários podem controlar a velocidade do motor DC desta forma.
O método de controle por joystick para motores CC é atualmente usado em diversas aplicações diferentes, incluindo:
1. Brinquedos controlados remotamente (RC), como aviões, helicópteros, barcos, carros, etc.
2. Guindastes para câmeras de vídeo
3. Controladores Jogg Industriais
4. Braços robóticos ou para veículos robóticos
5. Controladores de câmeras de vigilância
Existem também muitas outras aplicações, onde o motor CC que aciona a carga é controlado por um joystick. Em algumas, apenas a direção do motor é alterada (como em brinquedos RC), enquanto em outras aplicações, tanto a direção quanto a velocidade são variadas (como em guindastes de câmeras de vídeo, controles de jog, etc.).
O projeto abaixo demonstra o uso de um joystick para controlar a velocidade e a direção de um motor DC. Ele usa um joystick resistivo de dois eixos usando uma placa de desenvolvimento Arduino NANO para controlar um driver de motor L298.
Diagrama de circuito
O circuito é construído usando três blocos de construção principais com uma placa Arduino NANO, um joystick resistivo de dois eixos e um driver de motor L298:
- O joystick possui cinco pinos de interface: Vcc, GND, X, Y e botão. O pino Vcc recebe uma alimentação de 5 V da placa Arduino e o pino GND é conectado ao terra da placa.
- Os pinos X e Y são saídas analógicas conectadas aos pinos analógicos A0 e A1 do Arduino. O pino do botão não é usado aqui.
- A saída PWM dos pinos D5 e D6 do Arduino está conectada aos pinos de entrada IN1 e IN2 do driver do motor. Eles acionam o motor através do driver do motor.
- O motor de 12 V DC está conectado na saída OUT1 e OUT2 do driver do motor.
- Tanto o Arduino quanto o driver do motor recebem 12V de alimentação externa.
Funcionamento e operação do circuito:
Funcionamento e operação do circuito:
- Inicialmente, quando o joystick está na posição central ou de repouso, o motor é parado. À medida que o joystick é movido gradualmente para cima, o motor começa a funcionar a uma velocidade lenta no sentido horário (para frente). À medida que o joystick é movido para cima a partir do centro, a velocidade do motor aumenta. Quando o joystick está o mais alto possível, o motor atinge sua velocidade máxima de avanço.
- À medida que o joystick volta para a posição central (repouso), a velocidade do motor começa a diminuir e para.
- Da mesma forma, quando o joystick é movido para baixo, o motor começa a funcionar no sentido anti-horário (reverso). À medida que o joystick se afasta do centro, a velocidade do motor aumenta até atingir esse ponto. Quando o joystick está abaixado ao máximo, o motor atinge sua velocidade máxima em marcha à ré.
- Quando o joystick é movido totalmente para a esquerda ou para a direita, o motor funciona para frente ou para trás em velocidade máxima.
A seguir, vamos revisar o circuito em ação:
- Mover o joystick em direção à posição central ou de repouso sempre desacelera o motor. Ele irá parar completamente quando estiver na posição central.
- Quando o joystick é movido para cima ou para baixo, a sua resistência interna (o potenciômetro) aumenta ou diminui. Essencialmente, isso aumenta ou diminui a tensão de saída analógica para o pino X.
- O Arduino lerá a tensão analógica e a converterá em um valor digital, que varia de 0 a 1023, dependendo se o joystick se move totalmente para cima ou para baixo.
- Quando o joystick está na posição central, o Arduino recebe um valor de cerca de 510. Quando é movido para cima, o valor aumenta gradualmente de 510 para 1023 no máximo. Da mesma forma, quando o joystick é movido para baixo, o valor diminui de 510 para 0 no máximo.
- Com base nesses valores, o Arduino gera PWM nos pinos D5 e D6. Quando o joystick se move para cima, o valor PWM aumenta gradualmente de 0 a 255 (0 – 100%) no pino D5 (e a velocidade do motor acelera para frente). Quando o joystick se move para baixo, o valor PWM aumenta no pino D6 (e a velocidade do motor acelera na direção reversa).
- Da mesma forma, mover o joystick para a esquerda ou direita aumentará ou diminuirá a saída analógica no pino Y. O Arduino lerá a tensão analógica e a converterá em um valor digital.
- Quando o joystick é movido para a direita, o valor será superior a 750. Como resultado, o Arduino fornecerá 100% do sinal PWM ao pino D5 (e o motor avançará a toda velocidade). Quando o joystick for movido para a esquerda, o valor será menor que 250. Agora, o Arduino dará 100% do sinal PWM ao pino D6 (e o motor funcionará em sentido inverso em velocidade máxima).
- A velocidade do motor aumenta e diminui à medida que o joystick é movido. Ele também mudará de direção dependendo se o joystick for movido para cima ou para baixo.
O funcionamento deste circuito depende do programa que está baixado na memória interna (FLASH) do microcontrolador ATMega328 do Arduino. Este programa foi escrito em linguagem C, utilizando o software Arduino IDE. Ele também usa a biblioteca Arduino “DC_Motor” que desenvolvi (e está disponível neste site, Garagem de Engenheiros).
Programa de software:
#include
DC_Motor dcm(5,6,1);
int velocidade_motor,set_velocidade;
configuração nula
{
}
loop vazio
{
int x_valor,y_valor;
valor_x = leitura analógica (A0);
if((x_value>=490) && (x_value<=530)) dcm.motor_speed_zero ;
if(x_valor>550)
{
set_speed = mapa(x_value,550,1020,10,100);
dcm.run_motor(1,set_speed);
}
if(x_valor<470)
{
set_speed = mapa(x_value,470,0,10,100);
dcm.run_motor(0,set_speed);
}
valor_y = leitura analógica (A1);
if(y_value>750)
{
dcm.jogg_set_speed(1.100);
}
if(y_valor<250)
{
dcm.jogg_set_speed(0,100);
}
}