
Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04



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


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

• 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

Pasul 5: Montarea turbinei


Pasul 6: Circuit - Conexiuni

Pasul 7: 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
EU NU
DESEN
Recomandat:
LM317 Regulator de tensiune reglabil: 6 trepte

Regulator de tensiune reglabil LM317: Aici am dori să vorbim despre regulatoarele de tensiune reglabile. Au nevoie de circuite mai complicate decât liniare. Ele pot fi folosite pentru a produce diferite ieșiri de tensiune fixă în funcție de circuit și, de asemenea, tensiune reglabilă prin potențiometru. Eu
Barcă electrică: 4 trepte

Barcă electrică: consumabile - cutie mică de plastic 2x motoare de curent continuu fire 1x întrerupător 2x elice 2x baterii de 9V pistol de adeziv fierbinte
Stație de comandă WiFi DCC pentru modelul feroviar: 5 trepte

Stație de comandă WiFi DCC pentru modelul feroviar: actualizată la 5 aprilie 2021: schiță nouă și componente pentru circuit. Schiță nouă: command_station_wifi_dcc3_LMD18200_v4.ino Sistem nou DCC nou, care utilizează WiFi pentru comunicarea instrucțiunilor. pentru
Jucării cu adaptare la comutare: jucării pe căi de urcare: 7 trepte

Jucării cu adaptare la comutare: jucării cu urcuș pe scări: adaptarea jucăriilor deschide noi căi și soluții personalizate pentru a permite copiilor cu abilități motorii limitate sau cu dizabilități de dezvoltare să interacționeze independent cu jucăriile. În multe cazuri, copiii care au nevoie de jucăriile adaptate nu pot să
Suport pentru dulap pentru ESP32 și ESP8266: 7 trepte

Suport pentru dulap pentru ESP32 și ESP8266: Uneori poate fi util să instalați proiectul dvs. bazat pe ESP32 sau ESP8266 într-un dulap și să îi oferiți un aspect profesional. Acest mic kit de carcasă vă va ajuta să vă aduceți proiectul ESP pe o șină DIN. Kitul include un PCB de prototipare cu