Përmbajtje:
Video: Turbinë elektrike me ESP32: 9 hapa
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Sot, unë do të diskutoj një turbinë elektrike me ESP32. Asambleja ka një pjesë që është shtypur në 3D. Unë do të paraqes një funksion PWM të ESP32 që është i përshtatshëm për kontrollin e motorëve elektrikë. Kjo do të përdoret në një motor DC. Unë gjithashtu do të demonstroj funksionimin e këtij MCPWM (Motor Control PWM) në një aplikim praktik.
Kam përdorur ESP32 LoRa në këtë projekt, dhe mendoj se është e rëndësishme të theksohet këtu se ky mikrokontrollues ka dy blloqe brenda tij. Këto blloqe janë të afta të kontrollojnë tre motorë secila. Kështu, është e mundur të kontrollohen deri në gjashtë motorë me PWM, të gjithë në mënyrë të pavarur. Kjo do të thotë që kontrolli që do të përdor këtu nuk është standardi (i cili është diçka e ngjashme me Arduino). Në vend të kësaj, kontrolli është vetë çipi, i cili i garanton ESP32 shumë fleksibilitet në lidhje me kontrollin e motorit.
Hapi 1: Demonstrim
Hapi 2: Kontrolli i motorit PWM
Diagrami i Përgjithshëm:
• Funksioni MCPWM i ESP32 mund të përdoret për të kontrolluar lloje të ndryshme të motorëve elektrikë. Ajo ka dy njësi.
• Çdo njësi ka tre çifte dalëse PWM.
• Çdo palë dalëse A / B mund të sinkronizohet me një nga tre kohëmatësit e sinkronizimit 0, 1 ose 2.
• Një kohëmatës mund të përdoret për të sinkronizuar më shumë se një palë dalëse PWM
Diagrami i plotë:
• Çdo njësi është gjithashtu e aftë të mbledhë sinjale hyrëse si SHENJA SINKRONIZIMI;
• Zbulimi i SHENJAVE TUL FAKTIT për mbitensionin e tepërt ose motorik;
• Merrni reagime me sinjalet e kapjes, siç është pozicioni i Motorit
Hapi 3: Burimet e përdorura
• Kërcyesit për lidhje
• Heltec Wifi LoRa 32
• Motori i zakonshëm DC
• Ura H - L298N
• Kabllo USB
• Protoboard
• Furnizimi me energji elektrike
Hapi 4: ESP 32 Dev Kit - Pinout
Hapi 5: Montimi i turbinës
Hapi 6: Qarku - Lidhjet
Hapi 7: Matja në osciloskop
Hapi 8: Kodi Burimor
Kokë
#include // Ne nuk kemi nevojë të përdorim Arduino IDE #përfshijnë "shoferin/mcpwm.h" // përfshijnë një bibliotekë "Motor Control PWM" nativa do ESP32 #include // Nevojat për para për Arduino 1.6.5 e pasme #përfshi " 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 ekran (0x3c, SDA, SCL, RST); // Instanciando e ajustando os pinos do objeto "display" #define GPIO_PWM0A_OUT 12 // Deklarata GPIO 12 e mëparshme PWM0A #define GPIO_PWM0B_OUT 14 // Declara GPIO 14 como PWM0B
Konfigurimi
void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertical (); // Vira a tela verticalmente display.clear (); // austa o alinhamento për një ekran esquerda.setTextAlignment (TEXT_ALIGN_LEFT); // austa a fonte para Arial 16 display.setFont (ArialMT_Plain_16); // mcpwm_gpio_init (PWM unidade 0, saida A, porta GPIO) => Instancia o MCPWM0A jo pino GPIO_PWM0A_OUT declarado jo começo bëjë código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT); // mcpwm_gpio_init (PWM unidade 0, saida B, porta GPIO) => Instancia o MCPWM0B jo pino GPIO_PWM0B_OUT declarado jo começo bëjë código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT); mcpwm_config_t pwm_config; pwm_config.frekuenca = 1000; // frekuencia = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (cikli i punës) deri PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (cikli i punës) bëni PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Përcaktoni ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Përcaktoni PWM0A & PWM0B com si konfigurime acima}
Funksione
// Funksioni i konfigurimit të operatorit MCPWM A (Unidade, Kohëmatësi, Porcentagem (ciclo de trabalho)) zbrazëti statike e krehur_motor_para (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num_mummum (0, 1 ou 2), Operador (A ou B)); => Designa ose sinal do MCPWM pa Operador B (Përcakto em sinal em Baixo) mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // mcpwm_set_duty (PWM unidade (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Ciclo de trabalho (% do PWM)); => Konfiguro një porcentagem për PWM jo Operador A (Ciclo de trabalho) mcpwm_set_duty (mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle); // mcpwm_set_duty_tyoe (PWM unidade (0 ou 1), Número do timer (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto ou baixo)); => përkufizo çdo gjë që bëni në trabalho (alto ou baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // Shënim: Chame essa função toda vez que for chamado "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" para manter ose ciclo de trabalho configurado anteriormente} // Funksioni i konfigurimit ose MCPWO De operador Tim (Un), operatori B (Un) zbrazëti statike e krehur_motor_pasmë (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); // Konfiguro një porcentagem për PWM jo Operador B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // përcaktojë o Nivel të bëjë Ciclo de trabalho (Alto ou Baixo)} // Função que para o MCPWM de Ambos os Operadores brushed_motor_stop statike void (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_A); // Prejardhje në MCPWM pa Operador A mcpwm_set_signal_low (mcpwm_num, timer_num, MCPWM_OPR_B); // Desliga o sinal do MCPWM pa Operador B}
Lak
lak i pavlefshëm () {// Lëvizni me motor pa sentido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); i lyer ("50"); vonesa (2000); // Para o motor me furçë_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); i lyer ("0"); vonesa (2000); // Lëvizni nga motori pa ndonjë antihorári të pastruar_motor_para -prapa (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); i lyer ("25"); vonesa (2000); // Para o motor me furçë_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); i lyer ("0"); vonesa (2000); // Aceleracao i de 1 a 100 për (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); i lyer (Vargu (i)); vonesë (200); } // Desaceleração i de 100 një vonesë 1 (5000); për (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); i lyer (Vargu (i)); vonesë (100); } vonesë (5000); }
Hapi 9: Shkarkoni skedarët
INO
Vizatim