EDIT: a lot of this post has been made obsolete; check out the schematic overview instead.
For the variable load, I’ve decided that a power adaptor will provide 12 V to the system. This 12 V will be used directly for a fan that will cool a heatsink, and it will also be regulated down to 5 V for the various ICs in the system. I’ve also decided to use SPI interface for the ADC and DACs, since I2C is limited in maximum bandwidth. Bandwidth will be important if I want to increase ADC and DAC sampling rate, which may be necessary during constant voltage operation mode, where the microcontroller will have to rapidly sample the ADC and adjust the DAC accordingly.
With these two design decisions made, I was able to pick out the chips I wanted:
- ADC: ADC124S051CIMM/NOPB
- 500 ksps (kilo samples per second)
- SPI
- 12 bit resolution
- Operates on 3V3 and 5V
- Uses power rail as reference
- DAC: MCP48FVB21-E/UN
- High sample rate; supports SPI clk up to 20 MHz
- SPI
- 12 bit resolution
- Operates on 3V3 and 5V
- Can use power rail as reference, external reference or band gap as reference (internal)
- Current sensor: ACS711KEXLT-31AB-T
- ±31 A limit
- 45 mV / A, outputs mid-rail at no current
- Operates on 3V3 and 5V
- OpAmp: MCP6L02T-E/MS
- Rail to rail, input and output
- Operates on 1V8 to 6V
- 1 MHz bandwidth
- Input offset 5 mV
- Thermistor: MF52A1104J3950
- 100 kΩ @ 25 °C
- B25/50 = 3950 K
- -55°C ~ 125°C
- Power Transistor: IXTN600N04T2
- Limits: 40V, 600 A, 940 W
- VGS_threshold < 3.5 V
- Fan: QFR1212GHEEVT
- 12 V, 2.7 A
- 190 CFM
- 120 mm x 120 mm
- Speed can be controlled by PWM
- Heatsink: salvage
- 12.3 cm x 4.4 cm x 15.24 cm
- Using AH12310V06000GE as reference, suspect thermal resistance is 1 °C/W
- System Power Supply: L6R48-120400
- 12 V, 4 A
- Barrel connector, 5.5 x 2.1 mm, positive center
- Encoder: EN11-HSM1BF20
- 20 dents per rotation
- Quadrature output
- Will use knob 1230-J
The transistor is really expensive; it’s over $20! On top of that, the heatsink would be expensive if I had to buy it, but fortunately I got one that was being thrown out. If I’m okay with a temperature rise of 50°C, then the heatsink should be able to dissipate around 50°C / (1 °C / W) = 50 W. I’m planning on adding a fan to the heatsink, though, which will decrease its thermal resistance. However, I can’t quantify how much the fan will help, so I’ll have to do some testing once I have the system set up.
To make sure the transistor does not overheat, I have designed a thermistor circuit. The output of the opamp increases as the transistor gets hotter (the thermistor will be thermally coupled to the transistor). This voltage will be fed into the ADC, which the microcontroller will then read. For now, I’m thinking of just having the fan off or on, depending on how hot the transistor is, but I can also scale the fan speed based on the temperature of the transistor.



As you can see, the opamp output covers nearly the full range between 0°C and 85°C. This will give good resolution for temperature. One drawback is that the thermistor only specifies a B value between 25°C and 50°C, so for now I’m assuming that value does not change very much, but I’ll have to revisit that by driving the thermistor to a known temperature; I’m thinking of using my reflow oven for that, since I can manually drive the oven to a set temperature.