Sisällysluettelo:
Video: Sähköturbiini ESP32: 9 askelta
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tänään keskustelen sähköturbiinista ESP32: n kanssa. Kokoonpanossa on osa, joka on painettu 3D -muodossa. Esittelen ESP32: n PWM -toiminnon, joka soveltuu sähkömoottoreiden ohjaamiseen. Tätä käytetään tasavirtamoottorissa. Esittelen myös tämän MCPWM: n (Motor Control PWM) toiminnan käytännön sovelluksessa.
Käytin ESP32 LoRaa tässä projektissa, ja mielestäni on tärkeää huomata, että tässä mikrokontrollerissa on kaksi lohkoa. Nämä lohkot pystyvät ohjaamaan kolmea moottoria. Siten on mahdollista ohjata jopa kuutta moottoria PWM: llä, kaikki itsenäisesti. Tämä tarkoittaa, että tässä käyttämäni ohjaus ei ole standardi (mikä on jotain samanlaista kuin Arduino). Sen sijaan ohjaus on itse siru, joka takaa ESP32: lle paljon joustavuutta moottorin ohjauksessa.
Vaihe 1: Esittely
Vaihe 2: PWM -moottorin ohjaus
Yleiskaavio:
• ESP32: n MCPWM -toimintoa voidaan käyttää erityyppisten sähkömoottoreiden ohjaamiseen. Siinä on kaksi yksikköä.
• Jokaisessa yksikössä on kolme PWM -lähtöparia.
• Jokainen lähtö A / B -pari voidaan synkronoida jollakin kolmesta tahdistusajastimesta 0, 1 tai 2.
• Yhdellä ajastimella voidaan synkronoida useampi kuin yksi PWM -lähtöpari
Koko kaavio:
• Kukin yksikkö pystyy myös keräämään tulosignaaleja SYNCHRONIZATION SIGNS;
• Tunnista ylivirran tai moottorin ylijännitteen VIKAMERKIT;
• Pyydä palautetta CAPTURE SIGNALS -laitteella, kuten moottorin sijainti
Vaihe 3: Käytetyt resurssit
• Liitännät
• Heltec Wifi LoRa 32
• Yhteinen tasavirtamoottori
• Silta H - L298N
• USB kaapeli
• Protoboard
• Virtalähde
Vaihe 4: ESP 32 Dev Kit - Pinout
Vaihe 5: Turbiinin asennus
Vaihe 6: Piiri - liitännät
Vaihe 7: Mittaus oskilloskoopilla
Vaihe 8: Lähdekoodi
Otsikko
#include // Não é välttämätön caso -käyttö Arduino IDE #include "driver/mcpwm.h" // include a biblioteca "Motor Control PWM" nativa do ESP32 #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 -näyttö (0x3c (SDA, SCL, RST); // Instanciando e ajustando os pinos do objeto "display" #define GPIO_PWM0A_OUT 12 // Declara GPIO 12 como PWM0A #define GPIO_PWM0B_OUT 14 // Declara GPIO 14 como PWM0B
Perustaa
void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajota tai alinhamento esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); // mcpwm_gpio_init (unidade PWM 0, saida A, porta GPIO) => Instancia tai MCPWM0A no pino GPIO_PWM0A_OUT julistus no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPIO_P0M, // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia tai MCPWM0B no pino GPIO_PWM0B_OUT julistus no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPW_P0B, mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // taajuudet = 500 Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (käyttöjakso) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (käyttöjakso) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Määrittele ciclo de trabalho em nível alto // Inicia (Unidade 0, Ajastin 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0 ja pwm_config); // Määritä PWM0A & PWM0B com asetuksina acima}
Toiminnot
// Função que configura o MCPWM operador A (Unidade, Timer, Porcentagem (ciclo de trabalho)) staattinen void brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cim_tunnus_tunnus) (0, 1 ou 2), Operador (A ou B)); => Desliga tai sinal do MCPWM no Operador B (Define o sinal em Baixo) mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // mcpwm_set_duty (unidade PWM (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% do PWM)); => Määritä osittain PWM no Operador A (Ciclo de trabalho) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle); // mcpwm_set_duty_tyoe (unidade PWM (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto ou baixo)); => define o nível do ciclo de trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Huomautus: Chame essa função toda vez que for chamado "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" para manter o ciclo de trabalho configurado anteriormente} // Função que configura o MCPWM Do operador B (Unidtage, staattinen void brushed_motor_backward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_A); // Desliga tai sinal do MCPWM no Operador A (Define o sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Määritä osittain PWM no Operador B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // define o nível do ciclo de trabalho (alto ou baixo)} // Função que para o MCPWM de ambos os Operadores staattinen void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) tmmw_mmw // Desliga tai sinal do MCPWM no Operador A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // Desliga o sinal do MCPWM no Operador B}
Silmukka
void loop () {// Siirrä moottoria ei sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); viive (2000); // Moottorin harjattu moottorin pysäytys (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); viive (2000); // Siirrä moottoria ei sentido antihorário harjattu_moottorin_taaksepäin (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); viive (2000); // Moottorin harjattu moottorin pysäytys (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); viive (2000); // Aceleracao i de 1 a 100 for (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Jono (i)); viive (200); } // Desaceleração i de 100 a 1 delay (5000); for (int i = 100; i> = 10; i-) {harjattu_moottorin_lähetys (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Jono (i)); viive (100); } viive (5000); }
Vaihe 9: Lataa tiedostot
INO
PIIRUSTUS