The Vixen Super Polaris is an Equatorial Mount for astronomical telescopes. This article shows an overview on how to upgrade this mount with electric motors and modern GoTo capabilities, at a minimal budget of about $60.
My first scope, which I acquired at the age of 15 with the help of the local amateur astronomers society was a small newton of 125mm (5″), with a hand ground mirror, in a hand made aluminium tube, mounted on a very nicely made wooden equatorial mount which had to be moved by hand. A beautiful piece to have lots of observing fun with and get my feet wet. A few years later I felt the need for something a bit more sophisticated and I bought (with some help from my parents) a new Vixen Super Polaris on an aluminium tripod. The price of that beast was astronomic (…) and I couldn’t even think of getting the electric drive system with it. But I could finally turn a knob instead of pushing on the tube to move the scope – and it even had scales, one day I actually found Venus in the sky during the day…
Let’s jump forward 20 years. Getting a degree and starting a career put astronomy on the backburner. I never forgot about it, but I also never felt the need to upgrade that system. In the mean time, digital cameras started to appear, cheap china electronics, fancy GoTo systems and today I could even afford to buy the original Vixen motors at an (unreasonable…) $300.
Today, vacation in the south of France is on the schedule for summer. Something has to be done! Getting a completely new mount like an HEQ5 or EQ6 or something even fancier would be nice, but I can’t justify that expense right now. An off-the-shelf GoTo system for the Super Polaris goes for about $300, that’s a bit more than I’m ready to spend on aunty. There has to be another solution.
Indeed! The interwebs are a makers best friend. A nice person is developing and sharing a GoTo system which runs on an Arduino microcontroller, controlling regular cheap stepper motors. The system can be controlled via Android phone, planetarium software or hand controller box. The software (or rather, firmware) is called OnStep.
Let’s build that!
The control consists of an Arduino compatible board with and ATMega2560 and an extension board, with sockets for the stepper drivers and a power supply for the logic voltage. For communication there is the USB connector on the Arduino and a Bluetooth module.
The schematic shown here is a bit peculiar, as I used an old ArduPilotMega 1.5 board, which contains the appropriate MCU. So, the pins are not identical to a regular Arduino Mega, but the principle applies to any similar control.
My design doesn’t excel in refinement, but is mainly based on what materials I had at hand. Depending on the raw stock you intend to use, you’d have to adapt the drawings. The motor bracket is made from a piece of aluminium L-section and a small block which fits in the appropriate slots on the mount. The motor cover is made from 0.75mm aluminium sheet. The assembly is kept together by means of a few M2 and M3 bolts.
Power from the motor goes to the worm gear through a T2.5 timing belt and two pulleys of 12 and 48 teeth. The gearing of this drive is critical (!) and is described in more detail further down. A simple box lasercut from MDF holds the electronics. I’d suggest to use a more moisture resistant material like Acrylic. Some small details were also 3D printed, but these are not strictly necessary.
Shown here is the bill of materials. Prices in brackets are components I already had in my junk or other drawers, but indicated to give a sense of the total cost to build this project.
|motors||Nema17 Stepper, 34mm||2||ebay||(CHF 11.00)|
|bracket||Alu L-sect, 60x60x4||120mm||www.metallladen.ch||CHF 5.00|
|bracket||Alu square stock , 15x15mm||80mm||CHF 2.00|
|motor cover||Alu sheet||200mm x 400mm||junk box|
|timing belt||T2.5, 6mm, 160Z||2||www.beltingonline.com||GBP 6.50|
|timing pulley||T2.5, 12Z||2||www.beltingonline.com||GBP 6.50|
|timing pulley||T2.5, 48Z||2||www.beltingonline.com||GBP 5.00|
|MCU||Arduino Mega 2560||1||ebay||(USD 8.00)|
|stepper motor driver||DRV8825 auf Breakout-Board||2||ebay||(USD 4.00)|
|bluetooth module||HC-05/HC-06||1||ebay||(USD 2.00)|
|wiring, connector, PSU, etc||junk box|
|total||full cost||~ CHF 63.00|
|total||my cost||CHF 35.00|
At the time of writing CHF and USD prices are mostly 1:1.
Some remarks regarding hardware
You don’t have to use a genuine Arduino board. Anything will do, as long as it contains an ATMega2560 and can be programmed through the Arduino IDE. Just for giggles I used the still working MCU part of a decommissioned autopilot system, which had suffered catastrophic loss of its sensor board in during a situation of negative ground clearance (aka. crash).
(Update Sept. 2016: I’d recommend using a Teensy 3.2 board. They are a bit more expensive and harder to come by than an Arduino Mega clone, but they have a lot more processing power, which is essential for achieving smooth drive and high slew rates. They contain an ARM MCU but can still be programmed by the Arduino IDE.)
For your average mount you can buy regular stepper motor drivers used in 3D printers today. The main difference between the various driver types is in the way they accomplish microstepping and in the driving smoothness they provide. Another difference is in the way you set microstepping resolution. OnStep provides a neat way of changing microstep resolution on the fly to achieve high slew rates with the limited stepping frequency that can be achieved with an 16MHz Arduino. To do this, the MCU controls the microstepping pins on the driver.
To determine the microstepping resolution you have to use, you have to calculate the proper gearing ratio, based on a spreadsheet which the original designer of OnStep provides.  This is an important step to get a smoothly working drive.
(Update Sep. 2016: I’d currently recommend using the TMC 2100 or TMC2130 SilentStepSticks by www.watterott.com. The TMC2130 gives you the advantage of setting microstepping resolution and other parameters by SPI.)
Finally, there is a whole lot of black magic you can do to select the correct stepper motors. Or you can just grab what’s in your junk box.
The parts for the motor brackets were made according to the drawings. The pulleys come without central bore, so they were drilled and reamed to dimension. The small pulleys loose the flanges and setscrews in this process. The pulleys were then simply glued to the motor shafts.
When installing the motor brackets on the mount the shafts need to be precisely parallel to the input shaft of the worm gear. If these axles are not correctly aligned the belts won’t stay on the pulleys. Vixen was kind enough to make the bottom of the flange parallel to the worm gear shaft, so half of the alignment job is done when properly seating the bracket to flange. It’s easy to adjust the other direction with the 4 screws in the flange.
Stepper Driver Breakout Board
To properly install the stepper drivers I made a small board from perf board. This allows me to easily change stepper drivers later on and makes wiring the electronics a flexible and easy job. The soldering doesn’t win any awards, so please just refer to the schematic. :)
Before soldering, the circuit was tested on a breadboard to make sure everything worked as expected.
The electronics enclosure was a quick and easy job on the lasercutter. Plans are given below, but I bet every maker has his own way of building a simple box.
Finally, when all the electronics are connected, we can proceed to configuring the software.
For the sake of completeness I also printed two additions. The timing belts do run straight on the pulleys, but to make absolutely sure nothing comes loose I made new plastic flanges. Finally, I made a cable gland/strain relief for the motor enclosure. Both parts are available for download, if needed.
You need to install the Arduino IDE to configure the software and program the Arduino. This is basic knowledge you need to find somewhere else on the web. So let’s dive straight into the code. Configuring the firmware is easy, the code is very well commented. All important configuration options are defined in config.h.
As mentioned earlier, it is critical to correctly set the gearing options. For this purpose there’s an Excel spreadsheet, made by the developer of OnStep. 
When guiding for visual observation, the mount needs to move roughly 15 arcseconds/second. To have smooth guiding at sidereal rate, we need very slow movement at high resolution. In the screenshot, that’s 0.35 arcseconds per step of the motor, requiring 42.6 steps/second. These values are easily achieved with our ATMega2560.
Now, when slewing the mount during a GoTo operation, we need a lot of these small steps per second. In the screenshot, that’s ~2.8 degrees/second, requiring ~30’800 steps/second, equal to a stepping rate of ~30kHz. At this value we hit the limits of the ATMega2560 with its clock speed of 16MHz.
To achieve faster slewing rates, we can do two things: change microstepping mode to require less steps/degree of movement or use a faster processor which can crank out more steps/second. To change microstepping mode on the fly, the appropriate pins on the stepper drivers need to be connected to the Arduino and correctly defined in config.h. To achieve faster stepping rates, you can use a Teensy 3.2 at 72MHz as MCU, which is supported by recent releases of OnStep.
In my special case with my rather strange MCU, I also needed to change the pins used to connect to the stepper drivers. The standard pin mapping is given (but not configurable) in config.h. You can carefully change this in OnStep.ino, just be aware that the pins aren’t defined by their Arduino pin number, but by their hardware address in the form of register and bit, e.g. PortA, Bit7. You’ll find more info on that topic under -.
Setting Stepper Drivers
For a smoothly running mount you need to correctly set the current to the stepper motors. Most stepper drivers have a small potentiometer to set a reference voltage between Ground and Vcc. Depending on this voltage the maximum current to the motors is adjusted. There are two ways of setting the current:
You can calculate the correct voltage as a function of the maximum current desired, and then measure and set the voltage on the potentiometer. There is a description of this process under  and .
For a more hands on approach you can simply run the motors and adjust the potentiometer until you obtain a smooth run. A few pointers:
- Imax too small: motors will run very smooth and silent while guiding, but will have insufficient torque. Steps might be skipped, if mount is not perfectly balanced. At high RPM motors will stall and start to hum.
- Imax too large: very rough running while guiding, with a tendency to ‘hang’ on full steps. At high RPM stalls might occur as well.
Basically, when using cheap drivers and your average NEMA17 motors, you won’t run a real risk of damaging your motors with large currents, as long as you don’t maintain a unfavourable setting for too long. If something still goes wrong, you didn’t read it here, ok? ;)
Usually it is easy to connect the Arduino to your Bluetooth module, as long as the Baud rate is set correctly on both sides. As last resort you can change the Baud rate in the arduino.ino sketch to that of the BT module. But I’d rather suggest you configure the BT module to the correct value of 9600. This is where I stumbled for a bit, so I’ll share my findings for others to avoid.
Use a FTDI USB to serial adapter to connect to your BT module. Then you start a terminal software and communicate with the module’s control software. The commands always start with ATsomething. And here’s the thing nobody tells you: the commands are case-sensitive! You will only get an OK if you type uppercase AT – lowercase at will just go unnoticed by the device…! Took me only 2 hours to figure out :)
While researching my problems I found a host of information on the cheap asian Bluetooth modules HC-05 and HC-06  – . You can even convert the one into the other by flashing different firmwares. 
Operating the System
The system can be initialized and aligned in two ways: by a custom made Android app OnStep Controller 2 or by the planetarium software SkyPlanetarium on your PC. Both applications are being developed by the creator of OnStep. The connection is serial over Bluetooth serial over the Arduino USB connection.
The Android app OnStep Controller 2 you can find on the Android Play Store . You have to pair your phone to the Bluetooth module before first startup of the OnStep app. Then, on first startup, you have to setup the connection in the app. On subsequent starts, the app will autoconnect on startup. You can then do the alignment with the tools provided in the app.
To use SkyPlanetarium and most other planetarium programs you’ll have to install the OnStep ASCOM driver . The ASCOM driver doesn’t provide the tools to do an alignment, it will only allow communication from software to mount and back. You have to use the tools provided by SkyPlanetarium to do the alignment.
Whichever way you use to connect, alignment always works the same. To start alignment, your mount should point to the celestial north pole (declination 90°) and the counterweight should point down to the center of the earth (local hour angle 12). First you set the controller to the correct time and location. Then you start a 1,2 or 3 star alignment. Tracking will start, and you are presented with a list of suitable alignment stars. Do a GoTo to a well visible star. The mount will slew to where it thinks the star should be. Using the guide controls, you can now center the star in your eyepiece. Do an Align (and repeat the process, depending on the number of alignments you selected) and your mount should now be properly aligned and ready to use.
Once the alignment process is finished, you can use whatever tool suits your needs. Use the manual controls or GoTo functions of the Android app, or disconnect your phone and reconnect with your PC and your planetarium software of choice. Alignment will be retained as long as the controller remains powered up.
In Zukunft werde ich wohl noch einiges nachrüsten:
- ST4 Handbox Interface
- die Steuerung über den Touchscreen des Smartphones ist besonders für feine Korrekturen ziemlich unpraktisch. Eine Handbox mit physischen, tastbaren Knöpfen wäre sehr willkommen.
- eher kosmetischer Natur, am ehesten ist die Status-LED des BT-Moduls interessant
- Motor-Stromversorgung mit höherer Spannung
- Prinzipiell haben Steppermotoren bei hohen Drehzahlen umso mehr Kraft, je höher die Betriebsspannung ist. Ich möchte testen, wie weit da bereits ein simples 5$ China-StepUp Modul hilft.
Für eilige Zeitgenossen gibt es, zumindest was die Elektronik betrifft, mittlerweile ein kommerzielles Board zu erstehen für ca 85 USD.  Dieses Board ist allerdings ebenfalls Open Source und wird auf Hackaday.io dokumentiert. 
Update Feb. 2015:
Das erwähnte kommerzielle Board ist ein Arduino Shield, es gibt ausserdem noch eine ST4-Port Erweiterung und eine passende Handkontrollerbox dazu. Alle Entwicklungen sind dokumentiert der Seite des Entwicklers Steven Sagerian. 
 Homepage des Entwicklers
 Forums-Thread Cloudy Nights > DIY ET-8 GOTO Mount
(nicht erstellt vom Entwickler, hat aber viel Info, mittlerweile inaktiv)
 Yahoo Group OnStep Telescope
(nicht öffentlich, Beitritt kein Problem)
 Android-Software zum Initialisieren und Steuern von OnStep
 Port Registers instead of just pin number (Stepper motors)
 AVR Ports <> Arduino Pins Mapping Tabelle
 Nema17 Steppermotor Datenblatt
 Berechnungstabelle Schrittverhältnisse
 Pololu stepper driver board
Allgemeine Info, Strom einstellen
 A4988 vs DRV8825 Chinese Stepper Driver Boards
 Stepstuck revisited… DRV8825
The amazing DRV8825 driver carrier has a similar flaw, strange jumping of steps in 32th micro-stepping mode.
Aus <http://www.morgan3dp.com/stepstuck-revisited-drv8825/> February 28, 2013
 DRV8825 missing microsteps
sehr ausführliche erklärung, inkl. lösungsansatz
Aus <http://cabristor.blogspot.ch/2015/02/drv8825-missing-steps.html> Feb 12, 2015
HC-05/HC-06 Bluetooth Adapter
 Using the HC-06 Bluetooth Module
very rich resource!
 One board… several firmwares
explanations about the various firmwares these bluetooth boards can be flashed with…
 AT command mode of HC-05 and HC-06 Bluetooth module
 Flashing a new firmware
you can even make the one from the other
 Hackaday.io – OnStep Controller
 Kommerzielles Board, ca. 85 USD
 Weitere Info zu den Boards von Steven Sagerian