Talaan ng mga Nilalaman:

Electric Turbine Na May ESP32: 9 Mga Hakbang
Electric Turbine Na May ESP32: 9 Mga Hakbang

Video: Electric Turbine Na May ESP32: 9 Mga Hakbang

Video: Electric Turbine Na May ESP32: 9 Mga Hakbang
Video: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, Nobyembre
Anonim
Image
Image
Pagpapakita
Pagpapakita

Ngayon, tatalakayin ko ang isang electric turbine kasama ang ESP32. Ang pagpupulong ay may isang bahagi na nakalimbag sa 3D. Magpapakita ako ng isang pagpapaandar ng PWM ng ESP32 na angkop para sa pagkontrol ng mga de-kuryenteng motor. Gagamitin ito sa isang motor na DC. Ipapakita ko rin ang pagpapatakbo ng MCPWM na ito (Motor Control PWM) sa isang praktikal na aplikasyon.

Ginamit ko ang ESP32 LoRa sa proyektong ito, at sa palagay ko mahalaga na tandaan dito na ang microcontroller na ito ay may dalawang mga bloke sa loob nito. Ang mga bloke na ito ay may kakayahang kontrolin ang bawat tatlong motor. Kaya, posible na makontrol ang hanggang sa anim na motor na may PWM, lahat ay nakapag-iisa. Nangangahulugan ito na ang kontrol na gagamitin ko dito ay hindi pamantayan (na kung saan ay katulad ng Arduino). Sa halip, ang kontrol ay ang chip mismo, na ginagarantiyahan ang ESP32 ng maraming kakayahang umangkop patungkol sa motor control.

Hakbang 1: Pagpapakita

Hakbang 2: Pagkontrol sa PWM Motor

Pagkontrol sa PWM Motor
Pagkontrol sa PWM Motor
Pagkontrol sa PWM Motor
Pagkontrol sa PWM Motor

Pangkalahatang Diagram:

• Ang pagpapaandar ng MCPWM ng ESP32 ay maaaring magamit upang makontrol ang iba't ibang uri ng mga de-kuryenteng motor. Mayroon itong dalawang mga yunit.

• Ang bawat yunit ay may tatlong mga pares ng output ng PWM.

• Ang bawat pares ng output A / B ay maaaring mai-synchronize sa isa sa tatlong mga timer ng pagsasabay na 0, 1, o 2.

• Ang isang Timer ay maaaring magamit upang mai-synchronize ang higit sa isang pares ng output ng PWM

Buong Diagram:

• Ang bawat yunit ay may kakayahang mangolekta rin ng mga signal ng pag-input bilang SINYON NG SINCHRONIZATION;

• Makita ang mga FAULT SIGNS para sa sobrang lakas o sobrang lakas ng motor;

• Kumuha ng puna sa CAPTURE SIGNALS, tulad ng posisyon ng Engine

Hakbang 3: Ginamit na Mga Mapagkukunan

Ginamit na Mga Mapagkukunan
Ginamit na Mga Mapagkukunan

• Mga jumper para sa koneksyon

• Heltec Wifi LoRa 32

• Karaniwang DC motor

• Bridge H - L298N

• Kable ng USB

• Protoboard

• supply ng kuryente

Hakbang 4: ESP 32 Dev Kit - Pinout

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

Hakbang 5: Turbine Mounting

Pag-mount ng Turbine
Pag-mount ng Turbine
Pag-mount ng Turbine
Pag-mount ng Turbine

Hakbang 6: Circuit - Mga Koneksyon

Circuit - Mga Koneksyon
Circuit - Mga Koneksyon

Hakbang 7: Pagsukat sa Oscilloscope

Pagsukat sa Oscilloscope
Pagsukat sa Oscilloscope

Hakbang 8: Source Code

Header

#include // Kailangan mong magamit ang Arduino IDE # isama ang "driver / mcpwm.h" // inclui a biblioteca "Motor Control PWM" nativa do ESP32 #include // Necessário apenas para o Arduino 1.6.5 at 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 display SSD1306 (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

Pag-set up

void setup () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira isang tela verticalmente display. Malinaw (); // ajusta o alinhamento para sa isang 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 o MCPWM0A no pino GPIO_PWM0A_OUT decarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, GPA_M) // mcpwm_gpio_init (unidade PWM 0, saida B, porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0B, GPB_M) mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (duty cycle) gawin PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (duty cycle) gawin PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Define ciclo de trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Tukuyin ang PWM0A & PWM0B com bilang configurações acima}

Mga pagpapaandar

// Função que configura o MCPWM operador A (Unidade, Timer, Porcentagem (ciclo de trabalho)) static void brushing_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {// mspw_ timer (0, 1 ou 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 isang porcentagem gawin 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 trabalho (alto ou baixo)); => tukuyin o gawin gawin ciclo de trabalho (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" para manter o ciclo de trabalho configurado anteriormente} // Função que configura o MCPWM Do operador B (Unidadeem, Timalho) static void brushing_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 a porcentagem do PWM no Operador 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 brushing_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_wlm_ww_w // 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}

Loop

void loop () {// Ilipat o motor walang sentido horário brushing_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); pagkaantala (2000); // Para sa motor brushing_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); pagkaantala (2000); // Move o motor no sentido antihorário brushing_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); pagkaantala (2000); // Para sa motor brushing_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); pagkaantala (2000); // Aceleracao i de 1 a 100 para sa (int i = 10; i <= 100; i ++) {brushing_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); pagkaantala (200); } // Desaceleração i de 100 a 1 pagkaantala (5000); para sa (int i = 100; i> = 10; i -) {brushing_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (String (i)); pagkaantala (100); } pagkaantala (5000); }

Hakbang 9: I-download ang Mga File

PDF

INO

Pagguhit

Inirerekumendang: