element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
    About the element14 Community
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      •  Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Test & Tools
  • Technologies
  • More
Test & Tools
Documents Programmable Electronic Load
  • Blog
  • Forum
  • Documents
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Test & Tools to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Engagement
  • Author Author: Jan Cumps
  • Date Created: 23 Dec 2016 1:09 PM Date Created
  • Last Updated Last Updated: 11 Oct 2020 8:05 AM
  • Views 19933 views
  • Likes 20 likes
  • Comments 401 comments
Related
Recommended

Programmable Electronic Load

Peter, Jon and Jan are building a programmable electronic load. This document is the common design sheet.

It's obviously work in progress. And fun.

 

image

 

 

We're building a programmable DC load. The focus is on making a real world working instrument.

Hardware and firmware are open source.

  • 20 V, 6 A
  • SCPI controlled

 

To keep this document readable, this main post gives an overview of the design.

All detailed explanations are broken out in separate posts.

 

Hardware

The load design is modular.

 

image

 

Two out of box modules:

  • MSP432 LaunchPad
  • LCD Shield (optional)

3 new designs

  • DAC-ADC module
  • Analog control module
  • Power module

 

DAC-ADC BoosterPack

image

This module is a generic, isolated DAC / ADC boosterpack. It's the interface between the analog controller and the microcontroller.

It can also be used outside this project, for your other analog - digital conversion needs.

The board design is broken out in a separate post: Programmable Electronic Load - DAC / ADC BoosterPack.

 

Analog Controller and Driver Board

This is the core of the analog constant current block. Here lives the circuit that will translate desired constant current into the driver signal for the power MOSFET.

It integrates the feedback coming from that power board. This is a closed analog control loop.

There are also components to provide the on-off functionality and buffers/amplifiers for the analog data-points that fly back to the ADC module.

image

The board, schematics and BOM are documented in Programmable Electronic Load - Analog Controller and Driver Board.

 

Power Module - the MOSFET Board with Fan

 

image

 

For details  of the design of the power stage, check Programmable Electronic Load - Power Stage.

 

BoosterPack Header Use and Pin Allocation

This info is broken out in a separate post: Programmable Electronic Load - BoosterPack Header Use.

 

Firmware

 

Prerequisites:

  • CCS 8 with MSP432 compiler TI v 16.12.0.STS or >
  • TI-RTOS for MSP43X, any SimpleLink version
  • MSP432 LaunchPad (not the black pre-prod because it's out of support)

 

The firmware is for the MSP432 microcontroller. But the harware can be driven from any controller, processor, PSoC or computer that can deliver i2c and power between 3V3 and 5V.

That includes Arduino, Raspberry Pi, BeagleBone, Warp7, IOT20xx, the ST Neo family, ... As long as they match that voltage range and have I2C master, it 'll work.

The ADC/DAC board takes care that the logic side is galvanicaly isolated from the power side (that is, if you leave the P1 and P2 jumpers open).

 

The only requirement is that you have a positive supply between 3V3 and 5V, a ground, and I2C signals (the board has I2C pull-ups that connect to the positive supply that you provide. If you don't want that (maybe your dev board already has 'm), leave R1 and R2 off.

ADC, DAC and Enable are all I2C driven.

 

GITHUB location: https://github.com/jancumps/msp432/tree/master/MSP432_SCPI_ElectronicLoad

download latest source files as a zip : https://github.com/jancumps/msp432/archive/master.zip

doxygen generated API documentation: https://jancumps.github.io/msp432

GIT artifacts don't contain CCS project files, only sources - get a zip with CCS project from the attachments at the end of this document.

image

 

SCPI interface and Error Handling

The SCPI commands are documented in this breakout post: SCPI interface.

 

UART Configuration

Together with SCPI, UART is the programming interface of this instrument.

The approach, and how to compile for USB or TTL, is documented in this breakout: UART.

 

RTOS and Posix Configuration

The TI-RTOS documentation is in breakout post RTOS Config.

 

LCD Display

Check here for a detailed explanation: LCD Display

The firmware supports SHARP LCD display,

 

 

 

image

image

 

ADC

 

I've broken out the ADC description to a separate post, because I'm working on improvements:

Programmable Electronic Load - ADC Firmware

 

 

DAC

 

DAC output is set on command, using RTOS MailBox and messaging.

The payload for a DAC message contains the DAC channel that needs to be set, and the value.

 

typedef struct MsgDAC {
    uint8_t module;
    uint16_t value;
} MsgDAC;

 

The DAC task is started by RTOS. It inialises the DAC settings, then waits until it receives a message.

 

void *threadDAC(void *arg0) {


    MsgDAC d_msg;
    d_daci2cTransaction.writeBuf = d_dactxBuffer;
    d_daci2cTransaction.readBuf = d_dacrxBuffer;
    d_daci2cTransaction.slaveAddress = DAC_I2C_ADDR;
    d_daci2cTransaction.writeCount = 3;
    d_daci2cTransaction.readCount = 0;


    mqd_t mq;
    struct mq_attr attr;


    attr.mq_flags = 0;
    attr.mq_maxmsg = 1;
    attr.mq_msgsize = MSGDAC_SIZE;
    attr.mq_curmsgs = 0;
    mq = mq_open(QUEUE_NAME_DAC, O_CREAT | O_RDONLY, 0644, &attr);


    while (1) {
        ssize_t bytes_read;
        bytes_read = mq_receive(mq, (char *)&d_msg, MSGDAC_SIZE, NULL);


        /* wait for mailbox to be posted by writer() */
        if (bytes_read) {
// ...

 

The waiting doesn't take processor time. RTOS takes care that it will only get a slice of clock cycles when there is a message.

Two things in the RTOS configuration make this happen:

The mailbox with room for exactly one message, and a receive event.


Because there is usually no message in the mailbox, the execution of the DAC logic becomes inactive at this line:

 

        bytes_read = mq_receive(mq, (char *)&d_msg, MSGDAC_SIZE, NULL);

 

When we send a DAC message somewhere else in the code (e.g.: when the user requests a new setting of the electronic load), RTOS reactivates the process and hands over the payload message.

The DAC task sets the output of the requested channel and returns to the point where it waits for a new message.

 

   while (1) {
        ssize_t bytes_read;
        bytes_read = mq_receive(mq, (char *)&d_msg, MSGDAC_SIZE, NULL);


        /* wait for mailbox to be posted by writer() */
        if (bytes_read) {
            d_dactxBuffer[0] = getAddressFromModule(d_msg.module); // set value direct
            d_dactxBuffer[1] = d_msg.value >> 8; // MSB
            d_dactxBuffer[2] = d_msg.value; // LSB
            if (! I2C_transfer(i2c_implGetHandle(), &d_daci2cTransaction)) {
//                System_printf("I2C Bus fault\n");
//                System_flush();
            }
        }
    }

 

You select the DAC channel by setting bit 2 and 1 in the control byte (tx_buffer[0]). There's a helper function that gives a correct control record.

 

// address 7 - 6: 0, load mode 5 - 4: 01 direct from i2c, 3: reserved 0, 2 - 1: channel select, 0: pwr down 0
#define DAC857X_CFG_H0 0b00010000
#define DAC857X_CFG_H1 0b00010010
#define DAC857X_CFG_H2 0b00010100
#define DAC857X_CFG_H3 0b00010110

 

 

static const uint8_t array_DAC857X_CFG_H[4] = {DAC857X_CFG_H0, DAC857X_CFG_H1, DAC857X_CFG_H2, DAC857X_CFG_H3};

/**
 * get the hex address for the requested DAC module
 */
uint8_t getAddressFromModule(uint8_t module) {
    return array_DAC857X_CFG_H[module];
}

 

Bits 7 - 3 and 0 are all fixed.

 

image

image

 

Input Enable

 

The functionality to activate and deactivate the load is documented here: Programmable Electronic Load - Input Enable Functionality .

 

Control Strategies

 

The firmware uses strategies to handle the different types of load operation (e.g. constant current, constant, voltage, ...).

 

A strategy is a set of functions that you can plug in, and that together run that particular operation type (this is a c version of the Gang of Four's Strategy Design Pattern).

The goal is to avoid that the firmware is riddled with if or switch statements whenever different behaviour is needed depending on the instrument's mode.

Each operation strategy will have the same set of functions that run the instrument in that mode.

The price to pay is not expensive - speed and memory burden is low. It is a little more complex to understand than the c++ version. Once you step trough it with a debugger, things become clear.

The code also tries to hide that we're using strategies

 

Currently starting to implement constant current strategy. The more difficult operation types can be added later, one by one, with not too much impact on the existing code across the firmware.

. Only the eload API (see below) knows about it. All code goes via that eload API.

API for the stategies is minimal now:

 

    controlFunction;
    getMode;
    getChar;

 

  

eload API

 

The eload API offers an abstraction layer for the strategies, so that the rest of the firmware doesn't have to know about it. It simplifies switching operation mode and driving the instrument.

 

Example: The eload API offers a simple function eloadGetMode() to check what the instrument's current mode is.

 

eload_mode eloadGetMode() {

    return getControlStrategy()->getMode();

}

 

In the background, it uses the strategy mechanism to fetch the mode from the currently active strategy and call the implementation function.

 

return getControlStrategy()->getMode();

 

The eload API also has the common eload functions that don't need a strategy because they are always valid, regardless of mode.

 

Calibration and Configuration Data

 

The functionality to store calibration and configuration data in Flash is described in a separate article: Programmable Electronic Load - Calibration Data in Flash.

The calibration and configuration procedures are documented in Programmable Electronic Load - Calibration Steps

 

Changes To Standard MSP_EXP432P401R.c

 

The standard file generated by the TI-RTOS application wizard has defaults for peripherals.

The following has changed: none - I removed this section because with the external ADC/DAC board and the SimpleLink RTOS version, everything is kept standard.

 

Remote Software

 

Teminal

 

Serial communication to the USB UART port.

9600/8/1/None

image

SCPI is a non-echoing protocol. To make the characters you type show in the Terminal, set Local echo to Force on.

If you also set Local line editing to Force on, you have the opportunity to correct characters in the current line before they are sent to the serial port.

image

 

Test:

*IDN?;SYST:ERR:COUN?

Should return

THEBREADBOARD,ELECTRONICLOAD,0,01.00;0

 

Windows GUI

 

There are two image. A .NET made by Peter, a Java version made by Jan.

 

The .net GUI supports reading the 4 ADCs, setting one of the DACs abd shoot any SCPI command.

There's a window for SCPI output and a status window that shows SCPI errors.

image

Source and binary available from https://github.com/thebreadboard/SCPI_DC_LOAD_WIN

 

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

 

 

The Java GUI is made as a POC that cross-platform instrument GUIs are possible.

It allows for switching the load on and off, set constant current and replicate the LCD values.

Additionally, you can requesst error status and run arbitrary SCPI commands.

Programmable Electronic Load - Java GUI Part 1: Basic Functionality

 

image

 

 

LabVIEW

 

The instrument comes with a LabVIEW library: Programmable Electronic Load - Write a LabVIEW Library part 1: Initialise Block

image

 

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

 

 

 

Related blog

Programmable Electronic Load - Input Enable Functionality
Programmable Electronic Load - Power Stage
Programmable Electronic Load - Temperature Protection
Programmable Electronic Load - DAC / ADC BoosterPack
Programmable Electronic Load - Analog Controller and Driver Board
Programmable Electronic Load - SCPI interface and Error Handling
Programmable Electronic Load - UART
Programmable Electronic Load - RTOS Config
Programmable Electronic Load - Calibration Data in Flash
Programmable Electronic Load - Calibration Steps
Programmable Electronic Load - LCD Display
Programmable Electronic Load - ADC Firmware
Programmable Electronic Load - Current Sense Circuit
Programmable Electronic Load - BoosterPack Header Use
Programmable Electronic Load - ToDo and Done
Robert Peter Oakes articles:
Electronic DC Load - Design and Build to test PSU Project
youtube: Electronic DC Load Design and Testing
youtube: Full Build Analogue DC Load
youtube: Electronic DC Load - Performance Improvements
Raspberry PI 2, Fun with I2C DACs and ADC's
jc2048 articles:
Programmable Electronic Load: Dynamic Behaviour: Part 1 Overview
Programmable Electronic Load: Dynamic Behaviour: Part 2 The Servo Loop
Programmable Electronic Load: Dynamic Behaviour: Part 3 Effect of Output Inductance
Programmable Electronic Load: Dynamic Behaviour: Part 4 Effect of Output Voltage Change
Programmable Electronic Load: Dynamic Behaviour: Part 5 Stability
Programmable Load Build
Jan Cumps articles:
Programmable Electronic Load - ADC and DAC BoosterPack test
Programmable Electronic Load - Analyse the Summing Node Zero Point
Programmable Electronic Load - Measurements Part 1: Control Circuit
Java GUI
Programmable Electronic Load - Java GUI Part 1: Basic Functionality
Programmable Electronic Load - Java GUI Part 2: Support for Current Mode, Input On/Off, Error Log
LabView
Programmable Electronic Load - Write a LabVIEW Library part 1: Initialise Block
Programmable Electronic Load - Write a LabVIEW Library part 2: Read Output Block
Programmable Electronic Load - Write a LabVIEW Library part 3: Close Block
Programmable Electronic Load - Write a LabVIEW Library part 4: Function Set Block
Programmable Electronic Load - Write a LabVIEW Library part 5: Input Control Block
Programmable Electronic Load - Write a LabVIEW Library part 6: Raw DAC Block
Programmable Electronic Load - Write a LabVIEW Library part 7: Raw ADC Block
Programmable Electronic Load - Automating a DC Switcher Efficiency Test with LabVIEW
Programmable Electronic Load - LabVIEW Test Automation: Characterise the Instrument
Programmable Electronic Load - LabVIEW Test Automation: Characterise the Instrument Pt 2: Oscilloscope Measurements
Example LabVIEW Scenario: test a design with a Rigol PSU and a Keithley DMM
TI-RTOS: Switching to the SimpleLink Distribution
Switch from TI-RTOS to SimpleLink POSIX: Threads and Semaphores
Switch from TI-RTOS to SimpleLink POSIX: EEPROM API
Switch from TI-RTOS to SimpleLink POSIX: From MailBox to Message Queue
Switch from TI-RTOS to SimpleLink POSIX: LCD Display Driver
Switch from TI-RTOS to SimpleLink POSIX: Sleep when Idle
Attachments:
pcb_proto.zip
eload_v1_20170227.zip
eload_1_2a.zip
https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-21/bom.ods
MSP432_SCPI_ElectronicLoad_20180102.zip
eload_power_20180104.zip
eload.zip
eload_examples.zip
MSP432_SCPI_ElectronicLoad_20180514.zip
measureefficiency.zip
measureefficiency_5V_10V_600mA_RAW.zip
MSP432_SCPI_ElectronicLoad_v_00_0_0_1_20180914.zip
MSP432_SCPI_ElectronicLoad_20190706.zip
  • load_cell
  • metrology
  • msp432
  • ti-rtos
  • launchpad
  • laboratory
  • instrument
  • Share
  • History
  • More
  • Cancel
  • Sign in to reply

Top Comments

  • Jan Cumps
    Jan Cumps over 6 years ago +4
    Revisiting the eLoad design - there's definitely room for approval. The very low currency (minus 3 mA) is awful. And the calibration is off. I've set it to 0.5 A- and it thinks it's drawing that current…
  • Jan Cumps
    Jan Cumps over 8 years ago in reply to Jan Cumps +3
    All components are now in and soldered. Time to test. I'll first check out the power rails in isolation. If they are ok. I'll mount LaunchPad, LCD and and DAC board and do measurements. Hang on
  • Jan Cumps
    Jan Cumps over 8 years ago +3
    good news: I finally got persistent saving of calibration/setup sorted out. At first I had issues getting the in-ROM Flash api recognised by the compiler when using it with RTOS. That turned out to be…
  • Robert Peter Oakes
    Robert Peter Oakes over 9 years ago in reply to jc2048

    The basic design is for a DC load and Power supply power stages. For this type of instrument, having too fast a switching edge can lead to ringing and other issues due the the inductance of the wires (Which are outside the control of the basic unit like test probes and so on). The actual design is based on one from a very old but high performance Bench Power supply designed and sold by HP/Agilent/Keysight. and they typically have the best in class when it comes to response times etc, both from set point change and from changes in the load characteristics.

     

    The idea is to have the analog part maintain the constant voltage and or current based on the setpoint of the DAC output.

     

    I looked at a BK-Precision and it only runs transition mode up to 1KHz, slew rates of between 0.5A to 1A per u Second, so based on your simulation my design would be about 2.5 to 5 times slower. A tweak of the coupling capacitors should be able to fix that and I will be trying things out real soon. I have a couple of other projects to get moving first and then ill be back to it.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 9 years ago in reply to Jan Cumps

    I quickly tried the OP191 in the simulation and it gives better results for dc accuracy. Perhaps try them on a prototype and see how you get on (if the footprint will fit). On the simulation, I'm seeing a small offset on the resulting current (by about 680uA) which may result from the voltage offset at the summing node input (I didn't investigate further). If so, some way of adjusting that would be useful, but that's something you can do on the prototype.

     

    Do you want me to post some stuff on the dynamic behaviour and the stability [as the simulation thinks it would be] or would you rather leave that and do it for yourselves when you present the working prototype? The small-signal bandwidth (with the TLE2144) extends to about 25kHz, but the large-signal bandwidth is much poorer. I haven't looked at it with the OP191, but I could easily do so if it would help.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • Jan Cumps
    Jan Cumps over 9 years ago in reply to jc2048

    except from being fairly precise and fairly rail-to-rail, we don't have special requirements for the op-amps. they don't have to be bipolar. (and incrowd secret: we don't really care for the costs of one or two components, not aiming to build down to a price).

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 9 years ago in reply to Jan Cumps

    I don't know the answer to that. It would depend on what your spec is and all the other considerations involved. Can you find a CMOS or FET op-amp that does everything else you need it to do? The OPA191 that MK was recommending last year looks quite promising, but the GBW figure and slew rate are lower and it can't drive so much capacitance.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • Jan Cumps
    Jan Cumps over 9 years ago in reply to jc2048

    thanks, Jon. Would you advise using a MOS opamp to eliminate  the base current?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 9 years ago in reply to jc2048

    I misunderstood the scaling. Re-reading Peter's text with the circuit, it looks like it was meant to be 5A output for 2.048V input (which would make more sense for a D/A reference). The gain of the differential amp then needs to be 2.048/0.25 = 8.192.

     

    That would suggest 680k and 83k for the resistors, but I actually see 680k and 82k working better on the simulation.

     

    There's a bit of a problem with the input currents to the op-amps. They are bipolar and the input is a transistor - PNP in this case - so there is a current to drive them (sinking out of the input because it's PNP). It's only very small, but it still has an effect and introduces small errors. The inputs really do need to be balanced on both inputs of both op-amps to get even a reasonable accuracy. The circuit below gets to about 1% accuracy at DC on the simulator (note that the real parts in the circuit could be a fair way different from the simulation) without adding anything to the original layout except changing values and adding the extra resistor on the non-inverting input of the differential amp (which it looks like Peter has sensibly put a placement for).

     

    As for driving the MOSFET better, it looks like merely reducing the pull-up a bit - I've got 4k7 here - is enough. The circuit is never going to be a speed demon, so if you wanted something faster you'd be redesigning the whole thing anyway.

     

    Here's what I ended up with

     

     

    image

     

    here's what the squarewave now looks like at 10kHz

     

    image

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 9 years ago in reply to jc2048

    I've done a bit more with the simulation.

     

    It seemed more important to look at the basic lack of accuracy rather than the performance at higher frequencies.

     

    My first though was lack of open-loop gain, but why does it manifest at the bottom end of the range?

     

    After a bit of experimenting and looking at the difference in voltage between the input pins of the integrator, it became apparent that

    the problem is with the idea of using a summing node, particularly with such high value resistors. Basically, if the control voltage is

    low and the fed back voltage is low, then the voltage changes at the amplifier for a small change in desired current are miniscule and

    getting lost in the offsets.

     

    If I change those resistors to 10k, and adjust the gain of the cuirrent monitor amp a fraction by dropping the 680k to 660k, and even up

    the resistance seen by both inputs of that amp by adding an extra 660k, then I get this. Note that this is using the model in the

    simulation and the real part on the board may be different (they probably built the model using typical figures, but there's no guarantee

    that you have a typical device), but it should still be better than with the 100k resistors.

     

     

    image

     

    image

     

    A bit of tweeking would bring it further into line. This still isn't all that good - it would be much better to generate the error term

    directly with the differential input of an op-amp - but it would enable you to do something with your prototype. I haven't looked at the

    compensation, so that will need to be adjusted.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 9 years ago in reply to Jan Cumps

    Really I should leave this to you and Peter, but I was curious so I couldn't resist simulating the rest of it.

     

    Here's the circuit I used (just in case there are any mistakes - say if there are)

     

    image

     

    Some triangular waveforms at different frequencies follow. It does a fairly reasonable impression of the shape of the input up to a few 10s of kHz, though by 100k it's losing it a bit. Your low-frequency accuracy isn't very good at the bottom end of the scale (I'm working here on the assumption that you've scaled it for 3.3V->10A; I thought at first that you might have chosen a reference like 2.5V, but this seems to fit better) with a zero input giving around 350mA out. I'm a bit puzzled by that - it may be lack of gain to drive the loop (the integrator output has to come down a good way to get the MOSFET turned off).

     

    1Hz:

     

    image

     

    1kHz:

     

    image

     

    10kHz:

     

    image

     

    100kHz:

     

    image

     

    and here's a squarewave at 10kHz. This one does show the imbalance between turning on and turning off quite nicely.

     

     

    image

     

    Good news, at least as far as the simulation is concerned, is that it's quite solid and I haven't seen it oscillate or ring.

     

    I'd like to look at the stability properly, by opening the loop and plotting Bode charts, but I can't figure out how to do it with the simulator. If I open the loop, then the DC biasing of the MOSFET disappears and I don't think it's then measuring the loop response properly with the small signal it has to use because the open loop gain may be very high. I suspect it just passes a very small signal through the gate-source capacitance with the MOSFET off and plots that - anyway, the results don't make sense. If anyone knows how to do this properly [I'm using TI-TINA], please say.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • Jan Cumps
    Jan Cumps over 9 years ago in reply to jc2048

    Thank you, Jon. I am  looking for a load that behaves well in close-to-DC situations. But since this design is intended to be usable as a generic lab instrument, it'll be good to use the transistor as good as we can.

    I'm pinging our Robert Peter Oakes here, to check his thoughts on this. Any advise that can get a faster reaction without turning it into an oscillator helps...

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • jc2048
    jc2048 over 9 years ago

    Over on this thread, where Shabaz was reviewing the BK8600,

     

    https://www.element14.com/community/roadTestReviews/2347/l/programmable-dc-electronic-loads-with-the-bk8600-review

     

    You said:

    "Feel free to chime in on our design here on element14.
    It's not a 'design by committee'. Our main goal is to build that instrument that we both want. We're rather harsh on scope creep. On the other side, we do welcome good advice and we also like to be challenged when off-track."

     

    I can't give good advice; I don't have enough experience of this kind of thing to do that [best ask Michael if you want good advice]. What I do have is curiosity about how the circuit will function.

     

    To me, looking at the circuit, the drive to the MOSFET looks very unbalanced. The integrator can turn off the MOSFET reasonably quickly, by pulling the gate down, but turning it on is all down to the 10k pull-up. That will be even more sluggish because of the zener (the reduced voltage meaning that the resistor looks even less like a current source than you'd like, though I can understand that the idea might have been to limit the swing on the gate voltage).

     

    Out of curiosity, I decided to try simulating it to get a better feel for what it does. The simulator didn't have a IRFP065, so I substituted something else, but it's good enough to see how the output circuit behaves.

     

     

    image

    image

     

     

    It's very slow to turn on. Looks like it would be around 50uS to get to 10A, which is a shame given that the MOSFET itself is actually capable of doing it in 20-30nS [though not with most op-amps driving it, obviously]. Of course my simulation differs from what you are doing in that I've used a square wave with 1uS edges to drive it. That's just to see what the open-loop performance of the output is like. In your circuit it's driven by the integrator and presumably you'll tune that so it's slower than the output circuit to guarantee the loop stability. Then you'll have a large-signal bandwidth of what, 5kHz maybe? Question then is: is that the instrument that you both want? [It wouldn't be what I would want, but then I'm not on the committee so it's not for me to say.] It's certainly a configurable DC load, but at high frequency it's going to look much more like constant-resistance than constant-current. Have I got that right, or are there things I'm missing?

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
<>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2026 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube