Last time I have posted a simple Current sensor for Arduino using only a resistor here in this post. But there are some problems on this kind of simple circuit and they are 1) very lossy due to the big voltage drop on the resistor 2) if you decrease the voltage drop on the resistor, it will decrease the resolution 3) There is a significant voltage drop on the load at higher load current which is not good. The allegro current sensor ACS7xx series is a good alternative but it cost too much for my project so I search for another option. Then I found this ZXCT1008 that is just right for my application.
- Low cost
- 1% accuracy
- Up to 500mV sense voltage
- 4uA quiescent current
- 2.5V to 20V supply voltage
- High side current sensing
About the Circuit
The circuit uses a ZXCT1008 high side current sensor monitor IC. Inside this IC is just a differential OPAMP that amplifies the voltage drop of the resistor current sensor.
Rsense is a resistor for sensing current, ZXCT1008 can allow the Rsense to have a voltage drop up to 500mV. But for lower power loss, just use lower voltage drop, say 100mV.
For example we want to design a current sensor for solar charger with the following specs:
Max charge Current: 2A
Max solar Voltage: 19V
Max Vout: 5V
To compute for Rsense:
Rsense = (Vrsense)/Imax
Vrsense – Voltage accross Rsense at Max charge current
Imax – Max charge current
Let’s use 100mV for Vrense for lower power loss and voltage drop:
Rsense = 100mV/2
Rsense = 0.05 ohm
Prsense = (2A^2)^0.05 ohm
Prsense = 0.2W (Note: always use double power to make sure it will not heat up too much, in this case use at least 0.5W resistor)
Rlim is optional and is only needed if the input voltage is greater than 20V. Since the input max is only 19V, we will not be needing the Rlim.
The output current at 100mV Rsense drop is 1mA so the output current can be computed as:
Iout = 0.01 * Vrsense
Compute for R:
R = Vout/(Vrsense*0.01)
For safety, we will just use 50% of the Max Voltage input of the Arduino’s analog input. This is to make room for the over current condition. You can use 70% if you want. Maximum input voltage of arduino nano is 5V if you are using the VDD as a reference. This is different on other arduino, for example Arduino Due operates on 3.3V instead of 5V. Check the datasheet of the micrcontroller you are using.
R = 2.5V/(0.1 * 0.01)
R = 2.5k (use standard value 2.7K instead)
Computing for output current on the Arduino:
First compute for the voltage output Vout:
Vout = ((ADC_value)/(ADC_max)) * ADC_reference
Derive Iout equation:
R = Vout/(Vrsense * 0.01)
Vrsense = Iout * Rsense
combine equation, you will get Iout:
Iout = (Vout)/(R * Rsense * 0.01)