What is Freeside?

Freeside is a Georgia nonprofit corporation, organized to develop a community of coders, makers, artists, and researchers in order to promote collaboration and community outreach. Learn more »

Constant Current Dummy Load - Complete

The project is finished. The units have been built and sent off for use. Much was learned. Here are some insights.
First, don't design a PCB for the lowest cost. That just increases your costs later. I made the the board narrower than was convenient to save $20 and I ended up wanting to put the entire thing a case so I could mount the banana adapters off the PCB where they could be farther apart. Not necessary but preferred for me.
Second, putting artwork in copper on your PCB not only works but looks great when you are finished. Take a look at the second photo below. That Freeside logo looks awesome!
Third, assembly of through hole components is NOT easier than surface mount parts. It was a bit of a pain to build them all. TH components don't stay in place when you flip it over to solder. 
Final PCB I used.
Artwork in copper.

Queued up for soldering.
Delivered and installed.

My lab's version with voltmeter and case.

It includes a cooling fan.

Eagle Files
Code uploaded to the ATTINY85. It includes the RotaryEncoder lib I posted earlier.
#include <RotaryEncoder.h>;
int del=0; 
word outputValue = 0;
byte data = 0;
int val = 0;

int csPin = 0;
int sckPin = 1;
int siPin = 2;
int ENC_A = 3;
int ENC_B = 4;
RotaryEncoder encoder(ENC_A,ENC_B,5,6,1000);
void setup()
  pinMode(csPin, OUTPUT);
  pinMode(sckPin, OUTPUT);
  pinMode(siPin, OUTPUT);
void loop()
  int enc = encoder.readEncoder();
  if(enc != 0) {
    val = val + (enc);   
    val = min(val,4095);
    val = max(val,0);
void setDAC(int value) {
    outputValue = value;
    digitalWrite(csPin, LOW);
    data = highByte(outputValue);
    data = 0b00001111 & data;
    data = 0b00110000 | data;
    shiftOut(siPin, sckPin, MSBFIRST, data);
    data = lowByte(outputValue);
    shiftOut(siPin, sckPin, MSBFIRST, data); 
    digitalWrite(csPin, HIGH);
void sinewave()
  for (int a=0; a<=4095; a++)
  for (int a=4095; a>=0; --a)


Unknown said...

did you have pcb ok kit?

Girinata Wirawan said...

can your dummy load design use for supply 80V 10A??

I try to make my dummy load using IRF540 with 0.1Ohm 40Watt ,, but IRF getting HOT and also LM324 N getting burn..

Dr. Patrick Marcus said...

if the LM324 is getting hot the whole circuit is likely oscillating. It is very hard to get an opamp/mosfet running in linear mode to be stable.

Post a Comment