Blynk&Esp32&Tmc-2209

AVISO: Las imagenes ofrecidas de la app Blynk estan desactualizadas, la plataforma ha cambiado en la actualidad.

En este Sketch vamos a poner en practica el control entre 1 a 20 rpm de un motor paso a paso como el 17hd48002H-22b o equivalente con nuestro driver TMC2209 y la APP de Blynk. Si quieres entretenerte en comprobar los calculos hechos en el sketch y ponerlos en práctica, quizas pueda servirte para algun proyecto que tengas en la cabeza o te de la luz para otro.

En la APP utilizamos tres widgets: dos medidores configurados para leer dos decimales y un Joystick con solo uso del eje X con medición entre 0 y 1066

La eleccion de 1066 es debido a que en su punto medio la lectura sera de 533 y el medidor de rpm en sentido CCW utilizara de 533-0 y el medidor rpm CW de 533-1066

Componentes necesarios:

Al utilizar el motor 17hd48002H-22b , necesitaremos una regulación de tensión de 6.5V para una vez ajustado el driver TMC2209 obtengamos un consumo de entre 400-500 mA.

Al utilizar Blynk, solo necesitaremos la placa Esp32 y el montaje lo dejo a la elección de cada uno, con lo que presupongo que ya se tiene experiencia en el conexionado de estos motores y el driver especificado. Si no es asi ,se puede consultar estas claves

Las claves:

  • Entender como funcionan las salidas PWM y las funciones LEDC
  • Conocer la relación entre frecuencias y RPM

SKETCH COMPLETO:

const int pin_step1 = 0;
const int pin_ena1 = 4;
const int pin_dir1 = 15;
int dutyCycle = 127;
#define  Vref 533
int vmotor1 = 533;


// setting PWM properties
const int step1Channel = 10;
const int resolution = 8;


#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "XXXXXXXXX";

char ssid[] = "---";
char pass[] = "---";

BLYNK_WRITE(V10) {
  vmotor1 = param.asInt(); // assigning incoming value from pin V1 to a variable
}

void Rpm1R() {
  float R =  (vmotor1 - Vref) / 53.3;
  Blynk.virtualWrite(V2, R);
}
void Rpm1L() {
 float L = (Vref - vmotor1) / 53.3;
  Blynk.virtualWrite(V3, L);
}
BlynkTimer timer1; // Announcing the timer1
BlynkTimer timer2; // Announcing the timer2
void Motor1(){
float freqr = (vmotor1-Vref);
 float freql=(Vref-vmotor1);
 if (freqr/53.33 >=1) {
     digitalWrite(pin_ena1, LOW);
    digitalWrite(pin_dir1,HIGH);
    ledcSetup(step1Channel,freqr, resolution);
    ledcWrite(step1Channel, dutyCycle);
    delay(500);
     }
  else {
    digitalWrite(pin_ena1, HIGH);
   }
    if (freql/53.33 >= 1) {
     digitalWrite(pin_ena1, LOW);
    digitalWrite(pin_dir1,LOW);
    ledcSetup(step1Channel,freql, resolution);
    ledcWrite(step1Channel, dutyCycle);
    delay(500);
    }
  
}
void setup()
{
  //pinMode(pin_step1, OUTPUT);
  pinMode(pin_ena1, OUTPUT);
  pinMode(pin_dir1, OUTPUT);
  digitalWrite(pin_ena1, HIGH);
  digitalWrite(pin_dir1, HIGH);
  ledcAttachPin(pin_step1, step1Channel);

    Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);

  // Setup a function to be called every second
  timer1.setInterval(500L, Rpm1R); //timer will run every sec
  timer2.setInterval(500L, Rpm1L); //timer will run every sec
  
}

void loop()
{
  Blynk.run();
  timer1.run();
  timer2.run();
  Motor1();
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »