สารบัญ:

กังหันไฟฟ้าพร้อม ESP32: 9 ขั้นตอน
กังหันไฟฟ้าพร้อม ESP32: 9 ขั้นตอน

วีดีโอ: กังหันไฟฟ้าพร้อม ESP32: 9 ขั้นตอน

วีดีโอ: กังหันไฟฟ้าพร้อม ESP32: 9 ขั้นตอน
วีดีโอ: ไฟฟ้าจากกังหันลม#ตอนที่2 Diy Wind turbine generator #Episode2 2024, กรกฎาคม
Anonim
Image
Image
สาธิต
สาธิต

วันนี้ผมจะมาพูดถึงเทอร์ไบน์ไฟฟ้ากับ ESP32 การประกอบมีส่วนที่พิมพ์ในแบบ 3 มิติ ฉันจะนำเสนอฟังก์ชั่น PWM ของ ESP32 ที่เหมาะสำหรับการควบคุมมอเตอร์ไฟฟ้า ซึ่งจะใช้ในมอเตอร์กระแสตรง ฉันจะสาธิตการทำงานของ MCPWM (Motor Control PWM) นี้ในแอปพลิเคชันที่ใช้งานได้จริง

ฉันใช้ ESP32 LoRa ในโครงการนี้ และฉันคิดว่าสิ่งสำคัญที่ควรทราบคือไมโครคอนโทรลเลอร์นี้มีสองช่วงตึกอยู่ภายใน บล็อกเหล่านี้สามารถควบคุมมอเตอร์ได้สามตัวแต่ละตัว ดังนั้นจึงสามารถควบคุมมอเตอร์ได้ถึงหกตัวด้วย PWM ทั้งหมดโดยอิสระ ซึ่งหมายความว่าการควบคุมที่ฉันจะใช้ที่นี่ไม่ใช่มาตรฐาน (ซึ่งคล้ายกับ Arduino) ในทางกลับกัน ส่วนควบคุมคือตัวชิปเอง ซึ่งรับประกันว่า ESP32 จะมีความยืดหยุ่นอย่างมากในส่วนที่เกี่ยวกับการควบคุมมอเตอร์

ขั้นตอนที่ 1: การสาธิต

ขั้นตอนที่ 2: การควบคุมมอเตอร์ PWM

การควบคุมมอเตอร์ PWM
การควบคุมมอเตอร์ PWM
การควบคุมมอเตอร์ PWM
การควบคุมมอเตอร์ PWM

แผนภาพทั่วไป:

• ฟังก์ชัน MCPWM ของ ESP32 สามารถใช้ควบคุมมอเตอร์ไฟฟ้าประเภทต่างๆ ได้ มันมีสองหน่วย

• แต่ละยูนิตมีเอาต์พุต PWM สามคู่

• แต่ละคู่เอาต์พุต A / B สามารถซิงโครไนซ์กับตัวจับเวลาการซิงโครไนซ์หนึ่งในสามตัว 0, 1 หรือ 2

• ตัวจับเวลาหนึ่งตัวสามารถใช้เพื่อซิงโครไนซ์เอาต์พุต PWM มากกว่าหนึ่งคู่

แผนภาพเต็ม:

• แต่ละยูนิตยังสามารถรวบรวมสัญญาณอินพุตเป็นสัญญาณซิงโครไนซ์

• ตรวจจับสัญญาณผิดพลาดสำหรับกระแสไฟเกินหรือแรงดันไฟเกินของมอเตอร์

• รับข้อเสนอแนะด้วย CAPTURE SIGNALS เช่นตำแหน่งของ Engine

ขั้นตอนที่ 3: ทรัพยากรที่ใช้

ทรัพยากรที่ใช้
ทรัพยากรที่ใช้

• จัมเปอร์สำหรับเชื่อมต่อ

• Heltec Wifi LoRa 32

• มอเตอร์กระแสตรงทั่วไป

• สะพาน H - L298N

• สาย USB

• โปรโตบอร์ด

• แหล่งจ่ายไฟ

ขั้นตอนที่ 4: ESP 32 Dev Kit - Pinout

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

ขั้นตอนที่ 5: การติดตั้งกังหัน

การติดตั้งกังหัน
การติดตั้งกังหัน
การติดตั้งกังหัน
การติดตั้งกังหัน

ขั้นตอนที่ 6: วงจร - การเชื่อมต่อ

วงจร - การเชื่อมต่อ
วงจร - การเชื่อมต่อ

ขั้นตอนที่ 7: การวัดออสซิลโลสโคป

การวัดบนออสซิลโลสโคป
การวัดบนออสซิลโลสโคป

ขั้นตอนที่ 8: รหัสที่มา

หัวข้อ

#include //ไม่จำเป็น 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 หลัง #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 display(0x3c), SDA, SCL, RST); //Instanciando และ ajustando os pinos ทำ 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 หรือ alinhamento สำหรับ esquerda display.setTextAlignment(TEXT_ALIGN_LEFT); //เปลี่ยนฟอนต์สำหรับ Arial 16 display.setFont(ArialMT_Plain_16); //mcpwm_gpio_init(unidade PWM 0, saida A, porta GPIO) => Instacia o MCPWM0A no pino GPIO_PWM0A_OUT declarado no começo do código mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A_OUT); //mcpwm_gpio_init(unidade PWM 0, saida B, porta GPIO) => Instacia o MCPWM0B no pino GPIO_PWM0B_OUT declarado no começo do código mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0PW_, GPBIO) mcpwm_config_t pwm_config; pwm_config.frequency = 1,000; //ความถี่ = 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; // Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; //กำหนด ciclo de trabalho em nível alto //Inicia(Unidade 0, Timer 0, Config PWM) mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //กำหนด PWM0A & PWM0B com เป็น configurações acima }

ฟังก์ชั่น

// Função que configura o ตัวดำเนินการ MCPWM A (Unidade, Timer, Porcentagem (ciclo de trabalho)) โมฆะแบบคงที่ brushed_motor_forward (mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) {//mcpwm_seter (0, 1 ou 2), ตัวดำเนินการ (A ou B)); => Desliga o sinal do MCPWM ไม่มี Operador B (กำหนด 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 (% ทำ PWM)); => กำหนดค่า porcentagem ทำ 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), Número do timer(0, 1 ou 2), Operador (A ou B), Nível do ciclo de trabalho (alto ou baixo)); => กำหนด 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); // หมายเหตุ: Chame essa função toda vez que สำหรับ chamado "mcpwm_set_signal_low" ou "mcpwm_set_signal_high" สำหรับ manter o ciclo de trabalho configurado anteriormente } // Função que configura o MCPWM Do operador B (Unidade) โมฆะแบบคงที่ 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 (กำหนด o sinal em Baixo) mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle); //กำหนดค่า porcentagem ทำ PWM ไม่มี 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 brushed_motor_stop(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timermcp_m_num) { mcpwm_timer_t timermcp_m_num) //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 }

ห่วง

วงเป็นโมฆะ () {// ย้าย o มอเตอร์ไม่มี sendido horário brushed_motor_forward (MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled("50"); ล่าช้า (2000); //พาราหรือมอเตอร์ brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); ล่าช้า (2000); // ย้าย o motor no sentido antihorário brushed_motor_backward(MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled("25"); ล่าช้า (2000); //พารามอเตอร์ brushed_motor_stop(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 ฉัน 100 a 1 ล่าช้า (5000); สำหรับ (int i=100;i>=10;i--){ brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled(สตริง(i)); ล่าช้า (100); } ล่าช้า (5000); }

ขั้นตอนที่ 9: ดาวน์โหลดไฟล์

ไฟล์ PDF

ฉันไม่

การวาดภาพ

แนะนำ: