RE: algorithm for charge termination?
There are many variables, even on the same battery you can get different results at different times because of charge rate, how fast it was discharged the last time it was used, temperature etc. The reason for the measured voltage change is mostly because of the change of internal resistance as the battery reaches full charge and the oxygen starts recombining at the positive terminal. This is accompanied by an increase in internal temperature which changes the internal resistance even more. The size of the crystals formed inside the battery also effect it and they change with how the battery was used, how deep it was discharged and just pure age. I do not think it is possable to write an algorithm or program which will accomodate all these factors.