Introducción
En este post controlaremos la velocidad de un servomotor 57HSE2N-D25. Para ello también necesitaremos un controlador, HSS57 Hybrid Servo Driver,for the servo motor that will be connected to our Arduino based PLC for the automation of the speed control. Para el software, se implementa una biblioteca pulses.h (el software sin usar la biblioteca pulses.h también está conectado).
Requisitos
Ethernet PLC: Ethernet PLC >>>
HSS57 Hybrid Servo Driver: HSS57 Hybrid Servo Driver >>>
57HSE2N-D25 Servo motor: 57HSE2N-D25 >>>
Pulses.h (Tools40 library: Biblioteca de pulsos - Repositorio Github >>>
Placas Industrial Shields: Cómo utilizar los pines de mapeo de las placas Industrial shields >>>
Conexiones
Servo Motor - Driver connections:
Red -> A+
Green -> A-
Yellow -> B+
Blue -> B-
Ethernet PLC - Driver connections:
PIN 3 -> PUL - (pulses)
PIN2 -> DIR- (rotational direction)
PIN 50 (MISO) -> ENA- (enable)
GND -> PUL- , DIR - , ENA -
* Signals = 5Vdc
*Recuerde alimentar el PLC entre 12 y 24V.
*En este caso estamos utilizando señal de 5V, por lo que, no se necesitan resistencias entre PUL+,ENA+, DIR+ y PIN2, PIN3, PIN50.
*El controlador es M-Duino 21+
*Codificador en no utilizado en este post
Software
Con este codigo puedes controlar la velocidad del paso a paso, la dirección y el número de revoluciones.
Cambie PIN2 para controlar la dirección, cambie NUM_REVOLUTIONS para decidir cuántas revoluciones necesita y cambie FREQ para cambiar la frecuencia(velocidad de rotación).
A continuación se muestra el código:
/*
Copyright (c) 2018 Boot&Work Corp., S.L. All rights reserved
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <Pulses.h>
#define PIN_STEPPER_PUL 3
#define PIN_STEPPER_DIR 2
#define PIN_STEPPER_ENA 50
#define STEPPER_PULSES_PER_REV 1600UL
#define FREQ (2000UL) // Hz
#define NUM_REVOLUTIONS 10
#define STEPPER_STEPS ((NUM_REVOLUTIONS) * (STEPPER_PULSES_PER_REV))
volatile uint32_t stepsCnt = STEPPER_STEPS;
ISR(TIMER3_COMPA_vect) {
if (stepsCnt) {
--stepsCnt;
if (stepsCnt == 0UL) {
stopPulses(PIN_STEPPER_PUL);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
pinMode(PIN_STEPPER_DIR, OUTPUT);
pinMode(PIN_STEPPER_PUL, OUTPUT);
pinMode(PIN_STEPPER_ENA, OUTPUT);
digitalWrite(PIN_STEPPER_DIR, HIGH);
digitalWrite(PIN_STEPPER_ENA, HIGH);
// It depends on the PIN_STEPPER_PUL
TIMSK3 |= 1 << OCIE3A;
startPulses(PIN_STEPPER_PUL, FREQ, 3);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
}