Cov txheej txheem:

Hluav Taws Xob Hluav Taws Xob Nrog ESP32: 9 Cov Kauj Ruam
Hluav Taws Xob Hluav Taws Xob Nrog ESP32: 9 Cov Kauj Ruam

Video: Hluav Taws Xob Hluav Taws Xob Nrog ESP32: 9 Cov Kauj Ruam

Video: Hluav Taws Xob Hluav Taws Xob Nrog ESP32: 9 Cov Kauj Ruam
Video: Hmong new song 2016 - Yog dab tsi - Xub Hluav Taws (Official MV) 2024, Lub Xya hli ntuj
Anonim
Image
Image
Qhia tawm
Qhia tawm

Hnub no, Kuv yuav tham txog lub tshuab hluav taws xob nrog ESP32. Lub rooj sib txoos muaj ib feem uas tau luam tawm hauv 3D. Kuv yuav nthuav qhia PWM ua haujlwm ntawm ESP32 uas tsim nyog rau kev tswj hwm cov tshuab hluav taws xob. Qhov no yuav raug siv hauv DC lub cav. Kuv tseem yuav qhia txog kev ua haujlwm ntawm MCPWM (Kev Tswj Lub Cev PWM) no hauv kev siv tau.

Kuv tau siv ESP32 LoRa hauv txoj haujlwm no, thiab kuv xav tias nws yog ib qho tseem ceeb uas yuav tsum tau sau tseg ntawm no tias lub microcontroller no muaj ob qhov thaiv hauv nws. Cov thaiv no muaj peev xwm tswj tau peb lub cav ib leeg. Yog li, nws muaj peev xwm tswj tau txog rau lub cav nrog PWM, txhua tus ntawm nws tus kheej. Qhov no txhais tau tias kev tswj hwm Kuv yuav siv ntawm no tsis yog tus qauv (uas yog qee yam zoo ib yam li Arduino). Hloov chaw, kev tswj hwm yog lub nti nws tus kheej, uas tau lees paub ESP32 ntau qhov kev hloov pauv nrog kev hwm tswj lub cev.

Kauj Ruam 1: Qhia tawm

Kauj Ruam 2: PWM Tsav Tswj

PWM Motor Control
PWM Motor Control
PWM Motor Control
PWM Motor Control

Daim duab dav dav:

• MCPWM muaj nuj nqi ntawm ESP32 tuaj yeem siv los tswj ntau hom tshuab hluav taws xob. Nws muaj ob chav.

• Txhua chav tsev muaj peb qho PWM tso ua ke.

• Txhua qhov tso tawm A / B khub tuaj yeem ua ke nrog ib ntawm peb lub sijhawm sib xyaw 0, 1, lossis 2.

• Ib Timer tuaj yeem siv ua ke ntau dua ib qho PWM tso ua ke

Daim duab qhia tag nrho:

• Txhua chav tsev tseem muaj peev xwm sau cov cim tawm tswv yim raws li SYNCHRONIZATION SIGNS;

• Tshawb xyuas FAULT SIGNS rau overcurrent lossis motor overvoltage;

• Tau txais kev tawm tswv yim nrog CAPTURE SIGNALS, xws li txoj haujlwm ntawm Lub Cav

Kauj Ruam 3: Cov Khoom Siv

Cov peev txheej siv
Cov peev txheej siv

• Jumpers rau kev txuas

• Heltec Wifi LoRa 32

• Hom DC lub cev muaj zog

• Choj H - L298N

• USB cable

• Protoboard

• Lub hwj chim

Kauj Ruam 4: ESP 32 Dev Cov Khoom - Pinout

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

Kauj ruam 5: Turbine Mounting

Turbine Mounting
Turbine Mounting
Turbine Mounting
Turbine Mounting

Kauj Ruam 6: Circuit - Kev Sib Txuas

Circuit Court - Kev sib txuas
Circuit Court - Kev sib txuas

Kauj Ruam 7: Kev ntsuas ntawm Oscilloscope

Kev ntsuas ntawm Oscilloscope
Kev ntsuas ntawm Oscilloscope

Kauj ruam 8: Source Code

Lub taub hau

#include // Não é necessário caso siv Arduino IDE #suav nrog "driver/mcpwm.h" // inclui a biblioteca "Motor Control PWM" nativa do ESP32 #include // Necessário apenas para 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 zaub (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

Teeb

teeb tsa tsis muaj dab tsi () {Serial.begin (115200); display.init (); //display.flipScreenVertically (); // Vira a tela verticalmente display.clear (); // ajusta o alinhamento para a esquerda display.setTextAlignment (TEXT_ALIGN_LEFT); // ajusta a fonte para Arial 16 display.setFont (ArialMT_Plain_16); // mcpwm_gpio_init (unidade PWM 0, hais A, porta GPIO) => Instancia o MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A, GPIO_PWM0A, GPIO_PWM0A, GPIO_PWM0A, GPIO_PWM0A, GPIO_PWM0A) // 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, GPIO_PWM0) 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 trabalho em nível alto // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // Define PWM0A & PWM0B com as configurações acima}

Kev ua haujlwm

// Função que configura o MCPWM operador A (Unidade, Timer, Porcentagem (ciclo de trabalho)) static void (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 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 trabalho (alto ou baixo)); => txhais o nível do 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 (Unidade, Timer,) 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 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); // กำหนด o nível do ciclo de trabalho (alto ou baixo)} // Função que para o MCPWM de ambos os Operadores static void brushed_motor_stop (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num) {mcpwm_er, // 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 () {// Txav mus rau lub cev muaj zog tsis muaj kev xa khoom horário txhuam_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); ncua (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); loj ("0"); ncua (2000); // Txo lub cev muaj zog tsis muaj kev tiv thaiv antihorário txhuam_motor_backward (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); ncua (2000); // Para o motor brushed_motor_stop (MCPWM_UNIT_0, MCPWM_TIMER_0); loj ("0"); ncua (2000); // Aceleracao i de 1 a 100 rau (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Txoj hlua (i)); ncua (200); } // Desaceleração i de 100 a 1 ncua (5000); rau (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (Txoj hlua (i)); ncua (100); } ncua (5000); }

Kauj ruam 9: Rub tawm Cov Ntaub Ntawv

PDF

INO

Kos duab

Pom zoo: