جدول المحتويات:

توربين كهربائي مع ESP32: 9 خطوات
توربين كهربائي مع ESP32: 9 خطوات

فيديو: توربين كهربائي مع ESP32: 9 خطوات

فيديو: توربين كهربائي مع ESP32: 9 خطوات
فيديو: لن تصدق توربين مذهل ! توليد كهرباء 220 فولت في أي مكان بدون خط حكومي? 2024, يوليو
Anonim
Image
Image
برهنة
برهنة

اليوم ، سأناقش التوربينات الكهربائية مع ESP32. يحتوي التجميع على جزء تمت طباعته بشكل ثلاثي الأبعاد. سأقدم وظيفة PWM لـ ESP32 المناسبة للتحكم في المحركات الكهربائية. سيتم استخدام هذا في محرك DC. سأوضح أيضًا تشغيل MCPWM (التحكم في المحرك PWM) في تطبيق عملي.

لقد استخدمت ESP32 LoRa في هذا المشروع ، وأعتقد أنه من المهم أن نلاحظ هنا أن هذا المتحكم الدقيق يحتوي على كتلتين بداخله. هذه الكتل قادرة على التحكم في ثلاثة محركات لكل منها. وبالتالي ، من الممكن التحكم في ما يصل إلى ستة محركات باستخدام PWM ، كل ذلك بشكل مستقل. هذا يعني أن عنصر التحكم الذي سأستخدمه هنا ليس هو المعيار (وهو شيء مشابه لـ Arduino). بدلاً من ذلك ، يكون عنصر التحكم هو الشريحة نفسها ، والتي تضمن لـ ESP32 قدرًا كبيرًا من المرونة فيما يتعلق بالتحكم في المحرك.

الخطوة 1: العرض التوضيحي

الخطوة 2: التحكم في محرك PWM

التحكم في محرك PWM
التحكم في محرك PWM
التحكم في محرك PWM
التحكم في محرك PWM

رسم تخطيطي عام:

• يمكن استخدام وظيفة MCPWM الخاصة بـ ESP32 للتحكم في أنواع مختلفة من المحركات الكهربائية. لديها وحدتين.

• كل وحدة لها ثلاثة أزواج إخراج PWM.

• يمكن مزامنة كل زوج من المخرجات A / B مع واحد من ثلاثة مؤقتات التزامن 0 أو 1 أو 2.

• يمكن استخدام One Timer لمزامنة أكثر من زوج خرج PWM

رسم تخطيطي كامل:

• كل وحدة قادرة أيضًا على جمع إشارات الإدخال مثل إشارات التزامن.

• الكشف عن علامات الخطأ للتيار الزائد أو الجهد الزائد للمحرك.

• الحصول على ردود الفعل مع إشارات الالتقاط ، مثل موضع المحرك

الخطوة 3: الموارد المستخدمة

الموارد المستخدمة
الموارد المستخدمة

• وصلات صداري للاتصال

• Heltec Wifi LoRa 32

• محرك DC مشترك

• جسر H - L298N

• كابل USB

• Protoboard

• مزود الطاقة

الخطوة 4: ESP 32 Dev Kit - Pinout

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

الخطوة 5: تركيب التوربينات

تركيب التوربينات
تركيب التوربينات
تركيب التوربينات
تركيب التوربينات

الخطوة 6: الدائرة - التوصيلات

الدائرة - التوصيلات
الدائرة - التوصيلات

الخطوة 7: القياس على راسم الذبذبات

القياس على راسم الذبذبات
القياس على راسم الذبذبات

الخطوة 8: كود المصدر

رأس

# تضمين // Não é implário caso استخدم Arduino IDE # تتضمن "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 # تتضمن" SSD1306Wire.h "// OLED_SDA - GPIO4 // OLED_SCL - GPIO15 // OLED_RST - GPIO16 # تعريف SDA 4 # تعريف SCL 15 # تعريف عرض RST 16 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

اقامة

إعداد باطل () {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 لا يُصرح عن começo do código mcpwm_gpio_init (MCPWM_UNIT_0، GPAOUT0) ؛ // mcpwm_gpio_init (unidade PWM 0، Saida B، porta GPIO) => Instancia o MCPWM0B no pino GPIO_PWM0B_OUT لا يُعلن عن الأمر código mcpwm_gpio_init (MCPWM_UNIT_0، GPIO_OT0؛ mcpwm_config_t pwm_config ؛ pwm_config.frequency = 1000 ؛ // Frequência = 500 هرتز ، 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 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_set) (0، 1 ou 2)، Operador (A ou B)) ؛ => Desliga o sinal do MCPWM no 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 (٪ 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)) ؛ => حدد 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) الفراغ الثابت 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) ؛ // 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_num_mlow_set // 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) ؛ // Para o motor brushed_motor_stop (MCPWM_UNIT_0 ، MCPWM_TIMER_0) ؛ oled ("0") ؛ تأخير (2000) ؛ // تحريك المحرك بدون محرك مضاد للحركة مصقول_الموتور_الخلف (MCPWM_UNIT_0 ، MCPWM_TIMER_0 ، 25.0) ؛ oled ("25") ؛ تأخير (2000) ؛ // Para o motor 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 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: قم بتنزيل الملفات

بي دي إف

انا لا

رسم

موصى به: