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):
- install the drivers for the Mercury™ C-863.11 onto any computer.
- install the PIMikroMove program on the same computer.
- connect the Mercury™ C-863.11 controller to this computer
- start the PIMikroMove program and choose the right COM-port and baud-rate (RS-232 communication)
- connect your stage to the Mercury™ C-863.11 controller
- 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)
- 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:
- 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)
- connect the stage to the controller
- 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,126.96.36.199.
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:
|*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.
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.
|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.