תוכן עניינים:

טורבינה חשמלית עם ESP32: 9 שלבים
טורבינה חשמלית עם ESP32: 9 שלבים

וִידֵאוֹ: טורבינה חשמלית עם ESP32: 9 שלבים

וִידֵאוֹ: טורבינה חשמלית עם ESP32: 9 שלבים
וִידֵאוֹ: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, יולי
Anonim
Image
Image
הפגנה
הפגנה

היום אדון בטורבינה חשמלית עם ESP32. במכלול יש חלק שהודפס בתלת מימד. אציג פונקציית PWM של ה- ESP32 המתאימה לשליטה במנועים חשמליים. זה ישמש במנוע DC. כמו כן אדגים את פעולתו של MCPWM זה (Motor Control PWM) ביישום מעשי.

השתמשתי ב- ESP32 LoRa בפרויקט זה, ואני חושב שחשוב לציין כאן שלמיקרו -בקר זה יש שני בלוקים בתוכו. בלוקים אלה מסוגלים לשלוט בשלושה מנועים כל אחד. לפיכך, ניתן לשלוט בעד שישה מנועים באמצעות PWM, כולם באופן עצמאי. המשמעות היא שהבקרה שבה אשתמש כאן היא לא הסטנדרט (שהוא משהו דומה לארדואינו). במקום זאת, השליטה היא השבב עצמו, המבטיח ל- ESP32 גמישות רבה ביחס לשליטה המנועית.

שלב 1: הפגנה

שלב 2: בקרת מנוע PWM

בקרת מנוע PWM
בקרת מנוע PWM
בקרת מנוע PWM
בקרת מנוע PWM

תרשים כללי:

• ניתן להשתמש בפונקציית MCPWM של ה- ESP32 לשליטה במנועים חשמליים מסוגים שונים. יש לה שתי יחידות.

• לכל יחידה שלושה זוגות פלט PWM.

• ניתן לסנכרן כל זוג פלט A / B עם אחד משלושה טיימרים של סנכרון 0, 1 או 2.

• ניתן להשתמש בטיימר אחד לסנכרן יותר מצמד פלט PWM אחד

תרשים מלא:

• כל יחידה מסוגלת גם לאסוף אותות קלט כסימני סינכרון;

• זיהוי סימני תקלה עבור זרם יתר או מתח יתר של המנוע;

• קבל משוב באמצעות CAPTURE SIGNALS, כגון מיקום המנוע

שלב 3: שימוש במשאבים

משאבים בשימוש
משאבים בשימוש

• מגשרים לחיבור

• Heltec Wifi LoRa 32

• מנוע DC משותף

• גשר H - L298N

• כבל יו אס בי

• פרוטובורד

• ספק כוח

שלב 4: ערכת Dev ESP 32 - Pinout

ערכת Dev ESP 32 - Pinout
ערכת Dev ESP 32 - Pinout

שלב 5: הרכבת טורבינה

הרכבת טורבינה
הרכבת טורבינה
הרכבת טורבינה
הרכבת טורבינה

שלב 6: מעגל - חיבורים

מעגל - חיבורים
מעגל - חיבורים

שלב 7: מדידה באוסילוסקופ

מדידה על אוסצילוסקופ
מדידה על אוסצילוסקופ

שלב 8: קוד המקור

כּוֹתֶרֶת

#include // Não é nødvendário caso use Arduino IDE #include "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 display1306 display (0x3c, SDA, SCL, RST); // Instanciando and 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

להכין

הגדרת חלל () {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, saida A, porta GPIO) => Instancia o MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init (MCPWM_UNIT_0, MCPWM0, // 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, MCPWM0, MCPWM0) mcpwm_config_t pwm_config; pwm_config.frequency = 1000; // frequência = 500Hz, pwm_config.cmpr_a = 0; // Ciclo de trabalho (מחזור תפקיד) לעשות PWMxA = 0 pwm_config.cmpr_b = 0; // Ciclo de trabalho (מחזור תפקיד) לעשות PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; // עבור MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // הגדר ciclo de trabalho em nível alt // Inicia (Unidade 0, Timer 0, Config PWM) mcpwm_init (MCPWM_UNIT_0, MCPWM_TIMER_0, & pwm_config); // הגדר את PWM0A & PWM0B com כתצורות acima}

פונקציות

// Função que configura o MCPWM operador 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_ (0, 1 או 2), אופרדור (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 (PWM unidade (0 ou 1), מספר מספר טיימר (0, 1 ou 2), אופרדור (A ou B), Ciclo de trabalho (% do PWM)); => תצורת פורמט של PWM ללא מפעיל 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), Numero do timer (0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto baixo)); => הגדר o nível do ciclo de trabalho (alto baixo) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0); // שים לב: 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), Timo חלל סטטי 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); // תצורת תצורת PWM ללא מפעיל B (Ciclo de trabalho) mcpwm_set_duty_type (mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0); // הגדירו את כל התהליכים (alto 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_num_m_, _m_p_m_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}

לוּלָאָה

לולאת חלל () {// העברה למנוע ללא סנטידו הורריו מוברש_מנוע_קדימה (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled ("50"); עיכוב (2000); // מאופנוע מנוע מוברש_מנוע (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); עיכוב (2000); // הזז או מנוע ללא סנטידו אנטי הורריו מוברש_אחור_מנוע (MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled ("25"); עיכוב (2000); // מאופנוע מנוע מוברש_מנוע (MCPWM_UNIT_0, MCPWM_TIMER_0); oled ("0"); עיכוב (2000); // Aceleracao i de 1 a 100 עבור (int i = 10; i <= 100; i ++) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (מחרוזת (i)); עיכוב (200); } // Desaceleração i de 100 a 1 delay (5000); עבור (int i = 100; i> = 10; i-) {brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled (מחרוזת (i)); עיכוב (100); } עיכוב (5000); }

שלב 9: הורד את הקבצים

PDF

INO

צִיוּר

מוּמלָץ: