Encoder Interpolation

If you travel a few posts back, you might remember there is a fairly critical problem with my MX80L stages: They have the 10nm encoder option. This is a problem because the servo drive can only handle a certain number of encoder counts per second. At the maximum axis speed of 2m/s, 10nm scales will be outputting a 50MHz square wave. The fastest encoder the VIX IH can accept is 2MHz pre-quadrature which is far too slow. Sticking with the 10nm scales will limit the MX80L stages to a tiny fraction of their maximum velocity.


To understand how this problem can be sidestepped we need to take a closer look at the components in question.  We actually have a 20 micron scale that is being digitally interpolated for higher resolution.  This is pretty exciting news - given the right interpolator we can convert the encoder to any resolution we want.  On the other hand, finding a pair of suitable interpolators is looking pretty unlikely, and I'm not even going to ask how much a Renishaw unit costs new.


If none of the above made sense, here is a quick overview of the signals involved.  The VIX IH is expecting quadrature input, which is a set of two square waves offset by ninety degrees.  The second signal allows the direction of motion to be identified, and the four edges provided by the two square waves creates four discrete steps per period.  Don't worry if that didn't make sense either, just take a look at the pictures.


On the other hand, the MX80L is producing these rounded sinusoidal output signals:


Sinusoidal encoders operate under the same principle as quadrature encoders but the signals are left in analog form.  In fact, you could probably feed the sinusoidal encoder straight into the VIX and it would work, albeit at coarse resolution and with hysteresis problems.  So why even bother using a sinusoidal output in the first place?  The answer is that you can use the intermediate values to increase the resolution of the encoder.


Using the power of math, a sinusoidal signal can be divided into an arbitrary number of discrete steps.  We are only interested in a modest 10x increase in resolution, but with care this concept can be taken to extremes.  Parker uses a Renishaw RE2000 interpolator to get down to 10nm.  This is a pretty crazy level of interpolation and looks something like this:


I want to use a modest 10x interpolation to bring my scales to 0.5um resolution.  This matches the 0.5um resolution of the Aerotech Z stage, and is about as fine as the servo drive can go before limiting the maximum velocity.  If we put the remaining two signals back into the picture, we are looking for a circuit that will do this:


Accomplishing this from scratch would probably be pretty challenging, but IC-Haus sells a line of components designed for exactly this application.  Their simplest product is perfect for our needs and is very straightforward to use.  I can get away with a simplified version of their example circuit as most of the pins deal with optional features, allowing me to leave almost the entire IC unconnected.


Just to make sure everything will work as expected, I choose to breadboard the circuit for testing.  First the surface mount components are soldered to breakout boards for easier handling.  The larger 8-pin chip is a basic RS422 line driver to convert the TTL signals into the differential form the servo drive expects.


Add the additional components...


Finally we put the circuit in line with the servo drive.  The cable contains a lot of additional wires that just need to be passed through which is why it looks so complicated.


With everything set up we can reconfigure the servo for its new encoder resolution and give it a test run.  Everything works great and we have motion at a reasonable speed.

7 comments:

LEDesign said...

I have two of these stages and the same REE2000 encoder option. I would like to run these at higher speeds and would like to follow your route with the IC-Haus chip.
Did you produce a drawing of the additional components you actually needed so that a non-electronic user could try the same? I agree it doesn't look too difficult but choosing component values is never as easy as it looks when the experience is missing!

I see this is completed some time ago but I thought I would ask before setting off in hope!

Thanks,
Nick.

Ryan said...

Pretty much all you need are decoupling capacitors (1uF ceramics) and two 120ohm resistors to terminate the sinusoidal signals (one across each channel).
The complete schematic is shown here: http://www.everythingbends.com/2015/03/interpolator-pcb-design.html

Here is the original digikey parts order: https://pastebin.com/2tzVWMPd
I don't think I have the EagleCAD files but I'll check later.


I got sidetracked for a while but have continued to make progress on the printer. After I make some finishing touches in CAD I will be paying a machine shop to do most of the fabrication.

Brepo said...

Hi Ryan, I can't thank you enough for the incredible documentation you've put together for this project. I'm trying to get one of these motors working for my own project and I doubt I'd be able to even begin without this site.

Quick question for you: Is it even possible to use a MX80L without an encoder? I've been trying to use the 5μm guided setup option but I keep getting a DF2.1 commutation fault. Any help would be greatly appreciated, though I'm also planning on building an encoder similar to yours.

Thanks again,
Brett

Ryan said...

Hi Brett,

In theory you should be able to run the stage without an interpolator as the sinusoidal encoder output will look similar to the square interpolator output, however I haven't tried it. You may need to terminate the sinusoidal output in a specific way.

You should be able to test each component of the stage without powering it up, because the stage will show its current position and input status in response to the correct commands. You will need both the encoder input and the hall sensor inputs to be correctly setup for the stage to move.

My post on the Aerotech stage has some more details on configuring the drive for an unknown servo, which is closer to what you are doing (since skipping the interpolator makes this effectively a brand new configuration). This kind of thing is easier if you have a scope and know exactly what each set of pins should be doing when the stage moves.

Good luck!

Brepo said...

Hi Ryan,

Thanks for the quick reply! I'll play around with the custom drive configuration and hopefully get it working soon.

When you were working on your motors, did you ever get the DF2.1 commutation fault? Or any other 'terminal' faults? After trying to use the motor without an interpolator and getting that fault, I can't figure out how to turn the motor back on even after power cycling and reinitializing. The ViX drive always shows a red LED (drive fault) when the motor is plugged in even after swapping interpolators.

Once again, thank you so much.
Brett

Ryan said...

I have had terminal faults, but a 1Z reset command or power cycle would usually solve them. It would be unusual for the drive to fault before receiving a START or ON command because it shouldn't be doing anything that can fail.

I don't remember exactly how the renishaw cable harness is configured, but I believe that the commutation and temperature sensors bypass it completely so there should be no difference with or without the interpolator.

If you have a scope and a power supply your best bet is to test the hall sensors and make sure all three of them are working. You could even do it with a multimeter.

Ryan said...

Just something that came to mind - double check that the configuration wizard hasn't programmed the drive to immediately energize on power up. You want the drive to be idle so you can check its status over the console.

Contact

Name

Email *

Message *