The Kaidan Magellan Turntable (MDT-19) is a motorized turntable originally intended for scientific imaging. We have one of these in the Camera Culture group, which has been passed down from generation to generation, and mostly neglected along the way.
When attempting to film a 3D display using a 2D camera, it can be useful to have the display rotating. There are all kinds of other good optics reasons to want a motorized turntable, so I decided yesterday to get this thing running again. You can see our rather beat up MDT-19 on the floor in the above photo (the 19 is for 19 inches) and the eMCee motor controller box on the table.
When I found the MDT-19 in the basement, it was missing its power supply, and some of the connectors. Luckily the scrap bins of the media lab always provide, and I was able to cobble something together to power it and talk to it. Here's my bootleg serial gender changer/25-pin/9-pin adapter. I've got this plugged into a pl2303 compatible USB serial port. The Kaidan control box is wired to receive RS-422, and luckily it still had an RS-232 to RS-422 adapter. That would have been harder to find!
My MDT-19 didn't come with any software or manuals or description of any kind. The Kaidan page linked above is all I found online, and apparently Kaidan is out of business. I was prepared for this to be a little complicated, but it wasn't actually that bad.
The first step was to open up the controller box to see how it was built. It looks like Kaidan simply repackaged a board from Advanced Micro Systems. In particular, the board uses a part called the SMC-C24 to drive a standard motor controller chip, the L297. You can see the overpainted AMS logo on the board. The image is shrunk by your browser, so you can download it to see a slightly higher res version.
I'm not rehosting the datasheet for the SCM-C24, since I don't know if that's Kosher or not, but it's just a google away. The only important part of the datasheet for this project is the table of commands, reproduced below:
From probing pin-13 on the SMC-C24 (its in the datasheet) its clear that the controller is not set up for Party mode (of RS-422). So I switched the adapter to Single. *joke here* With trial and error I also found that the SMC-C24 is configured for 9600-8-N-1 serial. I was hoping to just find some software from AMS that would run the board, but I guess this part is too antiquated for their ultra-modern modern Visual Basic .NET "Cockpit" software to recognize.
After messing around in minicom for awhile, I found that if you send the controller a space character (ASCII 32), it will respond with a version number. After further sending it a CR/LF pair, it will respond to the commands in the datasheet. The syntax is simple - the letter command concatenated with the numerical argument followed by either a CR or CR/LF pair. It seems to prefer different things in different places. Notably, an LF after some commands will cause the position reporting (z1 mode) to stop. So I decided to write a quick python GUI to control this thing.
My app is pretty simple. I've provided the source code under the GPL in case you're interested in running your own MDT-19 with it.
The controller provides three movement modes — continuous (M), relative (R), and absolute (+/-). To me, the relative and absolute modes seem like they are named backwards. The relative mode moves relative to the controllers internal coordinate system, in other words to an absolute position, while the absolute mode moves relative to the current position. But anyway, you just drag the speed slider to the desired speed, type in the location you want, and hit go. You can also click the plus and minus buttons for continuous motion. The absolute position of the turntable is read out in the position box.
The controller allows you to choose an initial and final speed and slope to transition between them. I came up with a heuristic that works fairly well for the MDT-19. If you try to run it faster than 1000 or so the stepper motor will start missing steps and the turntable will jam.
You can get my code here. Let me know if you have any questions about it. Like I said, its quick and dirty - the serial port is hardcoded to /dev/ttyUSB0. If you're using Another OS or port you'll have to change that part. Otherwise, it should be very portable. I'm also including a video to inspire you.
Run this using python. You will need pyGTK, and pyserial for your platform. The code is licensed under the GPLv3.