Table des matières:

Turbine électrique avec ESP32 : 9 étapes
Turbine électrique avec ESP32 : 9 étapes

Vidéo: Turbine électrique avec ESP32 : 9 étapes

Vidéo: Turbine électrique avec ESP32 : 9 étapes
Vidéo: Premiers tests pour bien débuter avec l'ESP32 [ESP32 #1] 2024, Novembre
Anonim
Image
Image
Manifestation
Manifestation

Aujourd'hui, je vais parler d'une turbine électrique avec ESP32. L'assemblage a une pièce qui a été imprimée en 3D. Je présenterai une fonction PWM de l'ESP32 adaptée au contrôle des moteurs électriques. Ceci sera utilisé dans un moteur à courant continu. Je démontrerai également le fonctionnement de ce MCPWM (Motor Control PWM) dans une application pratique.

J'ai utilisé ESP32 LoRa dans ce projet, et je pense qu'il est important de noter ici que ce microcontrôleur a deux blocs à l'intérieur. Ces blocs sont capables de contrôler trois moteurs chacun. Ainsi, il est possible de contrôler jusqu'à six moteurs avec PWM, tous indépendamment. Cela signifie que le contrôle que j'utiliserai ici n'est pas le standard (qui est quelque chose de similaire à l'Arduino). Au lieu de cela, le contrôle est la puce elle-même, ce qui garantit à l'ESP32 beaucoup de flexibilité en ce qui concerne le contrôle du moteur.

Étape 1: Démonstration

Étape 2: Contrôle du moteur PWM

Commande de moteur PWM
Commande de moteur PWM
Commande de moteur PWM
Commande de moteur PWM

Schéma général:

• La fonction MCPWM de l'ESP32 peut être utilisée pour contrôler différents types de moteurs électriques. Il a deux unités.

• Chaque unité possède trois paires de sorties PWM.

• Chaque paire de sorties A/B peut être synchronisée avec l'un des trois temporisateurs de synchronisation 0, 1 ou 2.

• Une minuterie peut être utilisée pour synchroniser plus d'une paire de sorties PWM

Diagramme complet:

• Chaque unité est également capable de collecter des signaux d'entrée en tant que SIGNES DE SYNCHRONISATION;

• Détecter les SIGNES DE DÉFAUT pour les surintensités ou les surtensions du moteur;

• Obtenir des commentaires avec CAPTURE SIGNALS, tels que la position du moteur

Étape 3: Ressources utilisées

Ressources utilisées
Ressources utilisées

• Cavaliers de connexion

• Heltec Wifi LoRa 32

• Moteur à courant continu commun

• Pont H - L298N

• Cable USB

• Protoboard

• Source de courant

Étape 4: Kit de développement ESP 32 - Brochage

Kit de développement ESP 32 - Brochage
Kit de développement ESP 32 - Brochage

Étape 5: Montage de la turbine

Montage de la turbine
Montage de la turbine
Montage de la turbine
Montage de la turbine

Étape 6: Circuit - Connexions

Circuit - Connexions
Circuit - Connexions

Étape 7: Mesure sur l'oscilloscope

Mesure sur oscilloscope
Mesure sur oscilloscope

Étape 8: Code source

Entête

#include //Não é necessá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 SSD1306 display(0x3c, SDA, SCL, RST); //Instanciando e ajustando os pinos do objeto "display" #define GPIO_PWM0A_OUT 12 //Déclara GPIO 12 como PWM0A #define GPIO_PWM0B_OUT 14 //Déclara GPIO 14 como PWM0B

Installer

void setup() { Serial.begin(115200); display.init(); // display.flipScreenVertically(); //Vira une telle verticalement display.clear(); //juste ou ajuste pour un affichage display.setTextAlignment(TEXT_ALIGN_LEFT); //juste une police pour 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, MCPWM0A, GPIO_PWM); //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_PWM_PWM); mcpwm_config_t pwm_config; pwm_config.fréquence = 1000; // fréquence = 500 Hz, pwm_config.cmpr_a = 0; //Ciclo de trabalho (cycle de service) do PWMxA = 0 pwm_config.cmpr_b = 0; //Ciclo de trabalho (cycle de service) do PWMxb = 0 pwm_config.counter_mode = MCPWM_UP_COUNTER; //Para MCPWM assimetrico pwm_config.duty_mode = MCPWM_DUTY_MODE_0; //Définir ciclo de trabalho em nível alto //Inicia(Unidade 0, Timer 0, Config PWM) mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Définir PWM0A & PWM0B com comme configurações acima }

Les fonctions

//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) { //mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num, float duty_cycle) { //mcpwm_do(set_dosignade_do (0, 1 ou 2), Opérateur (A ou B)); => Desliga o sinal do MCPWM no Operador B (Définir 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)); => définir le 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)ciclo de tracentagem (unidade, Timer)ciclo de tracentagem 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); //définir le 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_num) { mcpwm_m_set_num_mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num_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 }

Boucle

void loop() { //Move o motor no sentido horário brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0); oled("50"); retard (2000); //Para o moteur brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); retard (2000); //Move o motor no sentido antihorário brushed_motor_backward(MCPWM_UNIT_0, MCPWM_TIMER_0, 25.0); oled("25"); retard (2000); //Para o moteur brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0); oled("0"); retard (2000); // Aceleracao i de 1 a 100 for(int i=10;i<=100;i++){ brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled(String(i)); retard (200); } // Desacceleração i de 100 a 1 delay(5000); for(int i=100;i>=10;i--){ brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, i); oled(String(i)); retard (100); } retard (5000); }

Étape 9: Télécharger les fichiers

PDF

INO

DESSIN

Conseillé: