Como o Servo Motor funciona e como controlar os Servos usando Arduino

neste tutorial vamos aprender como funcionam os servomotores e como controlar os servos usando o Arduino e o PCA9685 PWM driver. Você pode assistir ao seguinte vídeo ou ler o tutorial escrito abaixo.

Resumo

Existem muitos tipos de servo-motores e sua principal característica é a capacidade de controlar com precisão a posição de seu eixo. Um motor servo é um sistema de ciclo fechado que usa feedback de posição para controlar seu movimento e posição final.,

em motores de tipo industrial, o sensor de realimentação de posição é geralmente um codificador de alta precisão, enquanto que em pequenos RC ou servos de hobby o sensor de posição é geralmente um potenciômetro simples. A posição real capturada por estes dispositivos é alimentada de volta para o detector de erros, onde é comparada com a posição de destino. Em seguida, de acordo com o erro O controlador corrige a posição real do motor para corresponder com a posição alvo.,

neste tutorial vamos dar uma olhada detalhada no hobby servo motors. Vamos explicar como esses servos funcionam e como controlá-los usando Arduino.

Eles também são usados por estudantes de engenharia para prototipagem em robótica, criando braços robóticos, robôs biologicamente inspirados, robôs humanóides e assim por diante.,

Como RC / Hobby Servo de Trabalho

Dentro de um hobby servo há quatro principais componentes de um motor DC, uma caixa de velocidades, um potenciômetro e um circuito de controle. O motor DC é de alta velocidade e baixo torque, mas a caixa de velocidades reduz a velocidade para cerca de 60 RPM e, ao mesmo tempo, aumenta o torque.

o potenciómetro Está ligado na relação de transmissão final ou no veio de saída, de modo que o motor gira também o potenciómetro, produzindo assim uma tensão que está relacionada com o ângulo absoluto do veio de saída., No circuito de controle, esta tensão de potenciômetro é comparada à tensão que vem da linha de sinal. Se necessário, o controlador activa uma ponte H integrada que permite ao motor rodar em qualquer direcção até os dois sinais atingirem uma diferença de zero.

um motor servo é controlado enviando uma série de impulsos através da linha de sinal. A frequência do sinal de controlo deve ser de 50Hz ou deve ocorrer um impulso a cada 20ms., A largura do pulso determina a posição angular do servo e este tipo de servo pode geralmente Rodar 180 graus (eles têm limites físicos de viagem).

geralmente pulsos com 1ms duração correspondem a 0 graus de posição, 1,5 ms de duração a 90 graus e 2ms a 180 graus. Embora a duração mínima e máxima dos pulsos pode às vezes variar com diferentes marcas e eles podem ser 0,5 ms para 0 graus e 2,5 ms para a posição de 180 graus.,

Arduino Servo Motor Control

vamos pôr o dito acima à prova e fazer um exemplo prático de controlar um servo hobby usando Arduino. Vou usar o MG996R que é um servo de alto torque com engrenagem de metal com torque de 10 kg-cm. O binário elevado vem a um preço e essa é a corrente de bloqueio do servo que é 2.5 A. A corrente de funcionamento é de 500mA a 900mA e a tensão de funcionamento é de 4.8 A 7.2 V.,

As classificações actuais indicam que não podemos ligar directamente este servo ao Arduino, mas temos de usar uma fonte de alimentação separada para ele. Aqui está o esquema do circuito para este exemplo.

nós simplesmente precisamos conectar o pino de controle do servo a qualquer pino digital da placa Arduino, conectar o solo e os fios positivos à fonte de alimentação externa 5V, e também conectar o terreno Arduino ao servo.,

Você pode obter os componentes necessários para este exemplo a partir dos links abaixo:

  • MG996R Servo Motor …………………………. Amazon / Banggood / AliExpress
  • ou S90 Micro Servo ………..…………………… O Amazon / Banggood / AliExpress
  • Placa Arduino ……………………………………. Amazon / Banggood/AliExpress
  • 5V 2A corrente contínua …………………..….. Amazon / Banggood/aiexpress

Disclosure: estes são links de afiliados. Como sócio da Amazon ganho com as compras de qualificação.,

Veja Também:

Arduino Motor Brushless de Controle Tutorial | ESC | BLDC

Arduino Servo Motor de Controle de Código

Agora, vamos dar uma olhada no código do Arduino para controlar o servo motor. O código é muito simples. Nós só precisamos definir o pin ao qual o servo é conectado, definir esse pin como uma saída, e na seção loop gerar pulsos com a duração específica e frequência como explicamos anteriormente.,

Depois de alguns testes eu cheguei com os seguintes valores para a duração dos pulsos que trabalham com o meu servo. Pulsos com duração de 0,6 ms corresponderam a 0 graus de posição, 1,45 ms a 90 graus e 2,3 ms a 180 graus.

I conectou um multímetro em série com o servo para verificar o sorteio atual. O empate máximo de corrente que eu notei foi até 0,63 a na stall. Bem, isso é porque este não é o TowerPro MG996R servo original, mas uma réplica mais barata, que obviamente tem pior desempenho.,

No entanto, vamos dar uma olhada em uma maneira mais conveniente de controlar servos usando Arduino. Isso é usar a biblioteca Arduino servo.

aqui só precisamos incluir a biblioteca, definir o objeto servo, e usando a função attach() definir o pin ao qual o servo está conectado, bem como definir os valores mínimos e máximos das durações de impulsos. Em seguida, usando a função write () nós simplesmente definir a posição do servo de 0 a 180 graus. Com esta biblioteca podemos conduzir até 12 servos ao mesmo tempo ou 48 servos usando Arduino Mega board.,

Veja Também:

DIY Arduino Braço de Robô com Smartphone de Controle

Arduino e PCA9685 PWM/ Servo Controlador

Há também uma outra maneira de controlar servos com o Arduino, e isso é usando o PCA9685 servo driver. Este é um driver de 16 canais de 12 bits PWM e servo que se comunica com Arduino usando o ônibus I2C. Ele tem um relógio construído para que ele possa conduzir 16 servo correndo livre, ou independentemente de Arduino.,

What’s even cooler we can daisy-chain up to 62 of these drivers on a single I2C bus. Então teoricamente podemos controlar até 992 servos usando apenas os dois pinos I2C da placa Arduino. Os 6 pinos de seleção de endereços são usados para definir diferentes I2C endereçados para cada driver adicional. Só precisamos de ligar as soldas de acordo com esta mesa.

Aqui está o esquema do circuito e podemos mais uma vez notar que precisamos de uma fonte de alimentação separada para os servos.,

Você pode obter os componentes necessários para este exemplo a partir dos links abaixo:

  • MG996R Servo Motor …………………………. Amazon / Banggood / AliExpress
  • PCA9685 PWM Servo Driver ………………. Amazon / Banggood / AliExpress
  • Placa Arduino ……………………………………. Amazon / Banggood/AliExpress
  • 5V 6A DC Power Supply …………………..….. Amazon / Banggood/aiexpress

Disclosure: estes são links de afiliados. Como sócio da Amazon ganho com as compras de qualificação.agora vamos dar uma olhada no código Arduino., Para controlar este servo driver vamos usar a biblioteca PCA9685 que pode ser baixada do GitHub.

PCA9685 Código Arduino

então primeiro precisamos incluir as bibliotecas e definir o objeto PCA9685. Em seguida, usando a instância Servo_Evaluator definir a duração dos pulsos ou a saída PWM do driver. Note que as saídas são de 12 bits, ou isso é uma resolução de 4096 passos. Assim, a duração mínima do pulso de 0,5 ms ou posição de 0 graus corresponderia a 102 passos, e a duração máxima do pulso de 2,5 ms ou posição de 180 graus a 512 passos., Mas, como explicado anteriormente, estes valores devem ser ajustados de acordo com o seu motor servo. No meu caso, os valores de 102 a 470 correspondiam a uma posição de 0 a 180 graus.

na secção de configuração precisamos de definir a taxa de clock I2C, definir o endereço do controlador e definir a frequência para 50Hz.

na seção de loop, usando as funções setChannelPWM() e pwmForAngle () nós simplesmente ajustamos o servo para o ângulo desejado.,

eu liguei um segundo servo para o motorista, e como eu esperava, não era de posicionamento o mesmo que o primeiro, porque os servos que eu estou usando são cópias baratas e que não são tão confiáveis. No entanto, este não é um grande problema porque usando a instância Servo_Evaluator podemos definir diferentes configurações de saída para cada servo. Também podemos ajustar a posição de 90 graus no caso de não estar precisamente no meio. Dessa forma, todos os servos trabalharão o mesmo e posição no ângulo exato.,

Controlling a lot of servo with Arduino and the PCA9685 drivers

we will take a look at one more example and that’s controlling a lot of servo with multiple chained PCA9685 drivers.

para esse efeito, precisamos de ligar os controladores uns aos outros e ligar os blocos de soldas de selecção de endereços apropriados. Aqui está o esquema do circuito:

vamos dar uma olhada no código Arduino agora.,

portanto, devemos criar um objeto PCA9685 separado para cada driver, definir os endereços para cada driver, bem como definir a frequência para 50Hz. Agora simplesmente usando as funções setChannelPWM() e pwmForAngle() podemos definir qualquer servo em qualquer driver para posicionar qualquer ângulo que quisermos.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *