OK, now that we have our PCBs from OSH Park we can get on with populating it and finally checking that we get the linearized current we need for the voice coil.
So first off, here is the schematic again.
For the resistors and capacitors we chose surface mount components (size 0805 for easy hand soldering); the op-amp and bipolar transistor are through hole. Note also that instead of a 1kOhm resistor I'm now using 20 Ohms to allow for sufficient current. Depending on how precisely we need to drive the voice coil and what resolution we can get from the set point voltage source (most likely 0-5V), we may have to rethink that value.
Here's the finished board. All SMD components are on the back, by the way.
As you can see from the schematic, Vcc will be a 5V supply and Vin sets the laser current.
So let's give that a go then:
First of all, I'm going to test the board and circuit by putting in an LED instead of the voice coil (so much easier to see... :), supplying 5V Vcc and a set voltage on Vin.
Works nicely. Vin values below 40mV obviously light the LED less brightly.
Next, I need to check
a) what current we get as a function of voltage on the BJT base (Vin),
b) whether that current is linear now. That's the whole point of having an op-amp in the board...
So let's switch the LED for a resistor and measure the voltage Vr across it vs BJT base voltage Vin. Vcc is 5V as it also supplies the opamp. Ohm's law then gives us the current through the resistor Ir = Vr/R.
I've tested the current output with two different resistors, a 1k and a 9.7 Ohm. The latter is a much closer match to the actual resistance of a voice coil. As you can see from the graph above we've achieved what we needed: the output is linear with set point Vin, and our range is OK too, as Vin = +/- 2V will result in about +/- 100mA.