Go Down

Topic: Gemini GV servo driver with arduino Mega 2560 - advices needed. (Read 4084 times) previous topic - next topic


Dear all,

First of all, thank you for reading my topic. In this project I am currently working, my purpose is to give motion commands to a Gemini GV servo driver (GV-U3/6/12). I need this servo because of the high torque and precision of motion. The desirable motion input is a continuous list of positions which the motor has to follow (something like the trimmer example).
The installation manual of this driver can be found in this url: http://www.parkermotion.com/manuals/gemini/Gemini_GV_HW_Install_Guide.pdf

This servo driver can be driven by several input formats. ( analog, digital-encoder, digital-step±/dir±, digital-CW±/CCW±). My questions are:

1) With your experience, which of these inputs is the best and easiest to develop?

2) Do you have any available code for the "step/direction" driving of a servo motor? ( As far as I remember, the same driving method has been used in stepper motors).

Thank you very much and please don't hesitate to ask if you have any question.

Best regards,



That is a drive, but what are your servos ?

The Arduino has a Servo library. For the common servos used in RC toys, they can be connected to the Arduino without driver.

Is the analog signal from -10V to +10V ? the negative voltage makes it hard.
Is the RS-232 the full signal level, or TTL level serial communication. I think it is the full RS-232 standard level.

You could use an adapter for RS-232 or a chip for RS-485.
If you want to test it with a PC, the RS-232 can be used. But if you don't care about that, and have a long twisted pair cable, the RS-485 is better.

An adapter for RS-232 is to make 5V TTL level signals. They look like this, http://www.ebay.com/sch/i.html?LH_BIN=1&_sop=15&_osacat=0&_from=R40&LH_PrefLoc=2&_nkw=rs232+ttl+%28module%2Cboard%29+-usb&_sacat=0

I don't know any code, a stepper motor is totally different.


Hi Erdin,

The servo motor I use is an AC servo motor by Parker with KE=20.9,TR=13.6,480VAC. The servo product number is:

Also, as you mentioned, the analog signal comes with ±10V. If this is necessary, I can convert the signal from 0-5V to -10V-+10V on the board.

The issue is that if we could create the signal for the analog, we could do the same for the digital. Do you believe that is unrealistic to try and communicate with the arduino and not the RS-232 port? I am going to use differential line driver (AM26LS31CN) to invert the digital pulses.

I agree that with stepper motor or with an RC servo motor it would be easier. The sevo driver though gives flexibility of input signal and this is helpful. 


I don't understand why you want to use RS-422 line drivers ?

Using the digital interface takes longer to implement, but there are a lot more possibilities with the commands. Requesting the status for example.
So my advice is to use a digital interface, with the most common and most standard protocol and components.

The best option is to use RS-232. It is a common interface, and you can use a PC to test the servo driver.

The Arduino is very well capable to control a device with a serial port. But so are many other microcontroller boards and computers and tablets and terminals.

You could use an Arduino board with two serial ports, like the Arduino Leonardo or the Arduino Mega 2560.
One serial port is used to control the servo driver via RS-232 (with an adapter), the other serial port can be used to control the Arduino and to show the status on the computer via the usb bus.
If you have already an Arduino without extra serial ports, the SoftwareSerial library can turn any pin into a serial port. http://arduino.cc/en/Reference/SoftwareSerial
You need such an RS-232 to TTL adapter, as I mentioned before.


The fact is that I wanted to avoid the RS-232. First because non of the modern computers has it (I have a USB to RS-232 and an PC with RS-232 buss) and I would like not to come in the need of programming serial ports ( I know C++ but, to learn interfacing with ports in a new level). I chose Arduino because it has simple interface and it provides more than digital outputs ( ADC interface for example).

By knowing so much about the subject, I assume that you have experience upon the RS-232 programming. Could you please give me a hint. What programming language you use? Thank for your assistance.


The RS-232 is very old, that's true.
But if you have to choose between the RS-485 and RS-232, I would use RS-232. Because (some) computers still have that port. And it doesn't change the commands that are sent.

The Arduino acts as a (virtual) serial port if the USB bus is connected. That (virtual) serial port can be used to control the Arduino. I don't exactly know what else you would want to use to control the Arduino.

It is possible to write a program on the computer that controls the Arduino via the (virtual) serial port. I use 'C' language, but others use also C++, or Python or even the command line. Most of the time, I use the Arduino serial monitor or "Q Serial Terminal" and check the status every few months.

I'm not sure what you want. To use a standalone Arduino or a PC to control the servo driver ?
If you use a standalone Arduino, do you want to have full control all the time what the Arduino is doing from the PC ?


Ideally: The aim is to control and drive the servo motor with a know path. The path will be a txt file, containing positions and time, and the X software to translate this to step/direction or CW/CCW signal and drive the servo driver.

For example, the txt file could be like:

time (ms) position (rev)
0             0
100          200
200          300
300          150
400         -150
500         -550

I thought I would use arduino as an output mostly and a toolkit to have some parameters ready (the pulse width for example).
Is the "Q Serial Terminal" difficult to be programmed? Do you believe that it could give the necessary results?


Sorry, I ment something else.
I sometimes use the Arduino serial monitor just the check the status now and then. Sometimes I don't have Arduino installed on a PC, and Windows 7 doesn't have the HyperTerm anymore. The most simple serial program is the 'Q serial terminal', http://sourceforge.net/projects/qst/
I like to have some kind of 'service mode' via the (virtual) serial port.


This is an industrial servo, not a hobby servo.

Easiest way to control the motor from Arduino is using the Step/Direction interface. It then becomes a fast stepper motor. Industrial servos typically have a max RPM of at least 3000RPM and some will run as fast as 5000PRM. The steps per rev and other parameters are all configurable and allow you to tune the drive for the specific application. Generally a servo motor will need to be geared down (40:1 to as much as 100:1) to give you a usable RPM range, but with a gear reduction comes a torque increase.

I built some automated welding machines and we used at least 4 similar servos (Yaskawa, Mitsubishi, Parker and Omron) which we used in Step/Direction mode.


@ Erdin: Thank you for your help. I will have a look upon this.

@ kf2qd: Believe me, torque is all I need (anything else could be handled with a 2 amp stepper motor). On the other hand, I can get 4000 steps per revolution. I have a question though. These servos you have, how do you drive them? with an arduino or something else?


The units I used were driven by a PLC (programable logic controller) and also by a PC. You could also use Mach3, a pc based CNC program to control them. With the Arduino you can use them just like a stepper motor.

One problem with high step counts is that it generally means you don't get much speed because there is a limit to how fast a given device can send the pulses. Fastest speeds with an Arduino would mean that you would have to go to Assembler.

Go Up