With drives that have a servo platter a common issue is not all the heads are properly centered over the track which causes the data from some of the heads to not be recoverable. The head servo is closed loop positioning which keeps the servo head centered on its track. This should keep all the heads on track but mechanical changes cause some of the heads to be out of alignment. A RD53 drive that I freed the heads on had this problem. Heads 0 and 4 to 7 were ok, head 1 mostly unreadable and head 2 and 3 gave data from next lower cylinder. Near the end of the disk head 2 and 7 had large number of unreadable sectors. I had previously recovered a 3B1 Miniscribe 6085 drive using a power supply to pull the head servo. I later used this method on it. With the position error different on different heads using one voltage wouldn't allow recovery of all the RD53 data so I used an I2C digital to analog converter board and an additional buffer amplifier and switch board to allow controlled adjusting of the servo offset voltage by the BeagleBone. This allowed recovery of all the data on the drive. The remaining read errors were at the locations printed on the label.
I also tried this on a RD54/Maxtor XT-2190 that had random sector errors. The method did work to control the head but it didn't help much on data recovery. How to connect the DAC board is in the pictures below. This drive had a chip cracked in half and a broken SIP resistor. The SIP resistors look pretty fragile but it must have taken a good impact to break a chip.
This technique should be usable on many of the drives using servo track with voice coil actuator to control head position. Only a few drive models have schematics available which will make it difficult to determine how to inject the offset voltage for drives without schematics. The RD53/Micropolis 1325 schematics and others are on Bitsavers.
I had first tried this method with a Quantum Q2040 drive which also needed its heads unstuck but the unreadable sectors were from the data being overwritten so the technique worked to control the head position but no data was left to recover.
If you wish to try here is the schematic of my buffer board. The parts chosen where what I had that would work. It can drive 0 to about 9V. Voltage gain is about 3.5. That would make the maximum voltage about 11.5V but since the maximum output is about 9V lower gain may make more sense. The purpose of this board was to increase the output voltage to the range the drive needed and to allow the voltage to be switched off. The drive gets unhappy if it tries to seek with an offset voltage applied.
The DAC I used was a MCP4725. It was connected using the grove connector to the BeagleBone green since I had the mating cable. You can also connect it to the I2C pins on the J7 expansion connector. Pin 5 on J7 needs to be connected to the enable pin on the buffer board. The board linked to isn't the exact board I have. I don't remember where I got the board I used. All this was stuff I had on hand.
The code is here It is a branch of 1.32. I don't plan to keep it up to date with currnet code since this was a one shot need for me and I don't expect enough other people to be using it to be worth the effort to maintain. The code for controlling the DAC is in drive_read.c and likely will need adjustment for other drives. If you drive too low or high an offset voltage the head servo will go unstable.
The way this works is the servo head has a special pattern that the drive electronics converts to a voltage that represents how far the head is from the track center. An error amplifier compares the voltage to the nominal center of track voltage to drive the head servo to bring the servo voltage to the nominal voltage. This keeps the head centered on the servo pattern. I drive an offset voltage into the error amplifier to effectively change the nominal voltage which shifts the head position. The code steps through the specified voltage range trying to find a voltage that will allow all the sectors to be read on that head. It keeps track for each head the offset voltage to try as the starting voltage when it starts on the next cylinder.
Stepper motor drives also have problems with the heads not being on the
track center when the track was originally written. Some drives even when
they were new had problems with the position drifting so software like
SpinRite were created
to try to refresh the track format to prevent data loss.
For stepper motor drives recovery of data with heads off center
should be possible by using a microstepper
controlled by the BeagleBone driving the head stepper. You likely will
need it switched so the drive logic can control the heads on power up
and when you wish to use the drive's normal head stepping. I have not tried
this since I haven't had a stepper drive I needed to do this on. This
approach should work with most stepper drives and wouldn't require schematics
to be available.
The following picture links also have descriptions of what is shown in the pictures. Thumbnail Picture Selector
Q2040 setup (2.3M) RD53 setup (1.3M) DAC board (1.6M) RD53 connections (1.8M) RD54 connections (1.8M)
Q2040 partially erased track (103K)
Feel free to contact me, David Gesswein email@example.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with. I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation.
PDP-8 Home Page  PDP-8 Site Map  PDP-8 Site Search
The following picture links also have descriptions of what is shown in the pictures.
Thumbnail Picture Selector