Índice:
- Etapa 1: Demonstração
- Etapa 2: Recursos usados
- Etapa 3: Wifi LoRa 32- Pinagem
- Etapa 4: ESC (controle eletrônico de velocidade)
- Etapa 5: ESC Controle Eletrônico de Velocidade (ESC)
- Etapa 6: Controle do servo motor PWM
- Etapa 7: captura analógica
- Etapa 8: Circuito - Conexões
- Etapa 9: Código Fonte
- Etapa 10: Arquivos
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
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
- 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
Etapa 4: 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)
Etapa 6: Controle do 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
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
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