I am currently working on a project that requires the rotation of polarizers to very specific angles. It is necessary that we are able to determine what angle the polariser is currently at so that we can make the motor stop when it reaches the required angle. The motor is currently run by an arduino reading commands from matlab.

I have been looking into optical encoders (with code wheel) and magnetic encoders, but I'm not sure of how to go about implementing them into my setup.

I would also like to note that light has to pass through the object we are rotating so mounting an optical encoder disk without a hole in the center would not work.

Would you have any suggestions for where to source optical encoder disks and encoders that might work for my setup?

  • 3
    \$\begingroup\$ So what exactly is your setup? Motors, gears, belts, linkages? \$\endgroup\$ Jun 28, 2018 at 15:48
  • 1
    \$\begingroup\$ What exactly is a polarizer? A plastic sheet? Of what size and weight? Assume we aren't already familiar with what you're doing. \$\endgroup\$
    – Bort
    Jun 28, 2018 at 15:53
  • 5
    \$\begingroup\$ Lots of details matter. Not much provided. ("very specific angles" sounds good, but that does it mean? In minutes and seconds of arc?) What resolution do you require? How repeatable must the positioning, and then re-positioning, be? What are you doing? (From which we might otherwise come to an independent opinion.) \$\endgroup\$
    – jonk
    Jun 28, 2018 at 15:56
  • \$\begingroup\$ A suggestion: use a hobby servo. They can only rotate 180 degrees, but 90 should be suffcient for a polarizer. You command it to rotate to a given position, wait a bit, done. If you stay under the load limit for the servo, you won't have to worry about it being in position. \$\endgroup\$
    – JRE
    Jun 28, 2018 at 16:15
  • 1
    \$\begingroup\$ You'd typically use an encoder when you use DC or BLDC servo motors to position your polarizer. If you use stepping motors you can do this with a simple index/ref sensor in an open loop configuration. You could use 0.9deg steppers and x8 microstepping to achieve 0.11 deg resolution for example. It all depends what radial resolution you need ...and you have not specified it. \$\endgroup\$ Jun 28, 2018 at 18:46

4 Answers 4


There are standard optical rotation stages that work as you suggest. You can use them open-loop (relative motion via counting stepper motor steps once you have zero'd them) or attach an encoder to get closed-loop positioning. An incremental encoder (the more common/less expensive type) must also be zero'd to find the absolute position, but may have better resolution than a stepper. Absolute encoders tell you the actual angle, some of them can work down to nanometer resolutions on the scale. Many incremental encoders include an index output that allows you to zero the stage without additional hardware.

But I suspect you only require a stepper motor and home switch.

The below one is from Thor Labs and includes a 2-phase stepper motor.

enter image description here


Look up something called a shaft encoder. These things put out pulses as the shaft is turned. The output is two signals in quadrature. This makes it possible to determine direction.

A microcontroller can easily decode the quadrature signals to keep track of the current position. Once you have position information, the rest is a control system to try to go to and maintain a particular position.


Interestingly enough, a linear polariser is itself a way of making an absolute encoder.

You can have two polarised opto sensors at 90 degrees into an ADC. It will have an 180deg ambiguity to resolve, but that is (I think) irrelevant to polariser use.

I suggest looking at magnetic sensors by Renishaw - there are many kinds, and some fantastic resolution (622592 counts!).

enter image description here This is an off-axis sensor. It is a linear sensor, with a ring stripe magnet. AMS makes sensor chips for this.

There are many kinds of incremental encoders like those, or alternatively you might be using a microstepper to rotate your polariser.

Incremental encoding requires a reference/index mark to set zero.

This could be very well done by polarisation. Have two opto sensors with very slightly rotated polariser film in front of them going into a comparator. At extinction, the slope is very high, and you will get an accurate index of the actual polarisation extinction angle . So it would let you drop different polarisers in, and be calibrated with no mechanical referencing - purely off the extinction angle.

This technique has been used as an ultra fast (MHz), micro-radian, non contact, long distance angular measurement system, for measuring tiny tilts.


You would use some kind of index mark or mechanical end-stop to tell your controller when the polariser is at a certain point and use an incremental encoder to tell it how far it has moved from the indexed point.

Alternately you could use an absolute encoder if you have a simple 1:1 or 1:2 (maybe 2:1) ratio that will lock the polariser orientation to the motor if it is connected with gearing.

The index may be on the polarising filter that is rotated about the centre of the filter from the outer edge or it could even be an annular filter wheel or crescent that is rotated like shutter blade and the beam passes through it off centre.

If you have a direct drive you need a hollow motor or the annular filter.

If you use an encoder you can use a hollow bore encoder or use some gearing to connect the encoder to your filter element, like the drive.

You could mount a polarizer into a ND filter rotator from Thor Labs for centre drive od encoder mounting.

Of if you want to rotate it from the outer edge you could replace the two circular polarisers in this unit from CineFade (very expensive) with your linear polariser a larger version of the unit in Spehro Pefhany's answer.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.