Sadržaj:

Električna turbina sa ESP32: 9 koraka
Električna turbina sa ESP32: 9 koraka

Video: Električna turbina sa ESP32: 9 koraka

Video: Električna turbina sa ESP32: 9 koraka
Video: Why you should NOT to put a Turbonator into your car's air intake. 2024, Juli
Anonim
Image
Image
Demonstracija
Demonstracija

Danas ću razgovarati o električnoj turbini s ESP32. Sklop ima dio koji je štampan u 3D. Predstavit ću PWM funkciju ESP32 koja je pogodna za upravljanje elektromotorima. Ovo će se koristiti u istosmjernom motoru. Također ću pokazati rad ovog MCPWM -a (Motor Control PWM) u praktičnoj primjeni.

Koristio sam ESP32 LoRa u ovom projektu, i mislim da je važno napomenuti da ovaj mikrokontroler ima dva bloka unutar sebe. Ovi blokovi mogu upravljati po tri motora. Tako je moguće upravljati do šest motora s PWM -om, svi nezavisno. To znači da kontrola koju ću ovdje koristiti nije standardna (što je nešto slično Arduinu). Umjesto toga, kontrola je sam čip, koji garantira ESP32 -u veliku fleksibilnost u odnosu na kontrolu motora.

Korak 1: Demonstracija

Korak 2: Kontrola PWM motora

Upravljanje PWM motorom
Upravljanje PWM motorom
Upravljanje PWM motorom
Upravljanje PWM motorom

Opšti dijagram:

• Funkcija MCPWM ESP32 može se koristiti za upravljanje različitim vrstama elektromotora. Ima dvije jedinice.

• Svaka jedinica ima tri PWM izlazna para.

• Svaki izlazni A / B par se može sinhronizovati sa jednim od tri tajmera za sinhronizaciju 0, 1 ili 2.

• Jedan tajmer se može koristiti za sinhronizaciju više od jednog PWM izlaznog para

Cijeli dijagram:

• Svaka jedinica je također sposobna prikupljati ulazne signale kao SINKRONIZACIJSKI ZNAKOVI;

• Otkrijte ZNAKE KVARA za prekostruju ili prenapon motora;

• Dobijte povratne informacije pomoću SIGNALA ZA HVATANJE, kao što je položaj motora

Korak 3: Korišteni resursi

Korišćeni resursi
Korišćeni resursi

• Džemperi za povezivanje

• Heltec Wi -Fi LoRa 32

• Uobičajeni motor istosmjerne struje

• Most H - L298N

• USB kabl

• Protoboard

• Napajanje strujom

Korak 4: ESP 32 Dev Kit - Pinout

ESP 32 Dev Kit - Pinout
ESP 32 Dev Kit - Pinout

Korak 5: Montaža turbine

Montaža turbine
Montaža turbine
Montaža turbine
Montaža turbine

Korak 6: Krug - veze

Krug - veze
Krug - veze

Korak 7: Mjerenje na osciloskopu

Merenje na osciloskopu
Merenje na osciloskopu

Korak 8: Izvorni kod

Zaglavlje

#include // Nije vam potrebno da koristite Arduino IDE #uključuje "driver/mcpwm.h" // uključuje biblioteku "Motor Control PWM" nativa do ESP32 #include // Potrebni apeni za Arduino 1.6.5 i posteriorno #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" #define GPIO_PWM0A_OUT 12 // Declara GPIO 12 como PWM0A #define GPIO_PWM0B_OUT 14 // Declara GPIO 14 como PWM0B

Postaviti

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertical (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); // mcpwm_gpio_init (unidade PWM 0, reče A, porta GPIO) => Instancija o MCPWM0A bez pinoa GPIO_PWM0A_OUT deklarirano nema dolaska u kôd mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A; GPCPM0), MCPWM0A; // mcpwm_gpio_init (unidade PWM 0, reče B, porta GPIO) => Instancija o MCPWM0B bez pinoa GPIO_PWM0B_OUT deklarirano nema dolaska do codiga mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0BP_M0_MPWM0B0_MPWM0B0_MPWM0B0_MPWM0_MPWM0_0, MCPWM0_0; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frekvencija = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (radni ciklus) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (radni ciklus) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Za MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Definiraj ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definirajte PWM0A & PWM0B com kao konfiguraciju acima}

Funkcije

// Funkcionalna konfiguracija MCPWM operatora A (Unidade, Timer, Porcentagem (ciclo de trabalho)) statička praznina brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {// mc nodem (0, 1 ili 2), Operador (A ili B)); => Desliga o sinalu za MCPWM bez Operadora B (Definiši sinal em Baixo) mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // mcpwm_set_duty (jedinstvena PWM (0 ili 1), Numerički tajmer (0, 1 ili 2), Operador (A ili B), Ciclo de trabalho (% do PWM)); => Konfigurirajte porcentam za PWM bez Operadora A (Ciclo de trabalho) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle); // mcpwm_set_duty_tyoe (jedinstvena PWM (0 ili 1), Numerički tajmer (0, 1 ili 2), Operador (A ili B), Nivo do ciklo de trabaljo (alto ou baixo)); => definirati nivo do ciclo de trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Napomena: Chame essa função toda vez que for chamado "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" parametar o ciklo de trabalho konfiguraciji anteriormente} // Função que konfiguracija o MCPWM Uradi operater B (Unidade,, statička praznina 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 o sinalu za MCPWM bez Operadora A (Definiši sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Konfiguriranje porcentaža za PWM bez Operadora B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // definirati nivo do ciclo de trabalho (alto ou baixo)} // Função que para MCPWM de ambos os Operadores static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) // Desliga o sinalu za MCPWM bez Operadora A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // Desliga o sinal do MCPWM bez Operadora B}

Petlja

void loop () {// Premjesti motor bez senzora horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); kašnjenje (2000); // Parametar motora brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); kašnjenje (2000); // Pomaknite motor bez senzora antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); kašnjenje (2000); // Parametar motora brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); kašnjenje (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 (niz (i)); kašnjenje (200); } // Desaceleração i de 100 a 1 kašnjenje (5000); za (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (niz (i)); kašnjenje (100); } kašnjenje (5000); }

Korak 9: Preuzmite datoteke

PDF

JA NE

CRTANJE

Preporučuje se: