Categorias: Circuitos de microcontrolador
Número de visualizações: 19709
Comentários sobre o artigo: 0

Controle de motor e servo com Arduino

 

Em projetos simples de sistemas de automação, muitas vezes é necessário não apenas ler as leituras dos sensores, mas também acionar mecanismos. Para isso, uma variedade de motores elétricos é usada. A opção mais simples e mais popular é um motor DC. Ele ganhou o amor dos amantes com sua acessibilidade, facilidade de ajuste de velocidade. Se a tarefa é mover qualquer mecanismo para um determinado ângulo ou distância, é conveniente usar um servoconversor ou um motor de passo.

Neste artigo, examinamos servos e pequenos motores DC, conectando-os a uma placa Arduino e ajustando o DCT.

Controle de motor e servo com Arduino

Motor DC

O motor elétrico mais comum usado em dispositivos portáteis, brinquedos, modelos controlados por rádio e outros dispositivos. Os ímãs permanentes são fixados no pequeno motor elétrico no estator e no enrolamento do rotor.

Motor DC

A corrente é fornecida ao enrolamento através do conjunto da escova. As escovas são feitas de grafite, às vezes são encontrados contatos deslizantes de cobre. As escovas deslizam sobre as lamelas localizadas em uma extremidade do rotor. Se você não entrar em detalhes, sua velocidade de rotação depende da corrente do enrolamento da armadura.

Âncora do motor coletor

Nos grandes motores CC, no estator, um enrolamento de excitação é conectado, conectado ao enrolamento do rotor (através do conjunto da escova) de uma certa maneira (excitação sequencial, paralela ou mista). Assim, o torque desejado e o número de rotações são alcançados.


Controle de velocidade

Motor elétrico DC

Quando conectado à rede elétrica, o motor DC começa a girar na velocidade nominal. Para reduzir a velocidade, você precisa limitar a corrente. Para isso, são introduzidas resistências de lastro, mas isso reduz a eficiência da instalação como um todo e uma fonte de calor em excesso aparece. Para uma regulação mais eficaz da tensão e corrente, outro método é usado - Regulamento PWM.

Regulamento PWM

Um método para controlar o sinal modulado na largura de pulso (tensão) é gerar o valor de tensão desejado, alterando a largura do pulso, com uma duração constante do período (frequência).

Ou seja, o período é dividido em duas partes:

1. Tempo de impulso.

2. tempo de pausa.

A razão entre o tempo de pulso e o tempo total do período é chamada de ciclo de serviço:

Ks = ti / tper

o recíproco é chamado de "ciclo de serviço":

D = 1 / KZ = tper / te

Para descrever o modo de operação do controlador PWM, os dois conceitos são usados: ciclo de trabalho e ciclo de trabalho.

O consumo atual do motor depende de sua potência. O número de revoluções, como foi dito, depende da corrente. A corrente pode ser ajustada alterando a quantidade de tensão aplicada aos enrolamentos. De fato, quando alimentado por uma tensão que excede o valor nominal de acordo com o passaporte do motor, sua velocidade também excede a velocidade nominal. No entanto, esses modos de operação são perigosos para o motor, uma vez que uma corrente maior flui nos enrolamentos, o que causa seu aumento de aquecimento.

Se os danos ao motor causados ​​por impulsos de curto prazo ou modos de operação repetidamente de curto prazo forem mínimos, durante a operação prolongada em alta tensão e rotações, ele queimará ou seus rolamentos serão aquecidos e cunhados e os enrolamentos queimarão se a fonte de alimentação não for desconectada.

Se a tensão de entrada estiver muito baixa, o pequeno motor pode simplesmente não ter energia suficiente para se mover. Portanto, é necessário descobrir experimentalmente a velocidade e a tensão normais para um motor em particular que não excedam o nominal.


Nós nos conectamos ao arduino

Eu tinha um motor pequeno, ao que parece, de um toca-fitas, o que significa que sua tensão nominal será inferior a 5 volts, então a potência de saída do arduino será suficiente. Vou alimentá-lo a partir do pino de 5V, ou seja, da saída do estabilizador linear localizado na placa. De acordo com o esquema que você vê abaixo.

Como não conheço a corrente desse motor, conectei-o à energia e instalei um transistor de efeito de campo entre o motor e o pino de energia, no portão em que um sinal da saída PWM foi aplicado, qualquer um dos disponíveis pode ser usado.

Diagrama de conexão do motor CC do Arduino

Para ajustar a velocidade, adicionei um resistor variável ao circuito, conectando-o à entrada analógica A0. Para uma conexão rápida, usei uma tábua de pão sem solda, também chamada de tábua de pão.

Instalei um resistor limitador de corrente na fiação do transistor (para reduzir a corrente de carga do portão, isso salvará a porta da combustão e a fonte de alimentação do microcontrolador de subsidência e congelamento) em 240 Ohms e o puxei para o chão com um resistor de 12 kOhm, isso deve ser feito para torná-lo mais estável o tanque do obturador funcionou e descarregou mais rapidamente.

Detalhes sobre os transistores de efeito de campo descritos em um artigo em nosso site. Usei um mosfet poderoso, comum e não muito caro, com um canal n e um diodo reverso IRF840 embutido.

Executivo e parte definidora do circuito

É assim que meu conjunto de suporte de laboratório se parece:

Motor DC e arduino

A função de controle PWM é chamada ao gravar nos valores de saída correspondentes (3, 5, 6, 9, 10, 11) de 0 a 255 com o comando AnalogWrite (pino, valor). A lógica de seu trabalho é mostrada nos gráficos abaixo.

Função de controle PWM

Esse sinal é aplicado ao portão do transistor:

Esse sinal é aplicado ao portão do transistor

O código do programa para a desgraça é curto e simples, em detalhes todas essas funções foram descritas em artigos anteriores sobre arduino.

int sensorPin = A0; // entrada do potenciômetro

int motorPin = 3; // Saída PWM para o portão da câmera

configuração nula () {

pinMode (motorPin, OUTPUT);

}

loop vazio () {

analogWrite (motorPin, mapa (analogRead (sensorPin), 0, 1023, 0, 256));

}

Na função analogWrite, atribuo um valor à saída PWM, através do comando map, seu uso permite remover várias linhas de código e uma variável.


Este é um esquema de trabalho e é ótimo para observar processos ao ajustar a potência da carga, o brilho dos LEDs, a velocidade do motor, basta conectar a carga desejada em vez do motor. Nesse caso, em vez de 5V, qualquer tensão pode ser aplicada à carga, por exemplo, 12V, não se esqueça de conectar a energia negativa ao contato, por exemplo, 12V, não se esqueça de conectar a energia negativa ao pino GND na placa do microcontrolador.

No arduino, a frequência PWM, quando chamada pela função analogWrite, é de apenas 400 Hz, nos valores mínimos de tensão, um zumbido da frequência correspondente foi ouvido nos enrolamentos do motor.

Arduino e servo

Servos

Um motor que pode estar em uma posição predeterminada e, quando exposto a fatores externos, por exemplo, uma deflexão forçada do eixo, mantém sua posição inalterada - é chamado de servoconversor. Em geral, a definição soa um pouco diferente:

Servo é um motor acionado por feedback negativo.

Normalmente, três fios saem de um servoconversor:

  • Mais poder.

  • Menos poder.

  • Sinal de controle.

O servoconversor consiste em:

  • Motor DC (ou motor sem escova);

  • Taxas de administração;

  • Sensor de posição (codificador para servos com ângulo de rotação de 360 ​​° ou potenciômetro para servos com ângulo de rotação de 180 °);

  • Redução de velocidade (diminui a velocidade do motor e aumenta o torque no eixo de transmissão).

A unidade de controle compara o sinal no sensor de posição embutido e o sinal que veio através do fio de controle, se eles são diferentes, então há uma rotação em um ângulo no qual a diferença entre o sinal é nivelada.

O princípio de operação do servo

Principais características dos servos:

  • Velocidade de rotação (tempo durante o qual o eixo gira em um ângulo de 60 °);

  • Torque (kg / cm, isto é, quantos quilogramas o motor pode suportar na alavanca a 1 cm do eixo);

  • Tensão de alimentação;

  • Consumo atual;

  • Pelo método de controle (analógico ou digital, não há diferença significativa, mas o digital é mais rápido e mais estável).

Normalmente, o período do sinal é de 20 ms e a duração do pulso de controle:

  • 544 μs - corresponde a 0 °;

  • 2400 μs - corresponde a um ângulo de 180 °.

Em casos raros, o comprimento do pulso pode diferir, por exemplo, 760 e 1520 μs, respectivamente, essas informações podem ser esclarecidas na documentação técnica do inversor. Um dos servos de hobby mais populares é o Tower Pro SG90 e modelos similares.É barato - cerca de 4 dólares.

Sevroprivod para arduino

Ele suporta 1,8 kg / cm no eixo e, com ele, são montados parafusos e alavancas com estrias para o eixo. Na verdade, esse bebê é muito forte e é muito problemático pará-lo com um dedo - o impulso em si começa a cair dos dedos - essa é a sua força.


Servo controle e Arduino

Como já mencionado, o controle é realizado alterando a duração do pulso, mas não confunda este método com PWM (PWM), seu nome correto é PDM (Pulse Duration Modulation). Pequenos desvios na frequência do sinal (20 ms - duração, frequência 50 Hz) não desempenham um papel especial. Mas não se desvie da frequência em mais de 10 Hz, o motor pode funcionar espasmódico ou queimar.

Servo controle e Arduino

A conexão com o arduino é bastante simples, você também pode alimentar a unidade a partir de um pino de 5v, mas não desejável. O fato é que, no início, há um pequeno salto na corrente, isso pode causar uma queda de energia e Saídas de microcontroladores falsos. Embora 1 unidade pequena (tipo SG90) seja possível, mas não mais.

Para controlar esses servos com o arduino, você tem a biblioteca Servo embutida no IDE, que possui um pequeno conjunto de comandos:

  • attach () - adicione uma variável ao pino. Exemplo: drive name.attach (9) - conecte um servo ao pino 9. Se o seu inversor precisar de comprimentos não padronizados de pulsos de controle (544 e 2400 μs), eles poderão ser configurados separados por uma vírgula após o número do pino, por exemplo: servo.aplicação (pino, ângulo mínimo (μs), ângulo máximo no ISS));

  • write () - define o ângulo de rotação do eixo em graus;

  • writeMicroseconds () - define o ângulo através do comprimento do pulso em microssegundos;

  • read () - determina a posição atual do eixo;

  • anexado () - Verifica se um pino está definido com um servo conectado;

  • detach () - cancela o comando attach.

Essa biblioteca permite controlar 12 servos das placas UNO, Nano e similares (mega368 e 168), enquanto a capacidade de usar o PWM nos pinos 9 e 10 desaparece. Se você tiver MEGA, poderá controlar os 48º servidores, mas o PWM nos pinos 11 e 12 desaparecerá; se você usar até 12 servos, o PWM permanecerá totalmente funcional em todos os contatos.

Se você conectou esta biblioteca, não poderá trabalhar com receptores / transmissores de 433 MHz. Existe uma biblioteca Servo2 para isso, que é idêntica.

Biblioteca Servo2

Aqui está um exemplo do código que eu usei para experimentos com um servoconversor, está no conjunto padrão de exemplos:

#include // conecte a biblioteca

Servo myservo; // nome da variável declarada para o servo myservo

int potpin = 0; // pino para conectar o potenciômetro de ajuste

int val; // variável para salvar os resultados da leitura do sinal do potenciômetro

configuração nula () {

myservo.attach (9); // define 9 pinos como saída de controle para servo

}

loop vazio () {

val = analogRead (potpin); // resultados da leitura do potenciômetro salvo em trans. eles estarão na faixa de 0 a 1023

val = mapa (val, 0, 1023, 0, 180); // converte a faixa de medição da entrada analógica 0-1023

// no intervalo de tarefas para servo 0-180 graus

myservo.write (val); // passa a conversão sinal do pot-ra para controlar entrada servo

atraso (15); // atraso é necessário para operação estável do sistema

 

Conectamos o servo ao Arduino

Conclusão

Usar os motores elétricos mais simples emparelhados com um arduino é uma tarefa bastante simples, enquanto dominar esse material expande suas capacidades no campo da automação e robótica. Os robôs mais simples ou modelos de carros controlados por rádio consistem em tais motores, e servos são usados ​​para controlar a rotação das rodas.

Nos exemplos considerados, um potenciômetro foi usado para definir o ângulo de rotação ou a velocidade de rotação, qualquer outra fonte de sinal pode ser usada em vez disso, por exemplo, rotação ou alteração na velocidade pode ocorrer como resultado das informações recebidas dos sensores.

Um exemplo do uso de servos em energia alternativa: rastreando o ângulo de incidência da luz solar e ajustando a posição dos painéis solares em usinas de energia.

Para implementar esse algoritmo, você pode usar vários fotorresistores ou outros dispositivos optoeletrônicos para medir a quantidade de luz incidente e, dependendo de suas leituras, defina o ângulo de rotação do painel solar.

Veja também em bgv.electricianexp.com:

  • Como o servo é organizado e funciona
  • Arduino e motor de passo: fundamentos, esquemas, conexão e controle
  • Possui conexão de dispositivos ao Arduino
  • Como distinguir um motor de indução de um motor CC
  • Como conectar o codificador incremental ao Arduino

  •