Sadržaj:

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

Video: Električna turbina s ESP32: 9 koraka

Video: Električna turbina s ESP32: 9 koraka
Video: Электро турбина на АВТО!! 2024, Studeni
Anonim
Image
Image
Demonstracija
Demonstracija

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

U ovom sam projektu koristio ESP32 LoRa 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 neovisno. 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 jamči ESP32 -u veliku fleksibilnost u pogledu upravljanja motorom.

Korak 1: Demonstracija

Korak 2: Upravljanje PWM motorom

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

Opći dijagram:

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

• Svaka jedinica ima tri PWM izlazna para.

• Svaki izlazni A / B par može se sinkronizirati s jednim od tri sinkronizacijska brojača 0, 1 ili 2.

• Jedan mjerač vremena može se koristiti za sinkronizaciju više od jednog PWM izlaznog para

Cijeli dijagram:

• Svaka jedinica također može 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šteni resursi
Korišteni resursi

• Kratkospojnici za spajanje

• Heltec Wi -Fi LoRa 32

• Uobičajeni istosmjerni motor

• Most H - L298N

• USB kabl

• Protoboard

• Napajanje

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

Mjerenje na osciloskopu
Mjerenje na osciloskopu

Korak 8: Izvorni kod

Zaglavlje

#include // Nije vam potrebno Caso korištenje Arduino IDE #include "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, saida A, porta GPIO) => Instancija o MCPWM0A bez pinoa GPIO_PWM0A_OUT deklarirano da ne dolazi do codiga mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A; MCPWM0A; // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancija o MCPWM0B bez pinoa GPIO_PWM0B_OUT deklarirano da ne dolazi do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0BP_M0_MPWM0B0_MPWM0B0_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

// Funkão que configuration o MCPWM operador A (Unidade, Timer, Porcentagem (ciclo de trabalho)) static void brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {// mc timer (0, 1 ili 2), Operador (A ili B)); => Desliga o sinal do MCPWM bez Operadora B (Definiraj 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)); => Konfigurirajte porcentagem za PWM bez Operadora 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)); => definirati ni 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" para manter o ciclo de trabalho configurado anteriormente} // Função que configura o MCPWM Do operador 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 sinal do MCPWM bez Operadora A (Definiraj 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 nível do ciclo de trabalho (alto ou baixo)} // Função que para o MCPWM de ambos os Operadores static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpw_ timer_num // Desliga o sinal do 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 () {// Pomakni motor bez sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50,0); oled ("50"); odgoda (2000); // Parametar motora brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); odgoda (2000); // Pomakni motor bez senzora antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); odgoda (2000); // Parametar motora brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); odgoda (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

INO

CRTANJE

Preporučeni: