The PI Mercury™ C-863.10 and PI Mercury™ C-863.11

The PI Mercury™ C-863 is a DC-motor controller which exists in two versions, i.e., the C-863.10 controller and the C-863.11 controller. Both differ in their firmware and their hardware. That makes it difficult to control them using the same software. Here you’ll find some information on how to deal with the new General Command Set of the Mercury™ C-863.11 controller.

With the new update of the Mercury™ C-863 controller from version C-863.10 to C-863.11, the company makes it quite difficult to adapt software used for the C-863.10 to also work with the new C-863.11 controller. The command structure completely changed from Mercury™ Native Commands (General Command Set needed to be translated via a windows dll before), to a General Command Set which can be handled by the controller directly.

There have been quite some advantages to the Mercury™ Native Commands, primarily the simplicity of the structure and shortness of the commands itself. That made it very easy to handle the communication with the controller, e.g. in LabView. There was no real need to deal with original PI programs. The main disadvantage of the old controller was the volatile memory (no storage of settings after controller has been disconnected from the power). After every powering up of the controller, an initialization had to be performed.

What changed with the new controller, the Mercury™ C-863.11? The answer is, everything got a little more complicated, even though you are able to address and change a lot more parameters of the controller. But to be honest, for most applications it is just overkill, especially for pump-probe-spectroscopy. At least PI came up with a good idea, a quick start quide to move a stage. Okay, you still need to install a bunch of software, but it turns out to be much easier than fiddle your way through all the manual. So here is a short summary of what (I think) is the easiest way to get your stage running (Be aware, that this guide is just written to support you. Handling hardware and software is in your own responsability):

  1. install the drivers for the Mercury™ C-863.11 onto any computer.
  2. install the PIMikroMove program on the same computer.
  3. connect the Mercury™ C-863.11 controller to this computer
  4. start the PIMikroMove program and choose the right COM-port and baud-rate (RS-232 communication)
  5. connect your stage to the Mercury™ C-863.11 controller
  6. select the stage you want to control with the Mercury™ C-863.11 and play around with the parameters until the stage performs like you expect (there is a useful logging tool, you can use to monitor commands send to the controller)
  7. save the settings into the non-volatile memory

Alright, since the parameters are saved, the Mercury™ will load these parameters on power on. This way, you can actually be confident to not drive the stage to strange positions. Continue as follows:

  1. connect the Mercury™ C-863.11 to the computer you want to control your translation stage with (drivers for the controller need to be installed on that computer as well, but no other PI software is necessary)
  2. connect the stage to the controller
  3. start sending commands to the controller

To verify weather the communication with the controller works, send the *IDN? command to the controller. Make sure you are sending the right termination character, which for the new controller is a linefeed command. The Mercury™ C-863.11 should respond with something like

(c)2011 Physik Instrumente(PI) Karlsruhe, C-863.11,0,

If this is the case, start a reference move with sending the FRF command to the Mercury™ controller. If the stage moves, 90% of the work is done.

At this point I’ll try to summarize the most important commands to control and query the Mercury™ C-863.11 controller, based on the manual C-863_UserManual_MS205E200.pdf. Let’s start with querying the controller:

Query Commands:
*IDN? Get Device Identification
ACC? Get (Closed-Loop) Acceleration
DEC? Get (Closed-Loop) Deceleration
ERR? Get Error Code (resets the Mercury™ C-863.11 error)
MOV? Get Target Position
ONT? Get On-Target State
POS? Get Real Position
SAI? Get list of current axis identifiers
SPA? Get Volatile Memory Parameter
SRG? Query Status Register Value (very convinient)
SVO? Get Servo Mode
 VEL? Get Closed-Loop Velocity
 VER? Get Versions Of Firmware And Drivers

Most important for programming migth be the SRG? command. This command requests the status register value. The answer is a hexadecimal number (0x****), which can be converted in a bit array. The following LabView sample code shows how to readout the status register value and convert it into a 16-bit array.

Reading out the status register value
Reading out the status register value

Bit 0, like depicted, is the status bit of the negative limit switch. The value false indicates, that the limit switch is not activated.

  • Bit 0 – negative limit switch
  • Bit 1 – reference point switch
  • Bit 2 – positive limit switch
  • Bit 3 –
  • Bit 4 – digital input line 1
  • Bit 5 – digital input line 2
  • Bit 6 – digital input line 3
  • Bit 7 – digital input line 4
  • Bit 8 – error flag
  • Bit 9 –
  • Bit 10 –
  • Bit 11 –
  • Bit 12 – servo mode on
  • Bit 13 – in motion
  • Bit 14 – determines the reference value
  • Bit 15 – on taget state

While the stage performes several actions, the status register value can be queried and analysed. The following table lists the most important commands for controlling the Mercury™ C-863.11 and the stage connected to the controller.

Control Commands:
ACC Set (Closed-Loop) Acceleration
DEC Set (Closed-Loop) Deceleration
DFH Define Home Position
FRF Fast Reference Move To Reference Switch
GOH Go To Home Position
MOV Set Target Position
MVR Set Target Relative To Current Position
STP Get Real Position
SPA Set Volatile Memory Parameters
SVO Set Servo Mode
WPA Save Parameters To Non-Volatile Memory
VEL Set Closed-Loop Velocity

Depending on the command, additional arguments have to be attached, e.g. an axis identifier, a parameter id and/or a value. For further information on the single commands, please refer to the official manual. The stage we use together with the Mercury™ C-863.11 controller is a PI-M531.DD2 with a negligible load. In our case, the following PID-values showed a good settling behavior of the stage.

  • Parameter 0x1 (P-Term): 25
  • Parameter 0x2 (I-Term): 45
  • Parameter 0x3 (D-Term): 120
  • Parameter 0x4 (I-Limit): 2000

Even though the controller loads parameters as part of power up routine, u can initialize this parameters by sending the following commands to the controller:

  • SPA 1 0x1 25
  • SPA 1 0x2 45
  • SPA 1 0x3 120
  • SPA 1 0x4 2000

In this case, SPA is the Set Parameter command, 1 is the axis identifier, 0x* the parameter you want to set, and the last number is the value which the parameter should take. I hope these informations help you getting started with the controller. If there are any questions, don’t hesitate to contact the group or use the comment field below.

Leave a Reply

Your email address will not be published. Required fields are marked *