Buenas tardes, tengo un motor paso a paso con driver cuyo modelo es MKS SERVO57C. Para poder mandarle instrucciones, es necesario pasarle comandos en hexadecimal, pero el programa me da problemas y no consigo que el motor reciba las instrucciones.
El comando que debo pasarle es FA 01 F6 02 80 02 75.
¿Alguna ayuda?
Moderador:
Por favor, lee las Normas del foro y postea tu código usando etiqeutas.
Click en </> para seleccionar las etiquetas y luego pegas el código.
Nosotros no podemos adivinar asi que cuando dices mi código no funciona, debes proveernos de toda la información.
No solo tu código (debidamente posteado) sino también información (hoja de datos, link, etc) el equipo al que se conecta. No basta con poner se llama MKS SERVO57C, búsca una hoja de datos y nos lo indicas.
Tu eres el del problema, asi que brinda la información correspondiente para que nuestra ayuda sea rápida y concisa.
Te refieres a este Motor
En la imagen se ve claramente que utiliza el protocolo de comunicación serial RS485, si estas usando el arduino para trabajar con este motor debes conseguir un adaptador primeramente, como el " Módulo Conversor TTL a RS485 - MAX485", partiendo de alli una vez tengas implementada esa conexión, se procede a verificar como enviar el dato que pretendes
Si, y también se ve claramente que puede utilizar comunicación serial RS232-"TTL" (debajo y a la izq. del conector 485), por lo que no necesita adaptador.
Todo depende de la distancia entre el micro y el motor.
Saludos
Si, ya tengo ese módulo. El problema es que intento mandarle señales al motor y no soy capaz que este lo reciba. No puedo adjuntar ningún código porque no he conseguido hacer nada que funcione.
adjunto el código que más o menos he conseguido hacer:
#include <SoftwareSerial.h>
SoftwareSerial myserial(6, 7);
void setup() {
// put your setup code here, to run once:
myserial.begin(9600);
//Salidas para el RS485
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
//Define los arrays de datos a enviar
byte motorOn[]= {0xFA, 0x01, 0xF6, 0x02, 0x80, 0x02, 0x75};
byte motorOff[]= {0xFA, 0x01, 0xF6, 0x00, 0x00, 0x02};
// inicia una instruccion para mandar la señal de avance al driver del paso a paso
myserial.write(motorOn, 7);
delay(2000);
}
Como son las conexions?
6 a qué pin?
7 a qué pin?
y supongo usas GND no?
La libreria Sotware Serial suele ser un poco caprichosa en mi experiencia si estas trabajando con un Arduino UNO, deberias utilizar los pines (2,3) o (9.10) para RX,TX, otro dato adicional son los baudios por defecto vi en el datasheet del MKS que se utiliza una velocidad de 38400 no se si el mks-servo57c tiene un ajuste manual para regular los baudios a 9600 ya que la libreria software serial tiene la limitante de no poder ser utilizada a mas de 9600 baudios, adicional te comparto un codigo que usaba para leer los valores de un sensor NPK .
#include <SoftwareSerial.h>
#define re 8
#define de 7
const byte comando[] = {0xFA, 0x01, 0xF6, 0x02, 0x80, 0x02, 0x75};
byte values[11];
SoftwareSerial mod(2, 3);
int conta = 0;
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000; // send once per second
//===========
void setup() {
Serial.begin(9600);
Serial.println("Transmisor empezando...");
mod.begin(9600);
pinMode(re, OUTPUT);
pinMode(de, OUTPUT);
delay(3000);
}
//====================
void loop() {
tempo();
if (conta == 5) {
byte val1;
val1 = respuesta();
Serial.print("Bytes recibidos: ");
Serial.println(val1);
delay(250);
conta=0;
}
}
void tempo() {
currentMillis = millis();
if (currentMillis - prevMillis >= txIntervalMillis) {
prevMillis = millis();
conta++;
}
}
byte respuesta() {
digitalWrite(de, HIGH);
digitalWrite(re, HIGH);
delay(10);
if (mod.write(comando, sizeof(comando)) == 7) {
digitalWrite(de, LOW);
digitalWrite(re, LOW);
for (byte i = 0; i < 7; i++) {
//Serial.print(mod.read(),HEX);
values[i] = mod.read();
//Serial.print(values[i],HEX);
}
//Serial.println();
}
return values[4];
}
Perdón que te corrija pero SoftwareSerial trabaja hasta 57600 bps.
De hecho la uso a 38400 (mismos bps que el MKS) con un módulo GPS sin ningún tipo de inconveniente.
Saludos
Para imprimir en hexadecimal te paso este ejemplo:
https://wokwi.com/projects/357583385594507265
Básicamente es con "HEX": Serial.print(byte,HEX);
Saludos
Esto es lo que te pedía
una pagina que aporte información.
Ahí tienes incluso un programa para probarlo.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.