DC SERVO MOTOR DRIVER WITH STEP/DIRECTION INPUT (RMCS – 2301)

#1>Introduction:

This motor driver operates at input supply voltage from 12VDC to 50VDC. The position of the DC servo motor is controlled by a STEP/PULSE and DIRECTION digital interface similar to stepper motors. The STEP/PULSE, DIRECTION inputs are optically isolated. Both inputs work with 2.5V, 3.3V or 5V logic drive signals. The input drive current is 5mA at 2.5V so almost all logic family (74LS, 74HC, etc.) can be used to drive these inputs. Each input provides individual anode and cathode connections to the opto isolator allowing for multiple input drive interfaces. This motor drive can be easily interfaced with Arduino. This drive is fully compatible with RMCS-2002, RMCS-2003 and RMCS-2004 motors.


#2>Key Features:

  1. Smooth and quiet operation at all speeds
  2. Zero-Backlash DC Servo Motor Performance
  3. Input supply voltage: 12VDc to 40VDC
  4. Selectable Gain Multiplier
  5. Selectable Error Limit
  6. PULSE and DIRECTION inputs with opto-isolated interface
  7. Pot for limiting the current.
  8. 5V, 3.3V and 5V compatible PULSE and DIRECTION inputs with 2-wire opto-isolated interface
  9. LED indication for power and error states
  10. Can be easily interfaced with Arduino.
  11. Current Rating: Maximum 20A

#3> Specifications:

#3.1> Technical Specification:

Specification Min Max Units
Supply Voltage (DC) 12 50 Volts
Current 0.5 20 Amp
PUL and DIR Voltage (DC) 2.5 7 Volts
Ambient Temp. 0 70 Celsius
Humidity 0 95%
Step Frequency 100 kHz
Direction Setup Time 50 ns

 #3.2> Mechanical Specification:

Specification Details
Dimensions(L*W*H) 100mmx75mmx25mm
Weight 155 Grams
Heat Sink Anodized Aluminum 3mm thickness
Mounting Screw Holes 3.6mm minimum diameter

 

#4>Power and Motor Terminal:

Terminal No. Terminal Name Description
Terminal 1 GND Power GND or Power -Ve
Terminal 2 +VE Power +Ve(12VDC-40VDC)
Terminal 3 Motor 1 DC Motor Connection 1
Terminal 4 Motor 2 DC Motor Connection 2

 

 #5>Encoder and Input Terminal:  

Terminal No. Terminal Name Description
Terminal 5 ENA Encoder A input
Terminal 6 ENB Encoder B input
Terminal 7 5V 5V for Encoder only
Terminal 8 GND GND for Encoder only
Terminal 9 DIR- GND reference for Direction Signal
Terminal 10 DIR+ Direction Input Signal
Terminal 11 PULSE- GND reference for Pulse Signal
Terminal 12 PULSE+ Pulse input signal

 

#>6 Overall Gain for Servo Control Loop:

Gain Multiplier SW1 SW2
Servo Gain 1x OFF OFF
Servo Gain 2x OFF ON
Servo Gain 4x ON OFF
Servo Gain 8x ON ON

 

#7> Setting Error Limit and Multiplier:

Multiplier SW 3 SW4
Step Input Multiplier 8x OFF OFF
Step Input Multiplier 4x OFF ON
Step Input Multiplier 2x ON OFF
Step Input Multiplier 1x ON ON

 

#8> Potentiometer settings (From left of board):

Pot No. Pot Name
Pot 1 Proportional Gain
Pot 2 Integral Gain
Pot 3 Differential Gain
Pot 4 Current Limit

#9> Power Supply Selection:

A high-torque DC motor requires high current during startup and during high load or irregular load conditions. The general rule of thumb to make sure your power supply is adequate for a DC motor is to make sure it can supply the maximum current required by the motor during stall condition. It is also good practice to have sufficient low –ESR decoupling capacitors on the output of the supply before you connect it to a DC motor drive. This is to make sure that the motor driver does not reset or suffer from variations in speed due to an insufficient or unregulated supply.

#10> Arduino Program:

#define Pulse 9

#define Dir 8

float i ;
float h = 5;
float j = h * 15000;
float k = j / 10;

void setup()
{
  long delay_Micros = 5;
  long currentMicros = 0;
  long previousMicros = 0;

  Serial.begin(9600);
  Serial.println("Rhino Motion Control RMCS - 1106 ");

  pinMode(Pulse, OUTPUT);
  pinMode(Dir, OUTPUT);
  digitalWrite(Dir, LOW);
  currentMicros = micros();

  if (currentMicros - previousMicros >= delay_Micros)
  {
      for (int i = 0; i <= k; i++)
      {
      digitalWrite(Pulse, HIGH);
      delayMicroseconds(350);
      digitalWrite(Pulse, LOW);
      }

    delay(1000);

    digitalWrite(Dir, HIGH);

      for (int i = 0; i <= k; i++)
      {
      digitalWrite(Pulse, HIGH);
      delayMicroseconds(350);
      digitalWrite(Pulse, LOW);
      }
  }
}

void loop()

{

}

 


          
        

You may also like...