Controlling floppy stepper motors from FTDI USB chips in bitbang mode
From Electron Cloud
I have several old Teac FD-55GFR 5¼" floppy drives, and wondered if the steppers could be used for a miniature 3-axis RepRap or some other type of CNC machine; it would be especially nice to re-use the controller boards as well, since they are compact enough. As a basic feasibility experiment, I wanted to try to control them from a DLP Design DLP-2232 board which I already had handy. That's quite a versatile board - it connects via USB and can provide two logic-level serial ports, or a bunch of GPIO pins, and there are drivers for Linux, MacOS and Windows. I have used it in the past mostly for monitoring serial communications between microcontrollers: the connection between the micros is full-duplex (RX and TX lines) but with just one of these boards you can monitor both at the same time by connecting to the two RX lines of the two separate serial ports (and the TX lines on the 2232 go unused, unless you need to inject data somewhere).
To do bit-banging on Linux though, there is libftdi, which includes some example code. I started with examples/bitbang.c and went from there. I used a stock 2232 board, no need to modify its eeprom (although I think you can modify it to indicate that it's intended to be in bit-bang mode by default, if memory serves). I think the code will work fine on any FTDI device though (as long as your USB device ID matches); at the end, you only need 2 GPIO pins for step and direction signals.
The other tutorials I've found about re-using floppy drives seem to focus on the PC end of the floppy cable, so I was having trouble at first figuring out which pin on the drive's card-edge connector is "drive select". Going by this pinout you'd tend to think pin 10, but it turned out to be pin 12. All of the signals on that connector are active low, BTW. As it turns out this page has a nice explanation of the "Programmable Shunt Socket" (seems to be jumpers on the Teac drives) which select the drive's address... must be why pin 12 activated this example (which does have a jumper on it, actually). Back in the day I only had 360K floppy drives, and 3½" drives were available shortly thereafter so I upgraded to that and never had a high-density 5¼" drive (except for now... they came out of junk machines that I was accumulating for a while).
So after making the wrong assumption at first, I connected all of the possible "select" pins to GPIO pins on the 2232, so that I could experiment and find out which one it was necessary to bring low. I did that by cutting some short wires, about 1/2 inch or so, stuck them into pins 6 and 10-20 of the "PC" end of a floppy cable, and then connected those to pins 33 and 35-40 on the 2232 board, which I had plugged into a solderless breadboard. Then I was able to "select" the drive, control the main motor (on and off), and step the head back and forth (there are 80 tracks on a high-density floppy, so you can step 79 times until you run into the limit on either end).
Then I was able to correct the wires I had soldered onto another floppy drive, and verify that it still worked. I found that the maximum step speed is about 1 millisecond per step, but only for short distances (e.g. 20 steps), and I'm not sure that it didn't miss any steps in that case. With 1.6 milliseconds per step it is able to seek from one end to the other more reliably.
The torque seems a bit weak though compared to the NEMA 23 steppers I have on my Sherline milling machine; it's not very hard at all to stop it with my fingers, even at slow step rates. But I still suspect the torque might be sufficient for a really lightweight mini-Mendel design. (After I get my first RepRap machine built, maybe I will try to build a mini one with floppy steppers.) These are relatively beefy steppers for PC floppies; some newer drives had wimpier ones, and 3½" drives definitely have much smaller steppers. Also they run cool, so it might be possible to greatly increase the torque by using a higher voltage, or just using a modern Allegro controller chip with settable current limiting.
Last but not least you can download ftdi-stepper.c and compile it like this (on Linux):
gcc ftdi-stepper.c -lftdi -o stepper
and run it as
where the number of steps can be positive to go to higher-numbered tracks or negative to to back towards track 0.