# 1. Overview
The Power Analyzer is a programmable electronic constant current dummy load with two high side voltage and current sensors for an automatic analysis of power supplys, DC/DC converters, voltage regulators, batteries, chargers, power consumers and others. The device can be controlled via USB serial interface using a serial monitor or the provided Python skripts. Data can be exported to spread sheet programs or directly be analyzed by the Python skript.
![641051608.jpg]

# 2. Working Principle
The ATtiny814 controls the electronic dummy load with its internal digital to analog converter (DAC). All of its 5 internal reference voltages are being used in order to get the maximum accuracy and resolution of the DAC. The DAC is connected to an OpAmp which acts as a unity gain amplifier controlling the resistance of the MOSFET. Voltage and current are measured via a high side 8 mOhm shunt resistor connected to an INA219 with a resolution of 4mV/1mA. A second INA219 is connected to another 8 mOhm shunt resistor between the PWR-IN and PWR-OUT terminal. The Power Analyzer is connected via USB to a PC or a RaspberryPi. Commands to the Analyzer can be sent via a serial monitor or by the GUI-based Python skript. The Analyzer has different built-in automatic test algorithms. The collected data is sent back via the serial interface/USB to the PC/RaspberryPi. The ATtiny814 constantly measures power and temperature of the heatsink. It controls the fan and cuts off the load when the temperature gets too hot.

# 3. Test Algorithms
* Using a serial monitor: Test algorithms can be started by sending the corresponding command via a serial monitor. The collected data will be displayed in the serial monitor and can be exported to a spread sheet program for further analysis.
* Using the GUI-based python application: This is the easy way. Everything should be self-explanatory. All following example pictures are created by this application.
# **Load Test**

* Command: "l *maxloadcurrent[mA: 17..5000]* *minloadvoltage[mV: 0..26000]*"
* Example: "l 2500 4200"
* The Power Analyzer continuously increases the load from 17 mA up to *maxloadcurrent*. It stops automatically if the voltage drops below *minloadvoltage*. It continuously transmits the measured values via the serial interface in the format: current[mA] voltage[mV] power[mW] (seperated by the SEPERATOR string).

# **Voltage Regulation Test**

* Command: "g *maxloadcurrent[mA: 17..5000]*"
* Example: "g 3000"
* The Power Analyzer changes rapidly the load between 17 mA and *maxloadcurrent*. It continuously transmits the measured values via the serial interface in the format: time[ms] current[mA] voltage[mV] (seperated by the SEPERATOR string).

# **Efficiency Test**

* Command: "e *maxloadcurrent[mA: 17..5000]* *minloadvoltage[mV: 0..26000]*"
* Example: "e 4000 2500"
* The Power Analyzer continuously increases the load from 17 mA up to *maxloadcurrent*. It stops automatically if the voltage at TEST-IN drops below *minloadvoltage*. It continuously transmits the measured values via the serial interface in the format: current[mA] voltage[mV] efficiency[% * 10] (seperated by the SEPERATOR string).

# **Battery Discharge Test**

* Command: "b *maxloadcurrent[mA: 17..5000]* *minloadvoltage[mV: 0..26000]*"
* Example: "l 1000 2700"
* The Power Analyzer sets a constant current load of *maxloadcurrent*. If the voltage drops below *minloadvoltage* it constantly decreases the load to maintain *minloadvoltage*. It stops automatically if the load current drops to 0mA. It continuously transmits the measured values via the serial interface in the format: time[s] current[mA] voltage[mV] capacity[mAh] (seperated by the SEPERATOR string).

# **Long-Term Multimeter**

* Command: "m *interval[ms: 2..65535]* *duration[s: 1..65535]*"
* Example: "m 18000 18000"
* The Power Analyzer measures voltage, current and power delivered to the test device at every *interval* for a total of *duration*. It continuously transmits the measured values via the serial interface in the format: time[ms] current[mA] voltage[mV] (seperated by the SEPERATOR string).

# **Commands for Direct Control**
| Command | Function |
| ------- | -------- |
| "i" | transmits indentification string ("Power Analyzer") |
| "v" | transmits firmware version number |
| "x" | terminate current test program |
| "s *loadcurrent[mA]*" | set load to a constant current of *loadcurrent* |
| "r" | reset the load to minimum |
| "t" | read current and voltage of both sensors and transmit them |
# 4. Notes
* Use a good heatsink with a 5V fan for the MOSFET! Attach a 10K 3950B NTC thermistor to the heatsink close to the MOSFET!
* Be careful with high power loads! Make some tests to figure out what can be achieved with your cooling solution!
* Due to the limitations of the cheap OpAmp the minimum load current is around 17mA. You can choose a better OpAmp if you like (must have same pinout, must be rail-to-rail and unity gain stable), but for most cases this is not necessary.
* The maximum load current is 5A, however for small voltages it might be less.
* The maximum PWR-IN/PWR-OUT current is 8A.
* Do not exceed the maximum voltage of 26V on all connectors !
* In order to make the design much simpler all connectors including USB share a common ground. Keep this in mind when making your test setup in order to avoid ground loops or shorts. Using a USB isolator between the Analyzer and your PC is not a bad idea!
* Windows users may need to install a driver: [http://www.wch.cn/download/CH341SER_ZIP.html](http://www.wch.cn/download/CH341SER_ZIP.html). This is not necessary for linux users.
* You need a UPDI programmer for uploading the firmware.