I am currently working on building my own DIY BMS system with my NodeMCU.I've got 2 ADS1115 boards that are connected via I2c to the NodeMCU. There are 8 different "channels" that I am measuring since each ADS1115 board has 4 inputs. Each "channel" has a voltage divider consisting of a 1M ohm and a 47k ohm resistor. Note, in the settings for the ADS1115 I am using the gain of 1.
My question is in regard to my voltage dividers I have with this project. I am wanting to measure up to 70V, so this divider gets it down in the range I need. I used 1M ohm because I know it's good when measuring voltage to have higher impedance, but if these resistors have a 1% tolerance, that leading resistor could be off by 10,000 ohms! So I could measure the actual resistance of the voltage divider, but that would only stand true for that pair of resistors. Each other voltage divider can be off in that 1%, or 10,000 ohms tolerance level (just for that first resistor).
This has led to all 8 voltage readings from the same low voltage source, to be all off by several hundredths of a volt. What is annoying is they are all off by different amounts, some 0.01V and some 0.05V. I am pretty sure this issue is just from the tolerance of the resistors.
Would it be best to use lower value resistors? I don't want them to be too low obviously or else that will alter the readings and slowly drain my lithium cells, but I also want to all of my readings to be a lot more consistent with one another.
Any advice would be greatly appreciated as always! Thanks!
I am currently working on building my own DIY BMS system with my NodeMCU.I've got 2 ADS1115 boards that are connected via I2c to the NodeMCU. There are 8 different "channels" that I am measuring since each ADS1115 board has 4 inputs. Each "channel" has a voltage divider consisting of a 1M ohm and a 47k ohm resistor. Note, in the settings for the ADS1115 I am using the gain of 1.
Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?
We need to see how you will connect the 1115 to the batteries as the 1115 does not have isolated analog inputs and I assume the batteries are in series!
Thank you all for the replies! I apologize for explaining the resistors that way, bad habit of mine with the words yes, they are marked at 1% tolerance.
Good points about using more precise resistors. It will definitely add more cost to the project because I'll have 3 ADS1115's per board. And I'll be making several of these boards, so I'll be getting a LOT of resisters haha..
Yes I definitely have my batteries in series! In my code I just measure the voltage as it increases with each cell in series, and then subtract them from one another. I know it's probably not the best way to do this, but i don't think it's too awful. So the ADS1115 just measures the positive voltage coming in as the series of the cells increases, and then the main battery negative it tied to nodeMCU and the chip's GND. I'll then have an isolated power supply to keep proper isolation.
I'm just not sure what the correct way to go about this is, or is there one? With the voltages I am measuring is it acceptable to use lower values for my voltage dividers? Like maybe 47kohm or around that for my leading resistor?
I will attach of my very ugly hand drawn schematic that I whipped up so you guys can take a look. Roasts of my handwriting and drawing skills are always welcomed!
It is your choice for the resistors. But remember a lower value drains more current from the battery. For very high input impedance such as 10 megohms, add a 1pF capacitor close to each ADC pin to support the little spike of current that the ADC uses.
There are dedicated battery monitor chips available. Some of them have isolated interfaces so you can put one chip on each cell to measure individual cell voltages and currents. Have a quick read through the TI catalog.
Thanks for the advice! I’ll take a look at the catalogue as well. I guess it’s good there’s not only one right way to do it, I’ll have to just look at what is the max parasitic draw it can have and what’s acceptable.
You will need to calculate different potential divider values if the batteries are in series?
Can you show your batteries in your diagram please and label the terminal voltages?
You also need to look at protection circuits for the inputs- if your 0v line for example broke , you’d put 70v into the Arduino killing it instantly .
I’d look at using the internal reference too for better accuracy, and limit the bottom resistor to something in the low kilo ohm range.
Whatever you do your software will need to allow the system to be calibrated on all inputs to overcome tolerances.