- Corrected SMT footprints
- Cost reduced power supply, USB designs.
- Removal of SERVICE port (functions could be accessed via ICSP port)
- Improved voltage sampling buffering ckt - removal of offset errors in op-amps
One area I struggled with a little was the voltage sensing design - based around using the Arduino's built in A/D. In short - how much $ vs. desired accuracy? One might noticed I backed off from the 0.1% resistors in the voltage divider, and now just use 1% devices. This saved about $1 in BOM cost. And here was my thinking: The ATmega32M1 is able to selected one of two sources for its A/D converter reference: External (Vaa, or +5 in this design), or an internal 2.56 source. And there is the basic issue. The internal source is known to be rather stable over time and temperature, but not all that accurate (2.5-5% or so). Using Vaa tied to +5, even with the filtering, can present a significant error its self (And is dependent on the accuracy fo the +5 supply to boot).
All told, using high precision components in the op-amp ckt seemed kind of like putting silk on a pig's ear. Additional cost could have been added by adding an external voltage reference (i.e. LM4040) - but I think even then we would not know the BATTERIES voltage, only what we see at the output of the MPPT controller.
So, I have backed off - and accept a few % error in absolute accuracy for voltage readings, but still look for stability. As far as the MPPT logic is concerned, it is trying to maximize a value - and it really does not care too much how accurate that value is, just that it is repeatable.
For accurate battery voltage information, to say decide charging states and accommodate voltage drops over the battery cables, will look to the CAN BMS device attached via a simple CAT-5 cable.