Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
I dag diskuterer vi dronemotorer, ofte kalt "børsteløse" motorer. De er mye brukt i flymodellering, hovedsakelig i droner, på grunn av kraften og høy rotasjon. Vi lærer om å kontrollere en børsteløs motor ved bruk av ESC og ESP32, utføre en analog aktivering på ESC ved hjelp av den interne LED_PWM -kontrolleren og bruk av et potensiometer for å endre motorhastigheten.
Trinn 1: Demonstrasjon
Trinn 2: Ressurser brukt
- Gensere for tilkobling
- Wifi LoRa 32
- ESC-30A
- Børsteløs A2212 / 13t motor
- USB-kabel
- Potensiometer for kontroll
- Protoboard
- Strømforsyning
Trinn 3: Wifi LoRa 32- Pinout
Trinn 4: ESC (elektronisk hastighetskontroll)
- Elektronisk hastighetsregulator
- Elektronisk krets for å kontrollere hastigheten på en elektrisk motor.
- Kontrollert fra en standard 50Hz PWM servokontroll.
- Det varierer koblingshastigheten til et nettverk av felteffekttransistorer (FET -er). Ved å justere koblingsfrekvensen til transistorene, endres motorhastigheten. Motorhastigheten varieres ved å justere timingen for de medfølgende strømpulsene til motorens forskjellige viklinger.
- Spesifikasjoner:
Utgangsstrøm: 30A kontinuerlig, 40A i 10 sekunder
Trinn 5: ESC Electronic Speed Control (ESC)
Trinn 6: PWM servomotorstyring
Vi vil lage en PWM -servo for å påvirke ESC -datainndata ved å dirigere kanal 0 på LED_PWM for GPIO13, og bruke et potensiometer for å kontrollere modulasjonen.
For fangst vil vi bruke et potensiometer på 10k som en spenningsdeler. Fangsten vil bli utført på kanal ADC2_5, tilgjengelig for GPIO12.
Trinn 7: Analog fangst
Analog til digital konvertering
Vi konverterer verdiene til AD til PWM.
PWM for servoen er 50Hz, så pulsperioden er 1/50 = 0,02 sekunder eller 20 millisekunder.
Vi må handle i minst 1 millisekund til 2 millisekunder.
Når PWM er på 4095, er pulsbredden 20 millisekunder, noe som betyr at vi bør nå maksimumet på 4095/10 for å nå 2 millisekunder, så PWM bør motta 410 *.
Og etter minst 1 millisekund, derfor 409/2 (eller 4095/20), bør PWM motta 205 *.
* Verdier må være heltall
Trinn 8: Krets - Tilkoblinger
Trinn 9: Kildekode
Overskrift
#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 -skjerm (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 potensial = 0; int leitura = 0; int ciclo_A = 0;
Oppsett
ugyldig oppsett () {pinMode (pin_Atuacao_A, OUTPUT); ledcSetup (kanal_A, frekvens, opplø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 for Arial 16 display.setFont (ArialMT_Plain_16); }
Løkke
void loop () {leitura = analogRead (Leitura_A); ciclo_A = kart (leitura, 0, 4095, 205, 410); ledcWrite (kanal_A, ciklo_A); potencia = kart (leitura, 0, 4095, 0, 100); display.clear (); // limpa o buffer vis 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}
Trinn 10: Filer
Last ned filene
INO