Adjusting the voltage on an APC SMT1500RMI2U to improve battery life

I bought my UPS second hand, but almost-new about two years ago. It's been working without a problem for some time, but lately it had been acting up. I've had a strange problem where every two weeks, th UPS would just shut itself down. I traced the problem down to the self-test, which was scheduled bi-weekly. Because of bad batteries, the self-test would fail outright, but because the short test was killing the UPS instantly, a 'poor battery condition'-warning never showed up in the device log. Measuring the battery terminals, the float voltage after charging on the dead battery was about 25,7v. This was set a bit too high; at 25,7v the 4 batteries died a bit too early to my taste. I don't exactly feel like replacing the batteries every two years, so I decided to see if it was possible to lower the float voltage. Turns out, this wasn't too difficult. A felllow hacker (vk2fro) on found that these UPSses use the same old serial interface that APC had been using for quite some time now, but it was being used by the LCD and control subsystem. There is still a header on the board, that can be used to talk to the UPS and adjust the voltage. The signal levels are TTL.

This guide is not a replacement for the excellent guide on, but serves as a guide to see how the same kind of modification can be done on the SMT1500RMI2U rackmount unit.

Start by taking off the top panel. It is held in place with about 9 screws. Removing the top panel will

The signals from the controller are probably driven though a resistor, which allows you to hook up a USB to serial adapter. This blocks out the controller, and the UPS now listens to the USB serial interface (when connected). USB to TTL interfaces are about $1 on eBay, so I decided to attach an adapter permanently on the front of the unit.

The pinout on this thing is up for debate, I'm pretty sure only pin 6 is marked, which would make the one on the left on the front pin number 1. The pinout as described on the post on overclockers works, but the pin numberings are confusing. My beautiful mspaint drawing is my take on the pinout. You can leave the pins connected to the USB adapter. As long as it is not powered, it shouldn't interfere with the regular communication. Boot the UPS before connecting the USB to serial to your PC. The UPS needs instructions from the controller board during powerup, or it won't work properly. In my situation, the communications ground on pin 4 was connected to the chassis ground. While vk2fro mentions you could get a ground loop, I don't see this happening anytime soon. At least not with power connected. I didn't use opto-isolators or a laptop, but used the desktop PC in my lab, and managed to not get my house burned down (yet). Your milage may vary, I assume no responsibility whatsoever.

Adjusting the voltage is now fairly easy. I didn't hook up a capacitor, but just left the battery terminals floating. The UPS wasn't too happy about this, and kept warning me the battery wasn't properly connected. This doesn't matter though, the charger is still bringing the battery terminals up the floating voltage. Time to adjust the voltage!

Start a terminal session at 2400 baud. I use PuTTY, but whatever.

- Press 'Y'. The UPS should answer 'SM'. If it doesn't, you probably didn't follow my carefully prepared instructions :)

- Press '1', and after a second or so, press '1' again. The UPS will enter programming mode, indicated by a 'PROG' response.

- Now press 'B'. The UPS will display the internal battery reading. It's probably way off. Enter '+' or '-' to adjust the float voltage. The UPS wil respond with a hexdecimal calibration value.

Check your voltmeter, and adjust until you're happy with your voltage. I dropped mine down to about 27 volts.

- Enter 'R' to return to normal mode. The UPS should now regulate its float-voltage to your calibrated value, also with batteries attached. Mine was reading about 30 mV higher after attaching and charging the batteries, but that was still fine.

Your communications log should look a little like this, after calibration:

Many thanks to vk2fro and for providing the guide