Moving a HDD Voice Coil

Dear all,
I have gone thruogh the forum and found some threads on the topic, but not exactly what I am looking for. Sorry for adding more threads on this.

I am looking for a IC that can control/place the voice coil of a HDD in a determinted position. I mean a kind of black box whose input would be controlled by Arduino and its ouputs conected directly to the two inputs of the VC.
Any idea on any IC?
If not, can somebody share an electric circuit that may do something similar?

I have read I need a voltage range from +5 to -5 which is not a problem itself, but I could not make clear much more.
Any help will be kindly regarded.
Best,
Diego

The way this is done inside a working drive is to determine the position by reading the
track servo marks as the heads move acrosss tracks, and this provides the absolute
position for a PID algorithm until actually on the right track.

Without this position sensing you'll need to provide some sort of encoder to measure
position. Then a PID to feedback to a motor controller (the armature coil can be
thought of as a DC motor) Due to its low inductance a high frequency PWM may be necessary.

I'm going to make an educated guess...

The power connector to a hard drive supplies +5V & +12V. It's possible to use an H-bridge to reverse the voltage to the motor, but I think it moves one direction eletromagnetically, and back "home" with a spring. So, -5V shouldn't be necessary.

At 2.5V (or 50% PWM) I'd expect it to go slightly past mid-position. I'd expect it to move to it's maximum position at slightly less than 5V.

If you need to position it precisely or position it with varying loads, you'll need postional feedback (i.e. a servo system).

None of the HDDs I have taken apart had a spring in the mechanism. I suspect a spring would be much too slow to move the arm. They must be driving the voice coil using an H-bridge, to drive the arm in both directions.

Hello everybody and thanks for your kind answers.
There is no spring in this voice coil for sure. I don't need a precise positioning, just moving it approximately.
Can you provide more info on how to drive the voice coil using an H-bridge?

Best,
Diego

I think you need the position feedback. Looking at the basic physical design, the magnetic field from the magnets is arranged to be relatively constant, and so providing a particular current through the coil will result in constant force, not some sort of equilibrium position...

You may be able to use an Arduino motor shield (which contains 2 H-bridges) for driving the voice coil, or something simpler, depending on its resistance. So I suggest you measure its resistance.

Thanks for your suggestions! I will try and will let you know.

Best,
Diego

Hi Again!
I have done like this:
I have used L293 H Bridge, using inputs 1 and 2 like in this datasheet (page 2)

I am using a code that serial input a duty cycle:

#include <stdio.h>
#include <stdlib.h>
int pinA = 2;
int pinC = 7;
int steppingDelay = 10000;
double cycle = 0.5;
String readString;

void setup() {

  static unsigned int input_pos = 0;
  pinMode(pinA, OUTPUT);
  pinMode(pinC, OUTPUT);



  digitalWrite(pinA, HIGH);
  digitalWrite(pinC, HIGH);

  Serial.begin(9600);
}

void loop() {
  digitalWrite(pinA, HIGH);
  digitalWrite(pinC, LOW);
  delayMicroseconds(steppingDelay*(1-cycle));
   digitalWrite(pinA,  LOW);
   digitalWrite(pinC, HIGH);
   delayMicroseconds(steppingDelay*cycle);
   while (Serial.available()) {
     char c = Serial.read();  //gets one byte from serial buffer
     readString += c; //makes the string readString
     delay(2);  //slow looping to allow buffer to fill with next character
  }

  if (readString.length() >0) {
    Serial.println(readString);  //so you can see the captured string 
    double n = readString.toInt();  //convert readString into a number

    // auto select appropriate value, copied from someone elses code.
   
      Serial.print("writing number: ");
      Serial.println(n);
      cycle = n/100 ;
    
  }
    
    readString=""; //empty for next input
}

The voice coil "moves" but I can not positionate it. Also the noise is terrible. I am using 3.3V for Vcc2 in the H Bridge.
Any clues will be appreciated!
Best,
Diego

Did you measure the resistance of the voice coil?

My multimeter isn't the best, but measures approx 5.5Ohms

As MarkT said, the head positioning coil (aka voice coil actuator) requires feedback. And in any case, the PWM (aka analogWrite) is far too low in frequency.

http://rack1.ul.cs.cmu.edu/rotaryvoicecoil/

Positioning the Head using the Rotary Voice Coil Actuator

Servo control electronics and firmware vary the currents and voltages through the coil based on closed loop feedback. The source for the feedback comes from servo bursts patterned into the platter media. The feedback source wastes platter media surface dedicated to the task of reading information from a platter for dynamically correcting the position of the voice coil actuator.

The voice coil actuator in the disk generally has no 'natural position' that it springs to as is the case with speaker voice coil actuators. All movement and positioning is dynamic.

You might be able to make this something you can position with a given duty cycle (at a much higher frequency) by adding a spring.

dmelladom:
My multimeter isn't the best, but measures approx 5.5Ohms

The motor shield is a reasonably good match for the voice coil then. To get rid of the noise, you will have to use a much higher PWM frequency. To position it, you will need either feedback or a spring to work against, as others have already said.