Kazalo:

Električna turbina z ESP32: 9 korakov
Električna turbina z ESP32: 9 korakov

Video: Električna turbina z ESP32: 9 korakov

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

Danes bom razpravljal o električni turbini z ESP32. Sestava ima del, ki je bil natisnjen v 3D. Predstavil bom funkcijo PWM ESP32, ki je primerna za krmiljenje elektromotorjev. To se bo uporabljalo pri enosmernem motorju. Delovanje tega MCPWM (Motor Control PWM) bom tudi prikazal v praktični uporabi.

V tem projektu sem uporabil ESP32 LoRa in mislim, da je tukaj pomembno omeniti, da ima ta mikrokrmilnik dva bloka. Ti bloki lahko upravljajo po tri motorje. Tako je mogoče krmiliti do šest motorjev s PWM, vse samostojno. To pomeni, da nadzor, ki ga bom uporabil tukaj, ni standard (kar je nekaj podobnega Arduinu). Namesto tega je krmiljenje sam čip, ki ESP32 zagotavlja veliko prilagodljivosti glede krmiljenja motorja.

1. korak: demonstracija

2. korak: krmiljenje motorja s PWM

Krmiljenje motorja PWM
Krmiljenje motorja PWM
Krmiljenje motorja PWM
Krmiljenje motorja PWM

Splošni diagram:

• Funkcijo MCPWM ESP32 lahko uporabite za krmiljenje različnih vrst elektromotorjev. Ima dve enoti.

• Vsaka enota ima tri izhodne pare PWM.

• Vsak izhodni A / B par je mogoče sinhronizirati z enim od treh časovnikov sinhronizacije 0, 1 ali 2.

• En časovnik lahko uporabite za sinhronizacijo več kot enega izhodnega para PWM

Celoten diagram:

• Vsaka enota lahko zbira tudi vhodne signale kot SINKRONIZACIJSKI ZNAKI;

• Zaznajte znake napak za prenapetost ali prenapetost motorja;

• Pridobite povratne informacije s signali za zajem, na primer o položaju motorja

3. korak: Uporabljeni viri

Uporabljeni viri
Uporabljeni viri

• Mostički za povezavo

• Heltec Wi -Fi LoRa 32

• Skupni enosmerni motor

• Most H - L298N

• USB kabel

• Protoboard

• Napajanje

4. korak: ESP 32 Dev Kit - Pinout

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

5. korak: Montaža turbine

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

6. korak: Vezje - Povezave

Vezje - Povezave
Vezje - Povezave

7. korak: Merjenje na osciloskopu

Meritve na osciloskopu
Meritve na osciloskopu

8. korak: izvorna koda

Glava

#include // Ni potrebe po uporabi Arduino IDE #vključujejo "driver/mcpwm.h" // vključuje biblioteco "Motor Control PWM" nativa do ESP32 #include // Potrebni apeni za Arduino 1.6.5 e 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 Zaslon SSD1306 (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

Nastaviti

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertical (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento za 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 o MCPWM0A brez pino GPIO_PWM0A_OUT deklarirano no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A; MCPWM0A; // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia o MCPWM0B brez pino GPIO_PWM0B_OUT deklarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B0_MPWO00; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frekvenca = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (obratovalni cikel) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (obratovalni cikel) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Parameter MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Določimo ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Določimo PWM0A in PWM0B com kot konfiguracijo acima}

Funkcije

// Funkão que konfiguracije o operaterju MCPWM 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 (0, 1 ali 2), Operador (A ali B)); => Desliga o sinal do MCPWM brez Operador 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 brez 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)); => opredeliti nikjer do cikla de trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Opomba: 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čna 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 brez Operador A (Definiraj sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // Konfiguriramo porcentage do PWM brez Operadorja B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // Določite stopnjo cikla de trabalho (alto ou baixo)} // Função que para ali MCPWM de ambos os Operadores static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_m timer_num // Desliga o sinal do MCPWM brez Operador A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // Desliga o sinal do MCPWM brez Operadorja B}

Zanka

void loop () {// Premakni motor brez občutka horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50,0); oled ("50"); zamuda (2000); // Parameter motorja brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); zamuda (2000); // Premakni motor brez senzorja antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); zamuda (2000); // Parameter motorja brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); zamuda (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)); zamuda (200); } // Desaceleração i de 100 a 1 zamuda (5000); for (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (niz (i)); zamuda (100); } zakasnitev (5000); }

9. korak: Prenesite datoteke

PDF

JAZ NE

RISBA

Priporočena: