Hola a tod@s:
Soy nuevo en el foro y necesito ayuda.
Estoy realizando un proyecto en el que, a través de un S7-1200 por medio de Ethernet como "Cliente", quiero controlar un motor Paso a Paso bipolar a través de Arduino y de ahí a un puente H L298N.
En principio no parece muy complicado, pero tengo un problema, tras muchas pruebas, cuando en el programa Arduino activo la comunicación Ethernet en el "Void Setup ()".
Si pruebo los ejemplos de programas que hay en la librería de "Stepper.h", funciona todos correctamente. En cambio, cuando lo transfiero a un programa donde se ha insertado la librería "MgsModbus.h" como Servidor Ethernet, el motor no se mueve y solo realiza pequeñas oscilaciones.
Necesitaría que alguno pudiera guiarme o echarme una mano, ya que mis conocimientos de programación en C son bastante básicos. Muchas gracias de antemano y espero vuestras respuestas.
#include <Stepper.h>
#include <SPI.h>
#include <Ethernet.h>
#include "MgsModbus.h"
MgsModbus Mb;
//######################################## ETHERNET #########################################################
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0x94, 0xB5 };
IPAddress ip(192, 168, 1, 10); //Dirección IP del Arduino.
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
//####################################### VARIABLES #########################################################
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution for your motor
const int ConsignaFija =0;
int stepCount = 0; // number of steps the motor has taken
int FromSiemens = 0;
int ToSiemens = 0;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup()
{
//##################################### COMUNICACIÓN MB #####################################################
Ethernet.begin(mac, ip, gateway, subnet); // start ethernet interface
// Fill MbData: Mb.SetBit(0,false).
Mb.MbData[0] = 0; //Holding Reg 40001 hacia Siemens
Mb.MbData[1] = 0; //Holding Reg 40002 de Siemens
Mb.MbData[2] = 0; //Holding Reg 40003 de Siemens
/* Mb.MbData[3] = 0;
Mb.MbData[4] = 0;
Mb.MbData[5] = 0;
Mb.MbData[6] = 0;
Mb.MbData[7] = 0;
Mb.MbData[8] = 0;
Mb.MbData[9] = 0;
Mb.MbData[10] = 0;
Mb.MbData[11] = 0;
Serial.begin (9600); //Estableccimiento de la comunicación serie para ver por pantalla.*/
}
void loop()
{
// Mb.MbmRun();
// Mb.MbsRun(); //Puesta en funcionamiento de ModbusTCP
// read the sensor value:
int sensorReading = analogRead(A0);
// map it to a range from 0 to 100:
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
// set the motor speed:
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
// step 1/100 of a revolution:
myStepper.step(stepsPerRevolution / 100); //Para cambiar el sentido de giro, sólo hay que poner negativo el valor 'stepsPerRevolution'.
}
}
Prueba.txt (1.99 KB)