Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Idag diskuterar vi drönarmotorer, ofta kallade "borstlösa" motorer. De används ofta inom flygmodellering, främst i drönare, på grund av deras kraft och höga rotation. Vi lär oss att styra en borstlös motor med ESC och ESP32, utföra en analog aktivering på ESC med den interna LED_PWM -styrenheten och använda en potentiometer för att ändra motorvarvtalet.
Steg 1: Demonstration
Steg 2: Resurser som används
- Byxor för anslutning
- Wifi LoRa 32
- ESC-30A
- Borstlös motor A2212 / 13t
- USB-kabel
- Potentiometer för kontroll
- Protoboard
- Strömförsörjning
Steg 3: Wifi LoRa 32- Pinout
Steg 4: ESC (elektronisk hastighetsreglering)
- Elektronisk hastighetsregulator
- Elektronisk krets för att styra hastigheten på en elektrisk motor.
- Styrs från en standard 50Hz PWM servokontroll.
- Det varierar kopplingshastigheten för ett nätverk av fälteffekttransistorer (FET). Genom att justera transistornas omkopplingsfrekvens ändras motorvarvtalet. Motorvarvtalet varieras genom att justera tidpunkten för de matade strömpulserna till motorns olika lindningar.
- Specifikationer:
Utgångsström: 30A kontinuerlig, 40A i 10 sekunder
Steg 5: ESC Electronic Speed Control (ESC)
Steg 6: PWM servomotorstyrning
Vi kommer att skapa en PWM -servo för att verka på ESC -datainmatning genom att styra kanal 0 på LED_PWM för GPIO13 och använda en potentiometer för att styra moduleringen.
För att fånga kommer vi att använda en potentiometer på 10k som en spänningsdelare. Fångsten kommer att göras på kanal ADC2_5, tillgänglig med GPIO12.
Steg 7: Analog Capture
Analog till digital konvertering
Vi konverterar värdena för AD till PWM.
Servos PWM är 50Hz, så pulsperioden är 1/50 = 0,02 sekunder eller 20 millisekunder.
Vi måste agera på minst 1 millisekund till 2 millisekunder.
När PWM är vid 4095 är pulsbredden 20 millisekunder, vilket betyder att vi bör nå max vid 4095/10 för att nå 2 millisekunder, så PWM bör få 410 *.
Och efter minst 1 millisekund, alltså 409/2 (eller 4095/20), bör PWM få 205 *.
* Värden måste vara heltal
Steg 8: Krets - anslutningar
Steg 9: Källkod
Rubrik
#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"
Variabler
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;
Uppstart
void setup () {pinMode (pin_Atuacao_A, OUTPUT); ledcSetup (kanal_A, frekvens, upplösning); ledcAttachPin (pin_Atuacao_A, kanal_A); ledcWrite (kanal_A, ciklo_A); display.init (); display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para a esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); }
Slinga
void loop () {leitura = analogRead (Leitura_A); ciclo_A = map (leitura, 0, 4095, 205, 410); ledcWrite (kanal_A, ciklo_A); potencia = karta (leitura, 0, 4095, 0, 100); display.clear (); // limpa o buffer gör 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 (); // mostra no display}
Steg 10: Filer
Ladda ner filerna
INO