Turinys:

Elektrinė turbina su ESP32: 9 žingsniai
Elektrinė turbina su ESP32: 9 žingsniai

Video: Elektrinė turbina su ESP32: 9 žingsniai

Video: Elektrinė turbina su ESP32: 9 žingsniai
Video: Conmutador para dos focos 💡💡 2024, Lapkritis
Anonim
Image
Image
Demonstracija
Demonstracija

Šiandien aš aptarsiu elektrinę turbiną su ESP32. Surinkime yra dalis, kuri buvo atspausdinta 3D formatu. Pateiksiu ESP32 PWM funkciją, tinkančią valdyti elektros variklius. Tai bus naudojama nuolatinės srovės variklyje. Taip pat praktiškai parodysiu šio MCPWM (variklio valdymo PWM) veikimą.

Šiame projekte naudojau ESP32 LoRa ir manau, kad čia svarbu pažymėti, kad šio mikrovaldiklio viduje yra du blokai. Šie blokai gali valdyti po tris variklius. Taigi galima valdyti iki šešių variklių su PWM, visi nepriklausomai. Tai reiškia, kad čia naudojamas valdiklis nėra standartas (kuris yra kažkas panašaus į „Arduino“). Vietoj to, valdymas yra pats lustas, kuris garantuoja ESP32 daug lankstumo variklio valdymo atžvilgiu.

1 žingsnis: demonstracija

2 žingsnis: PWM variklio valdymas

PWM variklio valdymas
PWM variklio valdymas
PWM variklio valdymas
PWM variklio valdymas

Bendra schema:

• ESP32 MCPWM funkcija gali būti naudojama įvairių tipų elektros varikliams valdyti. Jame yra du vienetai.

• Kiekvienas įrenginys turi tris PWM išvesties poras.

• Kiekvieną išvesties A / B porą galima sinchronizuoti su vienu iš trijų 0, 1 arba 2 sinchronizavimo laikmačių.

• Vienas laikmatis gali būti naudojamas sinchronizuoti daugiau nei vieną PWM išvesties porą

Visa diagrama:

• Kiekvienas įrenginys taip pat gali rinkti įvesties signalus kaip SINCHRONIZACIJOS ŽENKLAI;

• aptikti perteklinės srovės ar variklio viršįtampio gedimo signalus;

• Gaukite atsiliepimų naudodami CAPTURE SIGNALS, pvz., Variklio padėtį

3 žingsnis: naudojami ištekliai

Naudojami ištekliai
Naudojami ištekliai

• Džemperiai prijungimui

• „Heltec Wifi LoRa 32“

• Įprastas nuolatinės srovės variklis

• Tiltas H - L298N

• USB kabelis

• Protoboard

• Maitinimo šaltinis

4 žingsnis: „ESP 32 Dev Kit“- „Pinout“

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

5 žingsnis: Turbinos montavimas

Turbinos montavimas
Turbinos montavimas
Turbinos montavimas
Turbinos montavimas

6 žingsnis: grandinė - jungtys

Grandinė - jungtys
Grandinė - jungtys

7 žingsnis: matavimas osciloskopu

Matavimas osciloskopu
Matavimas osciloskopu

8 žingsnis: šaltinio kodas

Antraštė

#įtraukti // Nereikia naudoti „Arduino IDE“#include "driver/mcpwm.h" // įtraukti biblioteka "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 ekranas (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

Sąranka

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // valdymas arba 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 arba MCPWM0A no pino GPIO_PWM0A_OUT deklaracija Nr começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPIO_P0M, // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia arba MCPWM0B no pino GPIO_PWM0B_OUT deklaracija Nr começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPIO_P0M, mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (darbo ciklas) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (darbo ciklas) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Apibrėžti ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0 ir pwm_config); // PWM0A & PWM0B com apibrėžti kaip konfigūraciją acima}

Funkcijos

// „Função que configura“arba „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_cim“) (0, 1 ou 2), Operatorius (A ou B)); => Desliga o 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 (nebaigtas PWM (0 ou 1), Número do timer (0, 1 ou 2), Operatorius (A ou B), Ciclo de trabalho (% iki PWM)); => Konfigūruokite dalį PWM be Operatoriaus 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)); => apibrėžti nicvel do ciclo de trabalho (alto arba baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Pastaba: 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, static 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 o sinal do MCPWM no Operador A (Define o sinal em Baixo) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); // PWM konfigūravimas be operacinės sistemos 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 static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) tmc_mw // Desliga o 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}

Kilpa

void loop () {// Move o motor no sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); esi („50“); vėlavimas (2000 m.); // Para arba variklio šepečiu_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); esi ("0"); vėlavimas (2000 m.); // Perkelti variklį be sentido antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); esi („25“); vėlavimas (2000 m.); // Para arba variklio šepečiu_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); esi ("0"); vėlavimas (2000 m.); // Aceleracao i de 1 a 100 for (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Styga (i)); vėlavimas (200); } // Deaceleração i de 100 a 1 delay (5000); už (int i = 100; i> = 10; i-) {šepečio_motorinis_pardavimas (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Styga (i)); vėlavimas (100); } uždelsimas (5000); }

9 veiksmas: atsisiųskite failus

PDF

AŠ NE

PIEŠIMAS

Rekomenduojamas: