Përmbajtje:

Turbinë elektrike me ESP32: 9 hapa
Turbinë elektrike me ESP32: 9 hapa

Video: Turbinë elektrike me ESP32: 9 hapa

Video: Turbinë elektrike me ESP32: 9 hapa
Video: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Korrik
Anonim
Image
Image
Demonstrim
Demonstrim

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

Kontrolli i motorit PWM
Kontrolli i motorit PWM
Kontrolli i motorit PWM
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

Burimet e Përdorura
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

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

Hapi 5: Montimi i turbinës

Montimi i Turbinës
Montimi i Turbinës
Montimi i Turbinës
Montimi i Turbinës

Hapi 6: Qarku - Lidhjet

Qarku - Lidhjet
Qarku - Lidhjet

Hapi 7: Matja në osciloskop

Matja në osciloskop
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

PDF

INO

Vizatim

Recommended: