Parameters for voltage-controlled current source
The opamp is rail-to-rail and it can run from 3.3 V, so that's OK.

One thing to check is that Rl is small enough.  At 1 mA, the emitter of of Q1 will be at 1 V.  That means the collector should be 1.5 V minimum, preferably 2 V, for good regulation.  That leaves 16 V for the load.  This can't be more than 16 k&Omega;, else there isn't enough available voltage to allow the 1 mA to flow.

I suspect the opamp is oscillating.  Check the output of the opamp with a scope.  If it is oscillating, the average current could be considerably off from the setpoint.

A little capacitance immediately between the opamp output and its negative input will provide "compensation".  There are lots of ways of looking at this.  One way is that this slows the opamp down so that the rest of the system looks instantaneous to the opamp, thereby not causing lag and instability.



C1 provides the immediate high frequency negative feedback to slow down the opamp.  R2 provides a fixed and known impedance for it to work against.  The 100 pF shown is probably more than needed, so is a good place to start to eliminate instability as the issue.  Once everything is working, you can experiment with how small of a C1 you can get away with.  I'd at least double it then in the final circuit since you can't test over the full range of operating and environmental conditions.

The same thing applies wither Q1 is a NPN transistor (as shown above) or a N channel FET.