A method for charging a battery, the method comprising: selecting a pulse period; (i) providing a charging pulse to the battery, including: providing a charging current from a power source to the battery at a beginning of an ON period of the charging pulse; determining a current flow through the battery; detecting a change in current flow through the battery; and determining a duration of the ON period of the charging pulse based on when the change in current flow through the battery was detected relative to application of the charging current to the battery; and interrupting the charging current from the power source to the battery at an end of the ON period of the charging pulse; (ii) determining a duration of an OFF period of the charging pulse, including computing a difference between the selected pulse period and the ON period of the charging pulse; (iii) delaying for a duration of the OFF period of the charging pulse; (iv) selecting another pulse period; and repeating (i), (ii), (iii), and (iv) using the pulse period selected in (iv). selecting a pulse period; (i) providing a charging pulse to the battery, including: providing a charging current from a power source to the battery at a beginning of an ON period of the charging pulse; determining a current flow through the battery; detecting a change in current flow through the battery; and determining a duration of the ON period of the charging pulse based on when the change in current flow through the battery was detected relative to application of the charging current to the battery; and interrupting the charging current from the power source to the battery at an end of the ON period of the charging pulse; (ii) determining a duration of an OFF period of the charging pulse, including computing a difference between the selected pulse period and the ON period of the charging pulse; (iii) delaying for a duration of the OFF period of the charging pulse; (iv) selecting another pulse period; and (i) providing a charging pulse to the battery, including: providing a charging current from a power source to the battery at a beginning of an ON period of the charging pulse; determining a current flow through the battery; detecting a change in current flow through the battery; and determining a duration of the ON period of the charging pulse based on when the change in current flow through the battery was detected relative to application of the charging current to the battery; and interrupting the charging current from the power source to the battery at an end of the ON period of the charging pulse; providing a charging current from a power source to the battery at a beginning of an ON period of the charging pulse; determining a current flow through the battery; detecting a change in current flow through the battery; and determining a duration of the ON period of the charging pulse based on when the change in current flow through the battery was detected relative to application of the charging current to the battery; and interrupting the charging current from the power source to the battery at an end of the ON period of the charging pulse; (ii) determining a duration of an OFF period of the charging pulse, including computing a difference between the selected pulse period and the ON period of the charging pulse; (iii) delaying for a duration of the OFF period of the charging pulse; (iv) selecting another pulse period; and repeating (i), (ii), (iii), and (iv) using the pulse period selected in (iv).