The ACS712 has voltage output. Rather than try to amplify the current, it would be simpler to amplify the voltage output.
More reasonable, though, would be to use a more suitable current sensor. A 20A current sensor is just not the correct tool for measuring microampere level current.
There are many other current sense sensor models available with ranges more appropriate to measuring microamperes.
If you were doing general current measurement, I'd recommend that you use one of those better ICs or modules. They can accurately measure low current with low voltage drop to the load.
You aren't trying to measure current in general, though.
You are trying to measure the base current of a transistor in order to plot its current/voltage chart.
This means that you don't have to care in the slightest about the voltage drop across the current sensor. You are free to measure current the old fashioned way with a shunt and a couple of voltmeters.
- Your Arduino has a handful of analog to digital converters (ADCs) that measure voltages - two ADC channels is two voltmeters.
- A "current shunt" is any resistor with current flowing through it. There will be a voltage drop across it that you can measure.
For your use, you can pick a high value resistor. That wouldn't work for a general purpose ammeter because the voltage drop will be awful across it.
For your IV tracer, that's fine.
I did this very thing a couple of months ago, with this circuit:
As it is, that circuit will generate a base current from 0 to about 5 milliamperes.
I use the Timer1 library to generate a pulse width modulation (PWM) signal at about 10kHz. With the high frequency, the simple filter is adequate to smooth the base output to DC. The Timer1 library also gives you 10 bits of resolution on the PWM duty cycle - you can vary the output voltage with 1023 steps.
Using the two ADC channels and the known (measured) value of resistor R2, you can measure the current going to the base of your transistor.
The base signal is rather noisy, and ADCs of the Arduino aren't really up to microvolt measurements, but if you use oversampling, you can reduce the noise and gain precision at the same time.
Set the output PWM value, measure and average both channels a few thousand times each, and you have your base current. You only need to measure the base current at the start of each trace, so while it slows things down it is not a complete show stopper.
This is a plot made using the method described above:
The base currents are give to two decimal points of precision in microamperes in the upper right corner. They are truthfully no more precise than about 0.5 microamperes, but I needed more decimal points to be able to judge that.
Since you have the ACS712, I'd say go ahead and use it to measure the collector current but generate and measure the base current using the Arduino and a resistor.
Absolute accuracy is pretty much impossible on an IV tracer, no matter what you do.
- The variations in room temperature alone will cause variations in the curves - measurements made on a cold day will be noticeably different than measurements made on a warm day.
- Transistors vary. Two transistors of the same type made on the same date can give traces that are very different.
The thing about good amplifier design is that a good design doesn't care about the specific values of the transistor as far as current gain goes.
Build your tracer, and try it out. In building it, you will learn a lot about transistors and how they work. In using it to design an amplifier, you'll learn even more.