Our Rigol DL3031 runs our own AI firmware: one bare-metal Rust image on the load's i.MX283, with no operating system under it. It sinks current in CC, CV, CR and CP, runs transients, lists, the battery, OCP and OPP tests, a factory test and CC+CV, records waveforms, stores setups and waveforms on a USB stick, has built-in help, and takes commands from the front panel, USB and the LAN. While it is brought up it runs under conservative software caps, and each step is tested against a bench supply.
DL3000Update.GEL · about 1.3 MB · one file on a USB stick · how to install it, and go back| Function | On our DL3031 |
|---|---|
| Static modes | Constant current, voltage, resistance and power, each with both of its ranges (CC 6 A / 60 A, CV 15 V / 150 V, CR 15 Ω / 15 kΩ), set from the keypad and knob or over SCPI; the ON/OFF key turns the input on and off. |
| Protection | Over-voltage, over-current, over-power, over-temperature and reverse-connection trips, and a V_Limit and C_Limit for each mode. A trip turns the input off, shows a prompt with the reading that tripped, and sets the SCPI status registers. |
| Transient | Continuous, pulsed and toggled, from the TRAN key or a bus trigger; CC range, slew, Von and the Von latch. |
| List | Up to 512 steps of 50 µs to 3600 s each, in CC, CV, CR or CP, run by the load's own FPGA; each step's last reading is kept. Run on the unit in CC so far. |
| Tests | Battery discharge (capacity, energy, time; stop on voltage, capacity or time), OCP and OPP ramps with a pass or fail verdict. |
| Option | The factory test: pass or fail on the current (CC) or the voltage (CV) against a Max and Min window, judged once a second; a fail leaves the input on. CC+CV: the load sinks the set current until the input voltage rises above the set voltage, then holds that voltage, as a charger test. |
| Waveforms | A Roll trend from 8 s to 80 h, a fast capture of up to 250 kSPS, and Print, Record and Play Back on a USB stick. |
| Store and Recall | Setups and waveform CSV files on a USB stick in the front port: save, read and delete. The internal memory (Disk C) is listed and read; on our unit it holds the stock firmware's own four files. Saving and deleting on Disk C are built but switched off. |
| Help | Built in: press Help, then any key, and the screen shows that key's topic. |
| Short circuit | From the SHORT key (HOLD, TOGGLE or Disable, as set in Settings) or SCPI, held to the 3 A cap. CC, CR and CV come back to their own mode after the short; settings are refused while the input is shorted; a short started from a computer ends if the computer goes quiet for 10 s; a short is refused where 3 A would exceed 60 W (at 25 V, for example). |
| Von in CR | The CR page has its own Von and Von latch: the input waits until the voltage reaches Von. It is also set over SCPI with :RESistance:VON. |
| Power-on state | Settings > Power-on chooses Default or Last, and the firmware reads the state the stock firmware saved. Saving the state is built but switched off. Whatever is stored, the input always starts off. |
| Identification | A custom identification string set with :SYSTem:IDN:SET: *IDN? answers it until the next power-off. Saving it is built but switched off. |
| Reset | *RST turns the input off and puts the settings back to their power-on values. Many VISA programs start with it. |
| Remote control | USBTMC, SCPI on TCP port 5555, VXI-11 (VISA's TCPIP::<ip>::INSTR), mDNS, the LXI identification and a web interface on port 80. GPIB through Rigol's USB-GPIB converter, with the GPIB address (0 to 30) set over SCPI: built, not yet tried. All of it is simply part of the firmware: there are no paid options. |
| Front panel | Every key, the knob and the panel LEDs. A status bar shows the function, STATIC / Continuous / Pulse / Toggle / LIST and LOAD while the input is on, with the beeper, LAN, remote and USB icons; each function has its own soft-key row with the live value under each label; while a value is typed, the soft keys are its units (A or mA, Ω or kΩ, Hz or kHz). Con, Pul and Tog open their own Config Guide with a diagram drawn from the values; the List page has a second soft-key page with the trigger source, Save, Read and Record; the arrows move a cursor over the digits, and the knob or Up / Down change the digit under it. The mode keys open their main screen from any page, and Utility has the System, Interface, System Information, Reset and Options tabs. The beeper clicks on each key and sounds with prompts and test results; the screen brightness goes from 10 to 100 %. Text is anti-aliased, with a real Ω. The screen can be read as a BMP over SCPI. |
None of the functions in Rigol's documentation for the load is missing now: each is done, done within the caps below, or built and waiting for a bench test (see Not done yet).
The caps. The first release limits the load to 3 A, 60 W and 60 V in software and turns the input off above 50 °C, inside the hardware's 150 V, 60 A and 350 W: what our bench supply can drive and so prove. They come up one step at a time, each step tested first.
:RESistance:VON command does nothing; in the AI firmware it sets the CR page's own Von.None of these is in Rigol's own DL3000 firmware. Each one has been run on our DL3031, and they come with the next firmware file.
| Function | On our DL3031 |
|---|---|
| Statistics | Count, average, minimum, maximum, peak-to-peak and standard deviation of voltage, current, power and resistance, on a Statistics page and over SCPI. |
| Histogram | 10 to 400 bins over an automatic or a fixed range, on a page under the Option key and over SCPI. |
| Limit test | Any reading checked against upper and lower limits while the load runs: PASS or FAIL on the panel, failure counts and an optional tone. It never turns the input off. |
| Data logger | Voltage, current, power and resistance every 50 ms to 24 h, to a CSV file on a USB stick and to memory a computer reads over SCPI. |
| Date and time | Set over SCPI or from a network time server; it stamps the logger's readings and the event log. The load has no battery-backed clock, so it is set again after each power-on. |
| Event log | Every protection trip, watchdog trip, self-test failure and power-on, with when it happened. Kept until the load is switched off. |
| Files | List, copy, move, delete, upload and download files on the internal memory and the USB stick over SCPI, including setup files in the same formats the stock firmware uses. The calibration and identity files can be read but never written. |
| Web interface | A front panel in the browser (the live screen, every key and the knob), a Files page that downloads any file, and a password on every page that can change something, kept only as a salted digest. |
| Error queue | One query, :SYSTem:ERRor:ALL?, reads every queued error at once. |
The release caps, 3 A and 60 W, on 13 October: in CC from 12 V, 1.0, 1.5, 2.0, 2.5 and 3.0 A read 1.0003, 1.4997, 2.0001, 2.5006 and 2.9998 A (the supply 0.9979 to 2.9983 A); in CR, 6 Ω and 4 Ω from 12 V drew 1.9896 and 2.9807 A; in CP from 21 V, 60 W held 59.99 W (2.8672 A, the supply 2.8667 A) for two minutes while the two temperature sensors went from 28.9 to 31.4 °C. 3.01 A, 3.9 Ω and 61 W were refused.
These runs were made on our DL3031 against a Rigol DP2031 bench supply at 12 V, with the supply's own current limit as a second guard (0.5 A, and 0.2 A for CV). The two instruments' readings are compared at every step. Neither is a calibrated reference, so these show that each mode does what it is set to, not the load's accuracy.
| Mode | Set | DL3031 read | DP2031 read |
|---|---|---|---|
| CC | 0.10 / 0.25 / 0.45 A | 0.1005 / 0.2505 / 0.4509 A | 0.097–0.099 / 0.245–0.250 / 0.447–0.449 A |
| CR | 40 / 60 / 30 Ω | 0.3009 / 0.2009 / 0.4006 A (12 V / R: 0.300 / 0.200 / 0.400) | 0.296–0.301 / 0.197–0.202 / 0.396–0.401 A |
| CP | 3 / 5 / 1 W | 3.00 / 5.00 / 1.03 W (0.2505 / 0.4173 / 0.0862 A at 11.98 V) | 0.244–0.250 / 0.414–0.421 / 0.083–0.086 A |
| CV | 10 / 8 / 5 V | 9.991 / 7.990 / 4.992 V at 0.202 A | 0.1998 A, at its current limit |
These are screen captures from the load's own framebuffer over the LAN, at about 1.6 frames a second, shown at real time. The panel was driven through its keys by AI (Claude) over the LAN, and the bench supply was set up over SCPI before each take. The readings are real. Nothing is drawn on a PC.
The load's own 480 × 272 screen, read over the LAN and doubled without smoothing; real current from the bench supply. Click a screen to enlarge it.
The waveform page plots current, voltage, resistance or power. In Roll the window runs from 8 s to 80 h, and the firmware keeps every reading at several resolutions, so a new window shows its whole history at once. Print saves the screen as a BMP and the trace as CSV on a USB stick in the front port, Record logs a run to CSV, and Play Back reads a file back onto the page. The trace's 400 points and the screen are also readable over SCPI, and Store and Recall lists, reads and deletes the files on the stick.
With the continuous transient selected, the fast capture takes 400 samples of current or voltage at 4 µs to about 1 ms per sample (250 kSPS down to 0.98 kSPS, windows of 1.6 to 409.6 ms) and measures ripple, edges and recovery time on them. On our unit it captured a 1 kHz transient at 8 µs per sample, 257 captures out of 260. On the supply's 12 V the trace moved between two codes 3.7 mV apart: the supply's ripple is below one step of the capture on its 150 V range.
The same SCPI commands work over USB (USBTMC), a raw socket on TCP port 5555 and VXI-11. pyvisa opened the load as TCPIP::<ip>::INSTR with both its own backend and a system VISA library, and read *IDN?. The load announces itself over mDNS and answers the LXI identification.
Its web interface on port 80 has the instrument, network status, network settings and password pages, and a read-only page with the live voltage, current, power and resistance. Every setting made there goes through the same checks as a SCPI command. A host can also press any front-panel key with :SYSTem:KEY, and read the screen over the LAN in about 0.8 s with the screenshot query (a 391,736-byte BMP).
The first public release opens after a legal review, with the date announced here: one small file (about 1.3 MB) for a USB stick. Rigol's boot loader stays on the unit as it is and installs it the way it installs a Rigol update:
DL3000Update.GEL, to the top folder of a FAT32 USB stick, keeping its name as it is.Going back is the same three steps with Rigol's own firmware file for your model, which Rigol publishes on its DL3000 product page under Software & Firmware; we don't host it. Once the AI firmware is on, later versions can also be sent from a computer over USB or the LAN: it writes the new file over the one on the stick in the load, checks it, and restarts into the boot loader. So keep Rigol's file on a second stick.
The AI firmware is ours from the first instruction; Rigol's boot loader on the unit installs it. So far it has been tested on our DL3031 only.
The DL3031 is Rigol's single-channel DC electronic load. Its controller is a small ARM system, and everything analog sits on a measurement board with its own FPGA, reached over one SPI link.
| Part | DL3031 |
|---|---|
| Rating | 150 V, 60 A, 350 W |
| Processor | NXP i.MX283: one ARM926EJ-S core (ARMv5TE), no FPU |
| Memory | 64 MB DDR2 |
| Storage | 1 Gbit NAND |
| Display | 480 × 272 |
| Measurement and control | A measurement-board FPGA with an AD7175-2 ADC, on the SoC's SSP0 (SPI) port, spoken to in frames with a CRC-8 |
| Stock firmware | Freescale MQX RTOS with lwIP networking and UFFS on the NAND |
The AI firmware replaces all of it with a single no_std Rust image that runs one polled loop. It shares its screen look and some of its drawing and SCPI code with the NovaOS instruments. Every driver in it is ours: the LCD controller, the front panel's 3 Mbaud link (keys, knob and LEDs), the measurement board, a read-only NAND reader for the calibration, USB device and host, and Ethernet with the smoltcp TCP/IP stack.
Everything the load measures and regulates passes through an FPGA on the measurement board. It runs the ADC that reads voltage and current, one mains cycle per reading, and the 400-sample fast capture. It sets the current and voltage setpoints and the protection thresholds, reports the protection trips, times the transients and the lists, and switches the relays, the Vmon and Imon outputs and the fan.
The part is most likely a Xilinx Spartan-6 XC6SLX9. We have not read the chip's ID code on our own board yet.
The AI firmware talks to the FPGA over its SPI link, in the frames the board expects, and never changes it. It loads nothing into the FPGA and writes nothing to wherever the FPGA's configuration is stored.
We are studying our own FPGA design for this board, which keeps the same link to the AI firmware. These are possibilities, each limited by the board's own parts:
It cannot change the power stage and its limits, how fast the analog current and voltage loops respond, or the one ADC that voltage and current share. Any such design would first be loaded over JTAG into the FPGA's volatile memory only, so switching the load off and on brings back the original. Nothing would be written to the board until the design is proven. None of this is scheduled.