Motor de drone controlado ESP32 LoRa: 10 etapas
Motor de drone controlado ESP32 LoRa: 10 etapas
Anonim
Image
Image
Demonstração
Demonstração

Hoje estamos discutindo motores drones, frequentemente chamados de motores "sem escova". Eles são amplamente utilizados em aeromodelismo, principalmente em drones, devido à sua potência e alta rotação. Aprenderemos como controlar um motor sem escovas usando ESC e ESP32, realizando uma atuação analógica no ESC usando o controlador LED_PWM interno e usando um potenciômetro para alterar a velocidade do motor.

Etapa 1: Demonstração

Etapa 2: Recursos usados

Recursos Usados
Recursos Usados
  • Jumpers para conexão
  • Wifi LoRa 32
  • ESC-30A
  • Motor Brushless A2212 / 13t
  • cabo USB
  • Potenciômetro para controle
  • Protoboard
  • Fonte de energia

Etapa 3: Wifi LoRa 32- Pinagem

Wifi LoRa 32- Pinagem
Wifi LoRa 32- Pinagem

Etapa 4: ESC (controle eletrônico de velocidade)

ESC (Controle Eletrônico de Velocidade)
ESC (Controle Eletrônico de Velocidade)
ESC (Controle Eletrônico de Velocidade)
ESC (Controle Eletrônico de Velocidade)
  • Controlador Eletrônico de Velocidade
  • Circuito eletrônico para controlar a velocidade de um motor elétrico.
  • Controlado a partir de um servo controle PWM de 50 Hz padrão.
  • Ele varia a taxa de comutação de uma rede de transistores de efeito de campo (FETs). Ajustando a frequência de chaveamento dos transistores, a velocidade do motor é alterada. A velocidade do motor é variada ajustando-se o tempo dos pulsos de corrente fornecidos aos vários enrolamentos do motor.
  • Especificações:

Corrente de saída: 30A contínua, 40A por 10 segundos

Etapa 5: ESC Controle Eletrônico de Velocidade (ESC)

ESC Controle Eletrônico de Velocidade (ESC)
ESC Controle Eletrônico de Velocidade (ESC)

Etapa 6: Controle do servo motor PWM

Controle de servo motor PWM
Controle de servo motor PWM

Criaremos um servo PWM para atuar na entrada de dados ESC direcionando o canal 0 do LED_PWM para o GPIO13 e usaremos um potenciômetro para controlar a modulação.

Para a captura, usaremos um potenciômetro de 10k como divisor de tensão. A captura será feita no canal ADC2_5, acessível pelo GPIO12.

Etapa 7: captura analógica

Captura Analógica
Captura Analógica
Captura Analógica
Captura Analógica

Conversão analógica para digital

Vamos converter os valores de AD para o PWM.

O PWM do servo é 50 Hz, então o período de pulso é 1/50 = 0,02 segundos ou 20 milissegundos.

Precisamos agir em pelo menos 1 milissegundo a 2 milissegundos.

Quando o PWM está em 4095, a largura de pulso é de 20 milissegundos, o que significa que devemos atingir o máximo em 4095/10 para atingir 2 milissegundos, então o PWM deve receber 410 *.

E depois de pelo menos 1 milissegundo, portanto, 409/2 (ou 4095/20), o PWM deve receber 205 *.

* Os valores devem ser inteiros

Etapa 8: Circuito - Conexões

Circuito - Conexões
Circuito - Conexões

Etapa 9: Código Fonte

Cabeçalho

#include // Necessário apenas para o Arduino 1.6.5 e posterior # include "SSD1306.h" // o mesmo que #include "SSD1306Wire.h" // OLED_SDA - GPIO4 // OLED_SCL - GPIO15 // OLED_RST - GPIO16 #define SDA 4 #define SCL 15 #define RST 16 SSD1306 display (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do objeto "display"

Variáveis

const int freq = 50; const int canal_A = 0; const int resolucao = 12; const int pin_Atuacao_A = 13; const int Leitura_A = 12; potência int = 0; int leitura = 0; int ciclo_A = 0;

Configurar

void setup () {pinMode (pin_Atuacao_A, OUTPUT); ledcSetup (canal_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (canal_A, ciclo_A); display.init (); display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para a exibição esquerda.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); }

Ciclo

loop void () {leitura = analogRead (Leitura_A); ciclo_A = mapa (leitura, 0, 4095, 205, 410); ledcWrite (canal_A, ciclo_A); potencia = mapa (leitura, 0, 4095, 0, 100); display.clear (); // limpa o buffer do display display.drawString (0, 0, String ("AD:")); display.drawString (32, 0, String (leitura)); display.drawString (0, 18, String ("PWM:")); display.drawString (48, 18, String (ciclo_A)); display.drawString (0, 36, String ("Potência:")); display.drawString (72, 36, String (potência)); display.drawString (98, 36, String ("%")); display.display (); // mostra no display}

Etapa 10: Arquivos

Baixe os arquivos

EU NÃO

PDF