I own an older version of the SX filterwheel. They are well know to not stop at a predictable position.
I believe the stopping mechanism works with magnetic sensors, but they overshoot.
Clockwise it will overshoot a few degrees clockwise, and anticlockwise it overshoots a few degrees in the other direction.
Rendering 5 till 10% of my 1.25 filter diameter useless.
I installed their own filterwheel controller, and there is the possibility to enable or disable 2-way, forcing the filterwheel to always turn clockwise. (connected through USB)
I did not see this option available in the indi_sx_wheel driver. Are there plans to add this or other filterwheel options (like rotation speed, which can also limit the overshooting issue for SX filterwheel)?
Update: I sent out an mail last Friday to Starlight Express, asking if they want to share that command. I am still waiting for a reply.
Out of curiosity, if you need USB level commands to run an device. How did you acquire the USB commands to rotate the wheel itself.
Are those generic among other brands. Meaning, if I can find an one-direction USB command for another brand, it might work on the Starlight Express as well?
I took some USB traffic dump using the Windows program SX provides to see how it implements one-way rotation, but haven't had time to look at it in detail yet. There is also one other option to implement this by some work in the driver so that if a decreasing filter number is selected, the driver would first select the last filter, then the first filter and then move to the selected filter. That way motion would always be into the same direction.
I wrote to Terry Platt of SX asking for the source code of the Windows program, his answer was: "I don’t have the source to hand but the rotation direction is easily changed. All you need to do is to send the filter position numbers with 128 added for reverse rotation, so if you never do this, the wheel will always rotate anti-clockwise."
So I checked the sxwheel.cpp code and at line 149 I found the instance: "SendWheelMessage(f + 0x80, 0);"
I naively removed the "+ 0x80" which should be + 128 in HEX, recompiled and installed the driver.
And it magically works, rotation is always anti-clockwise.
There is a but, though. For whatever reason, at start-up, after the wheel finishes indexing (i.e. after it completes a full rotation at power on) the first filter switching is random, clockwise or anti-clockwise following the shortest route. Only the initial connection after indexing experiences this. If I disconnect and reconnect from the INDI Control Panel the rotation is always anti-clockwise, but if I disconnect, power down the wheel, power up it, wait for indexing, then the first movement is random... I'm not a coder, I tried a few random things (add + or - 0x80 here and there... but it didn't work.
My solution is that, since after indexing the wheel always (at least for as much as I tried) start at position number 1, I try to always disconnect the wheel with the filter set at position number 1. Then on connection the filter wheel doesn't move and if I then I make the first movement to position 2, it turns anti-clockwise and from there it keeps going that direction.
Surely a INDI wide implementation would remove all this hassle.
Ah, it actually is documented in the pdf I linked, just hadn't noticed it:
Note1: The Select New filter command will always rotate the filter wheel in a
clockwise direction to arrive at the target filter. If 128 (0x80 hexadecimal) is
added to the “New Filter number” then this will allow the filter wheel to
rotate the wheel in either direction to reach the target filter in the shortest
I added unidirectional movement as an option, will submit a pull request after some quick testing.