Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Vandaag hebben we het over dronemotoren, vaak "borstelloze" motoren genoemd. Ze worden veel gebruikt in aeromodellering, voornamelijk in drones, vanwege hun kracht en hoge rotatie. We leren over het besturen van een borstelloze motor met behulp van ESC en ESP32, het uitvoeren van een analoge bediening op de ESC met behulp van de interne LED_PWM-controller en het gebruik van een potentiometer om de motorsnelheid te wijzigen.
Stap 1: Demonstratie
Stap 2: Gebruikte bronnen
- Jumpers voor verbinding
- Wifi LoRa 32
- ESC-30A
- Borstelloze A2212 / 13t-motor
- USB-kabel
- Potentiometer voor controle
- Protobord
- Stroomvoorziening
Stap 3: Wifi LoRa 32- Pinout
Stap 4: ESC (elektronische snelheidsregeling)
- Elektronische snelheidsregelaar
- Elektronisch circuit om de snelheid van een elektromotor te regelen.
- Aangestuurd vanuit een standaard 50Hz PWM-servobesturing.
- Het varieert de schakelsnelheid van een netwerk van veldeffecttransistoren (FET's). Door de schakelfrequentie van de transistoren aan te passen, wordt het motortoerental gewijzigd. Het motortoerental wordt gevarieerd door de timing van de geleverde stroompulsen aan te passen aan de verschillende wikkelingen van de motor.
- Specificaties:
Uitgangsstroom: 30A continu, 40A gedurende 10 seconden
Stap 5: ESC elektronische snelheidsregeling (ESC)
Stap 6: PWM servomotorbesturing
We zullen een PWM-servo maken om te reageren op ESC-gegevensinvoer door kanaal 0 van de LED_PWM voor de GPIO13 te sturen, en een potentiometer gebruiken om de modulatie te regelen.
Voor het vastleggen gebruiken we een potentiometer van 10k als spanningsdeler. De opname zal worden gedaan op kanaal ADC2_5, toegankelijk via GPIO12.
Stap 7: Analoge opname
Analoog naar digitaal conversie
We zullen de waarden van AD naar de PWM converteren.
De PWM van de servo is 50 Hz, dus de pulsperiode is 1/50 = 0,02 seconden of 20 milliseconden.
We moeten handelen in ten minste 1 milliseconde tot 2 milliseconden.
Wanneer de PWM 4095 is, is de pulsbreedte 20 milliseconden, wat betekent dat we het maximum bij 4095/10 moeten bereiken om 2 milliseconden te bereiken, dus PWM zou 410 * moeten ontvangen.
En na minimaal 1 milliseconde, dus 409/2 (of 4095/20), zou de PWM 205* moeten ontvangen.
* Waarden moeten gehele getallen zijn
Stap 8: Circuit - Aansluitingen
Stap 9: Broncode
kop
#include // Necessário apenas para o Arduino 1.6.5 en 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"
Variabelen
const int freq = 50;const int kanaal_A = 0; const int resolucao = 12; const int pin_Atuacao_A = 13; const int Leitura_A = 12; int potentiaal = 0; int leitura = 0; int ciclo_A = 0;
Opstelling
void setup(){ pinMode(pin_Atuacao_A, OUTPUT); ledcSetup(canal_A, freq, resolucao); ledcAttachPin (pin_Atuacao_A, kanaal_A); ledcWrite(canal_A, ciclo_A); weergave.init(); display.flipScreenVertical(); //Vira een tela verticalmente display.clear(); // ajusta of alinhamento para a esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); //ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); }
Lus
void loop () { leitura = analogRead (Leitura_A); ciclo_A = kaart(leitura, 0, 4095, 205, 410); ledcWrite(canal_A, ciclo_A); potencia = kaart (leitura, 0, 4095, 0, 100); display.clear();//limpa o buffer 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("Potencia:")); display.drawString(72, 36, String(potencia)); display.drawString(98, 36, String("%")); weergave.weergave(); // de meeste geen weergave}
Stap 10: Bestanden
Download de bestanden
INO