Floppy Disk Sampler (Part 1)
tl;dr – Scroll to the bottom to hear some weird and wonderful FDD sampling sounds!
In my previous post I unpacked the idea behind using a floppy disk drive (FDD) as a crude sampler. My early experiments yielded some really interesting results, especially finding out that the compression/expansion of audio was a by product of recording/playback with the FDD’s mechanism. My first prototype is working and, whilst it lacks audio fidelity, its control circuitry works well.
I’ve done quite a bit of experimenting with my FDD to allow me to control its mechanism and below I’ll share a my control circuit designs, which give the ability to control the stepping speed and direction of the FDD read/write head, control of the floppy disk platter speed as well as use the index pulse of platter motor to drive the step speed.
The easiest way to ‘drive’ a floppy disk is by using the IDE connections at the rear of the drive. Most FDD drives have a standardised connection scheme but it always helps to check a datasheet to make sure what pins do what. My prototype uses a Teac FD-235HF drive, which is pretty common. Below are the pinouts for it:
Now, before you can do anything if the drive you’ll need to power it. If you have a computer power supply handy, that’ll be easy. Otherwise you can power it with 5v. Make sure you’ve got at least a 500ma power supply.
The main pins that are used to get the drive working are: Drive Select 1, Motor On, Direction Select, and Step. I’ve taken the Index Pulse directly from the FDD platter circuitry as well as the Clock Signal, which allows me to switch between external clock and internal clock to drive the motor circuitry (and thus disk platter speed).
With the exception of the Step Pin, all of the pins expect to be grounded. To get the platter motor spinning, ground Pin 12+16 and insert a disk. To step the read/write head you’ll want to send 5v pulses to pin 20 and the direction of the steps can be changed by grounding pin 18. These are your basic controls. You can easily turn the motor on and off, change the speed of the read/write head stepping, by sending regular 5v pulses, as well changing its direction by using external circuitry and switches. I also explored how the motor speed is controlled and, in short, the FDD controller sends the motor driver a 1 Mhz signal, and by changing frequency you can alter the speed of the motor. The motor also sends an index pulse every time it completes 1 rotation, which can be fed to the step in pin. I’ll expand on this below.
I chose to use CMOS circuitry rather than an Arduino. Firstly, because I had all the components lying around and secondly because, with the exception of the Arduino Due, it is not easy to get a reliable 1 Mhz pulse from an Arduino Uno or Nano (both of which I have). I needed a reliable 1 Mhz pulse for the external clock signal. I will be looking into using an Arduino in the future, especially since more complex control of the FDD can be achieved through its use.
Now to the nitty gritty! The schematic above shows how I use a 555 timer to generate a variable square wave pulse at a 50% duty cycle. R5, a potentiometer, is used to change the pulse speed, which is fed to the step pin. You get a good range between 3 – 100hz. A 4046 chip uses a Phase Lock Loop (PLL) to generate a Square wave frequency up to 1 Mhz for the external motor clock. It’s frequency is variable by using the R1 potentiometer and R2 and R3 set the min and max frequency possible, which is very handy. This external clock signal is fed to the FDD motor driver directly and I found the correct pin for this by probing the ribbon cable, which connects the motor board to the main board by my multimeter set on Frequency counter mode. I took the time to disconnect the internal clock signal so that I am able to switch between internal and external clock signals. It was easy to do, all that was required was removing one SMD resistor. Lastly I found the index pulse from the drive itself. For some reason the index pin on the drive didn’t give me a reliable pulse every time the disk platter completed a revolution. I’m not sure if is due to me using an external clock or not.
The schematic above also shows how I’ve configured the initial ‘control surface’ of the drive (pictured below). It consists of two tactile switches, one to allow for stepping of the read/write head and one for its direction. Two SPDT switches are associated with these momentary switches and are to their right. The first allows for step source, which can either be the 555 timer or the index pulse. Using the index pulse allows the drive to step exactly one revolution of the disk, which happens automatically. The second SPDT switch allows for a permanent setting of the direction, rather than using a momentary switch. The two potentiometers are for Step speed and Clock speed (for the motor). To the right of the potentiometer one SPDT switch turns the motor on and off and the other gives a selection between internal or external (4046 circuit) clock.
In the next part I’ll detail how to use gain access to the FDD read/write heads to enable them to record and read audio. I’ll share the circuitry that I have used and how I’m developing it further to try and get better audio fidelity from the drive.
But for now here is an example of me manipulating a recording on the FDD Sampler by controlling the speed of the disc and the speed of the read/write heads. The beginning starts at the slowest speed which gives some very weird effects! I should also note I’m using two out of the three FDD head coils which gives me a stereo effect which widens as the disk is sped up thanks to the Haas effect.