Motor de dron controlado ESP32 LoRa: 10 pasos
Motor de dron controlado ESP32 LoRa: 10 pasos
Anonim
Image
Image
Demostración
Demostración

Hoy hablamos de motores de drones, frecuentemente llamados motores "sin escobillas". Son muy utilizados en aeromodelismo, principalmente en drones, por su potencia y alta rotación. Aprenderemos a controlar un motor sin escobillas usando ESC y ESP32, realizando una actuación analógica en el ESC usando el controlador interno LED_PWM y usando un potenciómetro para cambiar la velocidad del motor.

Paso 1: demostración

Paso 2: Recursos utilizados

Recursos utilizados
Recursos utilizados
  • Jumpers para conexión
  • Wifi LoRa 32
  • ESC-30A
  • Motor sin escobillas A2212 / 13t
  • cable USB
  • Potenciómetro de control
  • Protoboard
  • Fuente de alimentación

Paso 3: Wifi LoRa 32- Pinout

Wifi LoRa 32- Pinout
Wifi LoRa 32- Pinout

Paso 4: ESC (control electrónico de velocidad)

ESC (control electrónico de velocidad)
ESC (control electrónico de velocidad)
ESC (control electrónico de velocidad)
ESC (control electrónico de velocidad)
  • Controlador de velocidad electrónico
  • Circuito electrónico para controlar la velocidad de un motor eléctrico.
  • Controlado desde un servocontrol PWM estándar de 50Hz.
  • Varía la velocidad de conmutación de una red de transistores de efecto de campo (FET). Al ajustar la frecuencia de conmutación de los transistores, se cambia la velocidad del motor. La velocidad del motor se varía ajustando la sincronización de los pulsos de corriente suministrados a los diversos devanados del motor.
  • Especificaciones:

Corriente de salida: 30 A continuos, 40 A durante 10 segundos

Paso 5: Control electrónico de velocidad ESC (ESC)

Control electrónico de velocidad ESC (ESC)
Control electrónico de velocidad ESC (ESC)

Paso 6: Control de servomotor PWM

Control de servomotor PWM
Control de servomotor PWM

Crearemos un servo PWM para actuar en la entrada de datos ESC dirigiendo el canal 0 del LED_PWM para el GPIO13, y usaremos un potenciómetro para controlar la modulación.

Para la captura usaremos un potenciómetro de 10k como divisor de voltaje. La captura se realizará en el canal ADC2_5, accesible por GPIO12.

Paso 7: captura analógica

Captura analógica
Captura analógica
Captura analógica
Captura analógica

Conversión analógica a digital

Convertiremos los valores de AD al PWM.

El PWM del servo es 50Hz, por lo que el período de pulso es 1/50 = 0.02 segundos o 20 milisegundos.

Necesitamos actuar en al menos 1 milisegundo a 2 milisegundos.

Cuando el PWM está en 4095, el ancho de pulso es de 20 milisegundos, lo que significa que deberíamos alcanzar el máximo en 4095/10 para llegar a 2 milisegundos, por lo que PWM debería recibir 410 *.

Y después de al menos 1 milisegundo, por lo tanto 409/2 (o 4095/20), el PWM debería recibir 205 *.

* Los valores deben ser números enteros

Paso 8: Circuito - Conexiones

Circuito - Conexiones
Circuito - Conexiones

Paso 9: código fuente

Encabezamiento

#include // Necesario solo 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"

Variables

const int freq = 50; const int canal_A = 0; const int resolucao = 12; const int pin_Atuacao_A = 13; const int Leitura_A = 12; int potencia = 0; int leitura = 0; int ciclo_A = 0;

Configuración

configuración vacía () {pinMode (pin_Atuacao_A, SALIDA); ledcSetup (canal_A, frecuencia, resolución); ledcAttachPin (pin_Atuacao_A, canal_A); ledcWrite (canal_A, ciclo_A); display.init (); display.flipScreenVertically (); // Vira una tela verticalmente display.clear (); // ajusta o alinhamento para una pantalla esquerda.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta una fuente para Arial 16 display.setFont (ArialMT_Plain_16); }

Círculo

bucle vacío () {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.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 (potencia)); display.drawString (98, 36, String ("%")); display.display (); // no muestra ninguna pantalla}

Paso 10: archivos

Descarga los archivos

INO

PDF