Cuprins:

Turbină electrică cu ESP32: 9 trepte
Turbină electrică cu ESP32: 9 trepte

Video: Turbină electrică cu ESP32: 9 trepte

Video: Turbină electrică cu ESP32: 9 trepte
Video: Sinko 80A MPPT Hybrid Solar Charge Controller Connections. #mppt #sinkomppt #sinko #HybridMPPT 2024, Noiembrie
Anonim
Image
Image
Demonstrație
Demonstrație

Astăzi, voi discuta despre o turbină electrică cu ESP32. Ansamblul are o parte care a fost tipărită în 3D. Voi prezenta o funcție PWM a ESP32 care este potrivită pentru controlul motoarelor electrice. Acesta va fi utilizat într-un motor DC. De asemenea, voi demonstra funcționarea acestui MCPWM (Motor Control PWM) într-o aplicație practică.

Am folosit ESP32 LoRa în acest proiect și cred că este important să menționăm aici că acest microcontroler are două blocuri în interiorul său. Aceste blocuri sunt capabile să controleze trei motoare fiecare. Astfel, este posibil să controlați până la șase motoare cu PWM, toate independent. Aceasta înseamnă că controlul pe care îl voi folosi aici nu este standard (care este ceva similar cu Arduino). În schimb, controlul este în sine cipul, care garantează ESP32 multă flexibilitate în ceea ce privește controlul motorului.

Pasul 1: demonstrație

Pasul 2: Controlul motorului PWM

Control motor PWM
Control motor PWM
Control motor PWM
Control motor PWM

Diagrama generală:

• Funcția MCPWM a ESP32 poate fi utilizată pentru a controla diferite tipuri de motoare electrice. Are două unități.

• Fiecare unitate are trei perechi de ieșire PWM.

• Fiecare pereche A / B de ieșire poate fi sincronizată cu unul dintre cele trei temporizatoare de sincronizare 0, 1 sau 2.

• One Timer poate fi utilizat pentru a sincroniza mai multe perechi de ieșiri PWM

Diagrama completă:

• Fiecare unitate este, de asemenea, capabilă să colecteze semnale de intrare ca SEMNE DE SINCRONIZARE;

• Detectați SEMNE DE DEFECȚIE pentru supratensiune sau supratensiune a motorului;

• Obțineți feedback cu SEMNALE CAPTURĂ, cum ar fi poziția motorului

Pasul 3: Resurse utilizate

Resurse utilizate
Resurse utilizate

• Jersee pentru conexiune

• Heltec Wifi LoRa 32

• Motor DC comun

• Podul H - L298N

• Cablu USB

• Protoboard

• Alimentare electrică

Pasul 4: kitul ESP 32 Dev - Pinout

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

Pasul 5: Montarea turbinei

Montarea turbinei
Montarea turbinei
Montarea turbinei
Montarea turbinei

Pasul 6: Circuit - Conexiuni

Circuit - Conexiuni
Circuit - Conexiuni

Pasul 7: Măsurarea pe osciloscop

Măsurarea pe osciloscop
Măsurarea pe osciloscop

Pasul 8: Cod sursă

Antet

#include // Não é necessário caso use Arduino IDE # include "driver / mcpwm.h" // inclui a biblioteca "Motor Control PWM" nativa do ESP32 #include // Necessário apenas for 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 display (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do object "display" #define GPIO_PWM0A_OUT 12 // Declara GPIO 12 como PWM0A #define GPIO_PWM0B_OUT 14 // Declara GPIO 14 como PWM0B

Înființat

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o aliniament pentru a afișa stânga.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte pentru Arial 16 display.setFont (ArialMT_Plain_16); // mcpwm_gpio_init (unidade PWM 0, saida A, porta GPIO) => Instanță o MCPWM0A nu pino GPIO_PWM0A_OUT declarat fără venirea codului mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A), GPIO_PW; // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instanță o MCPWM0B nu pino GPIO_PWM0B_OUT declarat fără venirea codului mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B, GPIO_PW; mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (duty cycle) do PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (duty cycle) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Define ciclo de lucru em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Definiți PWM0A și PWM0B com ca configurações acima}

Funcții

// Funcția care configurează MCPWM operator 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) {// mcpwal_l (() (0, 1 sau 2), Operador (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 (unidade PWM (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% do PWM)); => Configura a porcentagem do 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 lucru (alto ou baixo)); => define o nível do ciclo de lucru (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Nota: Chame essa função toda vez que for chamado "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" pentru manter o ciclo de lucru configurat anterior} // Função que configura o MCPWM Do operador B (Unidade, Timer, Porcentagem (ciclo de trabalho)) 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); // Configurați un porcentagem pentru PWM fără Operator B (Ciclo de lucru) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // define o nível do cycle de trabalho (alto ou baixo)} // Funcția că pentru o MCPWM de ambii os Operatori static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_set_signal_low, // 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}

Buclă

void loop () {// Move o motor no sense horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); întârziere (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); întârziere (2000); // Mutați motorul fără sens antihorário brushed_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); întârziere (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); întârziere (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 (String (i)); întârziere (200); } // Desaceleração i de 100 a 1 delay (5000); for (int i = 100; i> = 10; i -) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); întârziere (100); } întârziere (5000); }

Pasul 9: Descărcați fișierele

PDF

EU NU

DESEN

Recomandat: