N5ESE 5V Uninterruptible Power Supply (UPS) (2023)

(click on above picture to see larger version)

When I acquired my ZACHTEK Desktop 80to10 WSPR Beacon Transmitter, I wanted to innestigate propagation patterns on the bands 40-10M as we entered into the peak years of this sunspot cycle. I wanted to be able to transmit at intervals on each of those bands over 24/7. The ZACHTEK and its GPS run off 5 VDC, putting out about 200mW of RF. Every 20 minutes, it would transmit a WSPR 2-minute beacon sequence on each of the selected bands. So that I don't have toworry about matching, I placed a 3dB attenuator inline to the antenna so that the transmitter would always see a match of SWR 2:1 or better. ERP would then be something on the order of 100mW or less.

I have a low fan dipole that will cover 30M and 10M set up in the far back yard, and the feedline comes into my workshed that is mainly powered by solar, but has a portable cord to bring 115V line power when I need it. The line power has a habit of tripping GFCI irregularly and unpredictably, and if I'm not working out there, I might not notice that it's tripped for a day or more. So I needed a reliable UPS that would supply 5 VDC with sufficient backup (battery) capacity for 2 to 2-1/2 days. And that would manage recharging cycles as needed, that is, automatically initiate charging when the battery capacity reaches 30% (to maximize battery life), and run on either battery or line power when not charging.

The Concept: 5V LiPo Backup System

current 20230211 / mdn Purpose: Intended as 24/7 backup system for ZackTek 80to10M WSPR TX The Zacktek generally requires 5V at 0.25A (0.15A averaged over a typical hour TX series) delivered via a USB-C cable Description: This supply contains 2 ea 1160100 3.7V 10000mAH LiPo Batteries, which form the basis for the backup system, and are capable of 2.5 days of backup operation or standalone operation of the WSPR TX in the field. Providing 7.4V nominal, they feed a linear 5V regulator which can deliver up to 0.5A (only half that is normally required) For routine at-home ops, power is supplied from an external +15V 90W desktop PSU (line powered) capable of delivering 0.25A needed for WSPR ops, and up to 1.75A continuously for concurrent charging of the batteries. Charging occurs only when a ATtiny84 MCU (running our custom firmware) allows, either when the batteries have discharged to 25% or lower, or when the user demands charging via a front panel pushbutton. The MCU has its own independent internal battery (3xAAA battery pack) and can monitor the system regardless of the main battery or line power status. The MCU monitors input voltages and battery voltage, and can diasable charging if something goes awry. The MCU also operates 4 front panel LEDs: Status(blue), Charging (Yellow), Battery Good (Green), & Battery Fault (Red). Additionally, the batteries are protected by a hardware Battery Management System (BMS) which can disable batteries if a fault is detected. Lastly, as a final failsafe, a hardware thermostatic switch monitors the chassis temperature, and disconnects batteries if the chassis temperature exceeds 55C (131F). A 4-Pole Power switch (user toggle) can disconnect everything: input voltage, batteries, MCU, and load.

Rear Panel (Input/Output)

Rear Panel, see above (L-R):

   - Main Power (Toggle Switch) removes incoming power and disconnects all batteries
   - 15 VDC Input (2.1x5.5mm jack) (for charging or normal powering, typically from 90W adapter)
   - Bicolor (Red/Grn) LED (just below):
      - Green Steady = Input V Good (within expected input range 14.5-15.5)
      - Green Flashing = Input V OK low/high, but allowable: >13.45 & < 17V)
      - Red Steady = Input V Low (below allowable minimum input voltage < 13.4V)
      - Red Flashing = Input V High (above allowable input voltage > 17V)
   - 5V Out (1.35x3.5,, jack) - 5VDC Regulated to external load
   - Debug Port (3.5mm stereo jack, Serial debug on "Ring" (not "Tip")  9600b/N81 (output only)
   - TP1: LiPo Batt 7.4V (Nom, thru 1K, rel TP3)
   - TP2: LiPo Batt 3.7V (Nom, thru 1K, rel TP3)
   - TP3: LiPo Batt 0V (thru 1 K, may or may not be ground)

Front Panel (Status & Pushbutton)

Front Panel, see above (T-B)

   - Pushbutton Switch (user actions, see Firmware Functionality)
   - BLU LED - STATUS (see Firmware Functionality)
   - YEL LED - CHARGING (when ON, indicates battery chargin in progress)
   - RED LED - FAULT (ON OR FLASHING when FAULT - see Firmware Functionality)
   - GRN LED - BATT OK (ON = GOOD > 40% Charge;  Slow Flash = <40% Charge)


(click on above picture to see larger version)

Schematic Notables:

See the schematic, above (or click on it for the hi-res version). First, notice the fairly large area
surrounded by dotted lines - that comprises the MCU & controller board, which has several
connectors and is built on perf board. Everything mounts inside a die-cast box with
interconnecting wiring to TV Terminals or front/rear panel mounted components. Pass elements (re
transistors which may dissipate heat) are mounted right to the box, so the box itself becomes a
heat sink.

So, looking at the schematic, we see that our "normal" operating power (from an external 15VDC 90W power
adapter) enters into J7, passes a fuse, then through power ON/OFF switch S1A. The power switch,
S1A/B/C/D (4 SPST sections), when in the OFF position, also disconnects the output load (S1B), both
LiPo batteries (S1C), and the MCU battery pack (S1D). When turned ON, input power (if present)
passes through D1 & D6 steering diodes and also Zener D2. Zener D2 has the sole purpose of
dropping a few volts so that the 5V linear regulator U1 doesn't have to dissipate extra power. The
Zachtek transmitter normally uses less than 1/4A. but the UPS is capable of up to 1/2 Amp, so we
have plenty of margin in case the UPS might also be powering other 5V loads.

In the event line power is missing (blackout or simply not connected), then steering diode D7 allows
battery voltage to be routed to the 5V Regulator (U1), and thus 5 VDC is never interupted.

When the +15V external supply is connected and active, battery power is not being used. But it can
be charged. LiPo batteries last longest when they are charged only "as required" (i.e., not
float-charged continuously like SLA batteries). This means that either the operator be attentive
and in control of charging (like with your smart phone), or an external "smart" microcontroller
monitors the batteries often enough to control when they get charged. We chose the latter
solution (MCU Control) because that's a "plug-it-in-and-forget-about-it" solution which better
suits my personal tendency to ignore stuff for months at a time.

To that end, the MCU Board, based on the ATTiny84 and programmed under the Arduino protocols,
monitors the battery voltage and controls when the LiPo batteries get charged. On-board MOSFET
switches (transistors) Q1 & Q2 switch +15V input voltage to the charger module U3 when battery
charge is demanded by the user or required by the MCU. The charger module is a prefab buck-
converter module (chinese) which is set to provide a precise 8.95V at 1.67A (current limited) to
the LiPo batteries. The module is sized to fully recharge the LiPo batteries in 6 hours max. The
MCU Board monitors the process, and disconnects charging when the termination voltage is reached,
even if the BMS Module U2 fails to do so. So there is a lot of redundancy built into this
system, and I feel pretty good about letting it run unattended 24/7/365. But as a final fail-safe,
a chassis-mounted Thermostat (TSW1, 55 deg C) monitors chassis temperature, and if it rises
beyond the expected temperatures, it disconnects the LiPo batteries from both load and charger.

The MCU Control board is powered from either the local 5V power or its own independednt 4.5V
battery pack (B3, using 3x AA 1.5V lithium primary batteries). This is determined by steering
diodes D13/D14/D15. The MCU battery pack is needed only in the event that (1) there is no +15V
input power and (2) a LiPo battery fault occurs. So normally, the MCU backup battery
is never used. Those batteries would need replacing every 10 years or so, just for shelf life. The
MCU will normally detect any anomalies in these batteries (faults or spent batteries) and provide
a warning light (fault) and audible alarm (beeps). The MCU can last a long time (4-8 weeks)
in this unusual condition. The most likely scenario for this is if line power is lost for more than
3 days, and the audible alarm has been unheard or ignored for 2 months or more. Thereafter,
MCU control is unknown and unpredictable until the 3 AA batteries get replaced.

The MCU Control board provides it's own on-board precision reference (2.500V) which allows it to do
voltage measurements with +/-0.5% accuracy. This is more than suitable for monitoring the LiPo
batteries and providing good charge control. The MCU monitors Input Volatge (nominally 15V) and
can ascertain whether the LiPo batteries are in standby, discharging, or charging. It also
monitors VBAT (nominal +7.4V LiPo battery), VB0 (LiPo Battery floating or not), and VCC (MCU's own

The MCU board also continuously monitors for a front panel pushbutton. That pushbutton can be
utilized by the user to initiate a charge cycle, obtain internal status information, or effect a
system reset. See the section below on formware functionality for details.

The MCU board also drives the front-panel status lights indicating current battery and/or charging
status, and - on demand - providing visual or audible morse code annumciation for internal
status. Again, see the section below on formware functionality for details.

Firmware Functionality and Operations

We created a cheat-sheet that more compactly summarizes the operational
functionality about to be described in the notes below. (We use it as a label
on the UPS cover). You can see it - here -

5V Backup PSU Controller - ATTiny84 Board built by N5ESE
Purpose: Monitor Input and Battery Power and control battery charging
on N5ESE ATTiny84 5V Backup PSU (4-LED Version)
   1. Continuously monitor VIN1, VIN2, & VCC
        See schematic for typical values; VCC will fall below 4.2V during hard BAT FAULT
   2. Monitor and update VBAT once-per-minute and compute Remaining Charge (in %)
   3. Evaluate all monitored voltages and determine actions to be taken.
   4. If appropriate levels and Vin (15V) is applied, control Charging to "Charge"
   5. If inappropriate levels anywhere in the power chain, assure charging circuits are OFF;
      Limit Charge Cycles to 10 Hours
   6. Provide status via front-panel LEDs:
      o Blue LED (status) - Input Voltage Status
         - STEADY = Allowable Range 13.5 - 16 VDC
         - OFF < 13.4 VDC (approx)
         - FAST FLASH > 16 VDC (approx)
         - Upon user demand (via PB), display detail data via LED blinking slow morse (see 7, below)
      o Green LED (Batt OK):
         - STEADY = Battery is within normal range
         - SLOW FLASH = Battery is < 40%
         - OFF = Battery is < 10% (and Red LED will Slow Flash)
      o Yellow LED (Charging) = 15V input is present, and internal charger is ON
      o Red LED (Fault) =
         - STEADY = Hard Battery Fault (charging is shut down and not allowed)
         - SLOW FLASH = Battery < 10% (charging is allowed, though it may be limited to 10 hours)
         - FAST FLASH = Battery Overcharged (charging is shut down and not allowed)
   7. If valid PB Press:
      o Short Press (< 0.5 Sec) - Toggle Charger ON-or-OFF (Ext Vin must be present and no faults)
      o Med Press (0.5 - 2.5 Sec, Nom 1.5 Sec) - On Blue Status LED, show (in slow Morse, in sequence)
         -  SW Version Number (8-digit date code); example: 'V 20230211'
            Note: SW Version Date Code is the only value stored in EEProm that is available to user
         - Prompt CS - Checksum, as calc during Init: 'CS 738' (correct value varies with version)
      o Long Press (2.5 - 6 Sec, Nom 4 Sec) - On Blue Status LED, show (in slow Morse, in sequence):
         - Vbat as Prompt VB | Vbat(mV); example: 'VB 8114'
           Note: Vbat is computed as (Vb - Vb0) from readings on the pos & neg terminals (ref GND)
           because of hardware BSM, the battery can be floating above GND; Vbat takes into account
         - %Charge as Prompt PC | % Charge Remaining; example: 'PC 83'
         - MCU Vcc as Prompt VC | Vcc(mV) ; example: 'VC 4309'
         - VB0 as Prompt V0 | Vbat0(mV) ; example: 'V0- 14' (neg sign) or 'V0 532' (pos sign)
           Note: VB0 is only reading that may or may not have sign; VB0 is the neg batt term (ref GND)
         - Vin1 as Prompt V1 | Vin1(mV) ; example: 'V1 14732' (V1 is Vin less typ 550mV diode drop)
         - Vin2 as Prompt V2 | Vin2(mV) ; example: 'V2 8955' (this is 5V Regulator's INPUT Voltage)
         Note: Accuracy of voltage readings is better than +/-0.5%
     o Extra Long Press (> 6 Sec) - Force MCU RESET (i.e., SW Reset)
       Note: a HW Reset can be effected by turning Power Toggle Switch OFF for about 20 Sec (then ON)
   8. Upon Initialization (during SETUP()), detect if Serial connected re "HIGH", & enable debug out
      at 9600b/N81
      Alternatively, if Serial NOT connected re "LOW", enable Alarm Tone output (built-in piezo spkr)
      Note: Serial Debug shows initialization Info, including SW Vers, Author, Checksum, EEProm Hex
      Dump, Vbat & Vcc, and at periodic intervals, provides Vbat, % Charge remaining, Vin1, Vin2, and
      MCU Vcc, as well as alerts to events and critical conditions, like low or high Battery Voltage
      or Battery Fault conditions
   9. If Audio/Alarm Tone is enabled (& Debug is NOT), provide Tone Warnings for low batt or faults:
      - 2 dits at completion of SETUP() [normal]
      - 2 dits at Start of Charging Cycle [normal]
      - 1 dit at Completion of Charging Cycle [normal]
      - ALARMS (Once-per-Minute):
      - 3 dits = less than 25% Battery Charge (and NOT charging) [this is a warning]
      - 4 dits = less than 10% Battery Charge (and NOT charging) [this is a warning]
      - 5 dits = Input Vin Overvoltage (> 16V) [FAULT: user should turn unit OFF and fix issue]
      - 6 dits = Batt Overcharge (25 mV over terminating V) [FAULT: user should turn unit OFF & fix]
      - 8 dits = Batt Hard Fault (No +5V; MCU's 4.5V Backup Bat; BMS Hdwr) [FAULT: user turn unit OFF]
   10. Audio Tone Output: Fixed 1750 Hz Audio Morse using the Serial TXPin. When user-invoked (via
       PB, if not in Debug mode)
       Note: Morse Tones are sent in sync with Visual LED reports (default SLOW Morse)
       as described above (i.e., requiring PB request). Uses a built-in piezo speaker...
   11. Serial Port INPUT: NOT IMPLEMENTED (this pin defined for SW Serial RX but used for LED instead)
   12. Implement ETM (Elapsed Time Metering), updating value (units = minutes) in EEPROM every 30 min
       Note: Not readily user-available. Can be converted manually from HEX data dump at init (if in
       Serial Debug mode); Stored atarting at Addr EE_ADR_ETM_MIN 40 stored as Long Int (4 bytes),
       w/ least signif byte first; example:
       Long (unsigned) 0x789AB (dec 493995 minutes) is stored (starting at defined address) as
       0xAB 0x89 0x07 0x00
   13. Using minute-based timing, implement the following Charge Cycle minimum/maximums:
       - MAXIMUM: if a charge cycle lasts longer than 10 hours (600 minutes), shut it off
         (you can still restart manually)
       - MINIMUM: if no charge has taken place in the last 45 days (65536 minutes), initiate one
         regardless of Battery voltage
   14. Implement ALT-RESET, which will reset minimum stored values of Vbat and Vcc, and their
       respective ETMs (in EEPROM); These values, as stored, can aid troubleshooting by showing
       historical minimums of Vbat & Vcc (and when they occurred)
       ALT-RESET is invoked by holding the PB pressed for about 2 seconds during SW Reset or POR
       (Power-On-Reset); Note: Data Not readily user-available. Can be converted manually f/ HEX
       data dump at initialization (if in Ser Debug)
       Start Addr: EE_ADR_VBAT_MIN_mV 48 (unsigned INT) 2-byte - Historical Min Oper Voltage LiPo (mV)
       Start Addr: EE_ADR_VBAT_MIN_ETM 52 (unsigned LONG) 4-bytes - Elapsed Time when above occurred
       Start Addr: EE_ADR_VCC_MIN_mV 56 (unsigned INT) 2-bytes - Historical Min Oper V MCU Backup (mV)
       Start Addr: EE_ADR_VCC_MIN_ETM 60 (unsigned LONG) 4-bytes - Elapsed Time when above occurred
       Stored as 2 or 4 bytes (unsigned INT or LONG) starting at address indicated, with least s
       significant byte first


The MCU Control was constructed on perf board as a "one-up". Layout was depicted on the schematic,
along with connector identification. Here's a view of that (top and bottom):

5v_ups_MCU_Proto_top_20230124.JPG     5v_ups_MCU_Proto_bot_20230124.JPG
(click on above picture to see larger version)

Above, you'll see a 2-pin jumper near the top of the board. When programming the MCU via ISP port,
that jumper must be removed.

The system is packaged into a 4.7" X 6.7" x 2" die-cast aluminum box (Bud p/n CN-6709). And, yes,
it's pretty packed. In addition to box-mounted components like switches, connectors, test points, and
indicators, it also has a subchassis which holds the two LiPo 3.7V 10AH batteries and mounts 3
electronic boards. There's also some chassis mounted regulator wiring which is terminated to two
TV-type terminal strips (TB1 & TB2).

The subchassis, pictured below (top & bottom views) without batteries or electronic modules mounted,
consists of a heavy unclad FR4 fiberglass board with nylon and metallic standoffs strategically
mounted so as to safely capture the two LiPo batteries on one side, and mount necessary electronic
modules on the other. It can be easily removed when needed to replace a failed battery.

5v_ups_subchassis_top_20230102.JPG     5v_ups_subchassis_bot_20230102.JPG
(click on above picture to see larger version)

The two LiPo batteries are stacked on the bottom side of the subchassis (the side with the nylon
standoffs) and are thus firmly and safely captured in place in the assembly. To keep them from
rattling around, and to allow some air circulation around them, some pads were cut by hand out of
silicone-based foam. These are about the size of the battery, and lay flat between and on either
side of the two batteries, acting as spacers and cushions. 3 are needed and they can be seen below:

(click on above picture to see larger version)

Below, is a picture of the chassis wiring before installation of the subchassis. Here, you can see
the rear-panel components (switch, connectors, etc) on the left, and the two TV-terminal Strips
(TB1, right & TB2, left, and numbered from right) along the bottom (along with their associated
components). Note that Q1 (the charge switch transistor) and U1 (the 3-Terminal 5V Regulator),
both TO-220 devices, have not yet been installed in the picture below.

(click on above picture to see larger version)

Finally, below is a picture of the completed chassis wiring. The battery subchassis assembly with
its 3 electronic modules mounted occupy the large space in the middle-to-upper right of the box
as shown. The electronic modules, in order from left-to-right, are the 2S 20A BMS Module (U2), the Buck
Converter-Charger (U3), and our MCU Control module. the Two LiPo batteries are safely captured
and secured by that subassembly, unseen and underneath the 3 electronic modules. The black
rectangular thing just south of the subassembly is the enclosure for the 4.5V (3X AA) MCU backup
battery pack. Pushbutton and LEDs (re front panel) are on the lower
right in this picture.

(click on above picture to see larger version)


This 5V UPS served well during the months I conducted the WSPR propagation experiments, and in fact
provided continuous power through a couple of GFCI events.

I think it would be well suited to GPS service where GPS references are to be maintained over 24/7.
And there are probably other +5V USB-powered apps where it might be particularly well-suited.
(It seems like more and more circuits are gravitating toward USB-power).

Monty N5ESE

dit dididit dit

Return to N5ESE home page
Overseer: Monty Northrup ... n5ese@n5ese.com ... leave e-mail ...