Interfacing Arduino Uno w/Kollmorgen P5000 stepper drive

I cannot find anywhere on the internet how can someone interface an Arduino Uno with a Kollmorgen P5000 drive. I tried to read Arduino’s stepper program routine (Sepper OneRevolution) where it uses Digital Pins 8, 9, 10, and 11 but I have no idea how these connect to Kollmorgen’s P5000 drive’s pins, 7, 8, 9, and 11 or Disable In, Dir In, Step In, and Flt Out, respectively. Can someone please help me?
Thank you.

PS: I have attached a copy of Kollmorgen’s P5000 Installation Manual

P50330 (DC) Installation Manual.pdf (719 KB)

It looks straightforward. Connect "common" to Arduino GND and step and dir to the appropriate Arduino I/O pins. I'm not sure if it is essential to connect anything to disable or whether the signal should be HIGH or LOW to disable the driver. But there will not be much experimentation required to find out.

This Simple Stepper Code should be suitable for testing.

Don't use the Arduino Stepper library as it is not intended for that type of driver. The AccelStepper library is suitable if you choose the DRIVER option.


Man, that was quick! Thank you so much for your input Robin2. I'll try it out as soon as I can and post my feedback.

I tried your code but nothing happened. It uploaded fine and with no errors but there was no movement.

Make a simple pencil drawing showing how everything is connected, including the motor and power supply and post a photo of the drawing.

Post a link to your stepper motor's datasheet.


Robin2 hi.

I created the wiring layout as best I could. I attached an image of it.
I listed below also my project’s parts list with links.

Project’s Parts List:

1 Main Processing Unit Arduino Uno_R3
2 Stepper Motor Drive Kollmorgen P50330-SDN-PMX
3 Stepper Motor Power Supply Delta Electronics, D0116888
4 Stepper Motor PowerMax, P22NRXB-LDN-M1-00, Bi-Polar Series

Stepper Motor Link

Stepper Motor Power Supply

Stepper Motor Drive

Thank you for looking into it.

Image from Reply #5 so we don’t have to download it. See this Image Guide



It's a bit hard to read!

Have you tried connecting to the enable/disable pin?

I can't figure from the datasheet which is your motor and what is the coil current.


Ok. This is what I have so far.

I checked the VDC output from the power supply to the Stepper Driver and it was 24.25 Volts.

I called Kollmorgen and spoke with their technical support because I couldn't find a connection diagram for the 8-pin layout my motor has. The link to it is here,

On page 94-148 the motor’s Connection Information can be found under Part # GW0000F (8 Lead). The wire connector I was sent is wired for a Bipolar Parallel connection (verified). My wire connector is using the same color code that can be found in this .pdf.

Black to Phase A+ Orange to Phase A- Red to Phase B+ Yellow to Phase B- All connections were verified

I checked with my voltmeter Pin # 9 or Direction Pin. It does give me voltage in the beginning of the program as expected, Value measured = 4.95 Volts

I checked also Pin # 8 or Step Pin. It never gave me any voltage reading even at 2,000,000 μsec or 2 sec pulses and 5,000 msec or 5 sec intervals.

I used your code dated, Edit 23 Jul 2016.

By the way, thank you for the "How to insert an Image" guide.


Completely disassembled and assembled everything. Checked and re-checked everything. Analyzed your code and re-run it. It worked like a charm. Don't ask me what I changed. No idea. It worked like a charm, though.

Thank you Robin2.

Thanks for the feedback and glad to hear it works.


Robin2 good morning. I have a coding question. You instantiate the "millisbetweenSteps" variable as an integer. It's also defined in your code in msec. In other words, the smallest possible value for this variable is "1" since any decimal below that will be compiled as a "0" value. If we use then the value of "1" our time between steps will be 1 msec or 0.001 sec. That translates to 0.001 sec x 200 = 0.2 sec for a complete revolution. I'm not adding the step duration for clarity. The 0.2 sec translates to a frequency of 5 Hz or 5 revolutions per second or 1/5=0.2. Wouldn't be better to define this variable as a float? That way we can increase the output frequency of our motor. Your thoughts?


If you want fractions of a millisecond you must use micros() for the timing. Both millis() and micros() return unsigned long values - i.e. integers.


So, if I have understood you correctly all I have to do is substitute "millisbetweenSteps" with "pulseWidthMicros" or, in other words, "delay(pulseWidthMicros);"


evripos: So, if I have understood you correctly all I have to do is substitute "millisbetweenSteps" with "pulseWidthMicros" or, in other words, "delay(pulseWidthMicros);"


I have in mind that you use microsBetweenSteps. There is no need to change pulseWidthMicros.