Tabla de contenido:
- Paso 1: demostración
- Paso 2: Recursos utilizados
- Paso 3: Wifi LoRa 32- Pinout
- Paso 4: ESC (control electrónico de velocidad)
- Paso 5: Control electrónico de velocidad ESC (ESC)
- Paso 6: Control de servomotor PWM
- Paso 7: captura analógica
- Paso 8: Circuito - Conexiones
- Paso 9: código fuente
- Paso 10: archivos
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
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
- 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
Paso 4: 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)
Paso 6: 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
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
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