Función Tone() y motores paso a paso

De nuevo volvemos a los motores paso a paso para controlar sus rpm ,esta vez con la función tone() que como ya sabemos genera una onda cuadrada entre 31 y 65535 Hz.

Vamos a utilizar como driver el TMC2208/2209, del que llevo hechas algunas prácticas. Ademas tendremos que saber cual es la frecuencia que hace que los dos tipos de motores mas comunes en la robótica doméstica como el 28BYJ-48 y el Nema 17 giren a 1 rpm.

Acudimos a este cuadro ya estudiado anteriormente. Y es tan sencillo que conociendo la frecuencia de 1 rpm, solo tendremos que buscar sus múltiplos. Así ,la freq necesaria para girar a 10 rpm será igual a 10*frqR

STEPPER MOTORPASOS/REVFRECUENCIA DE REFERENCIA (1 rpm) frqR
28BYJ-4832768546.13 Hz
NEMA 17 (17HS13-0404S)320053,3 Hz
NEMA 17 -(17hd4800-22B)320053.3 Hz

Aceleración y deceleración de un motor Nema 17

Primero definimos los pines necesariós para activar el motor y hacerle cambiar de dirección que son tres pines digitales. Como es un motor Nema 17 la freR=53.3, ademas defino la variable R como el factor multiplicador que será igual a la velocidad en rpm. Si R=15, el motor girará a 15 rpm, así de fácil. De ahí que la variable definida como long F=R*frqR, será la frecuencia que generaremos en el pin_step.

Recordemos que solo podemos definir un pin generador de F, y si queremos que sea otro tendremos que terminar como noTone(pin_step). Así en el sketch al final de la secuencia de aceleración y deceleración desactivo el motor poniendo el pin_ena en HIGH y termino la generación de F en el pin_step y paso a generar un tono de 500 Hz en el pin 45 donde tengo unido un buzzer, solo como ejemplo.

¿Quiero esto decir que no podemos manejar nada mas que un motor a la vez?, Depende de nuestras necesidades del proyecto, pero podemos secuenciar rápidamente dos funciones tone()/noTone() de dos pines digitales elegidos.Pero para salir de dudas se puede hacer la prueba con dos motores y asi aprovechamos y probamos el pequeño 28BYJ-48.

Recordemos que cada tipo de motor tiene unas diferentes capacidades de alcanzar un numero de rpm determinados, inclusive dentro del mismo tipo Nema 17 como ya expuse en otra entrada.

//configuración PINES STEP MOTOR
const int pin_step = 4;
const int pin_ena = 5;
const int pin_dir = 2;
const int frqR=53.3;
int R=0;
long F=R*frqR;


void setup() {
pinMode(pin_ena,OUTPUT),
pinMode(pin_dir,OUTPUT);
digitalWrite(pin_ena,HIGH);
digitalWrite(pin_dir,HIGH);
}
void loop(){
   
  for(R=0;R<=200;R+=5){
    digitalWrite(pin_ena,LOW);
  digitalWrite(pin_dir,HIGH);
   long F=R*frqR;
   tone(pin_step,F);
delay(100);
  }
  
for(R=200;R>=0;R-=5){
  long F=R*frqR;
digitalWrite(pin_dir,LOW);
tone(pin_step,F);
delay(100);
}
digitalWrite(pin_ena,HIGH);
noTone(pin_step);
tone(45,500);
delay(5000);
noTone(45);
}

Deja una respuesta

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

Translate »