I want to thanks to everyone who were already downloaded the M1 firmware and invite all other to try it and post here comments and suggestions.
Firmware in version M1 still do not allows that some of the PSU parameters can be set and read using the SCPI commands nor using the local console that is not supported at all in this version. That issue is addressed to some extent by using few configuration files with parameters that could be altered during the compilation time. This post describe the content of the following configuration files:
- conf.h
- conf_advanced.h
- conf_channel.h
- conf_user.h
We would not like to recommend changing any of the parameters defined in the first three of above mentioned files. Instead of that conf_user.h should be used to override existing values with a new one.
conf.hBasic firmware parameters are defined in conf.h. That includes definition of SPI peripherals installed on Arduino shield board but also used channel’s types defined with their programmable voltage and current ranges. The over-temperature protection (OTP) default values for the
MAIN sensor are also defined here.
The SERIAL_SPEED is the only parameter that is used for serial communication configuration. Default is 9600 baud and it can be changed to any of the following speed: 300, 1200, 2400, 4800, 19200, 38400, 57600, 74880, 115200, 230400 or 250000.
conf_advanced.hThis header file contains most of the parameters that are used for firmware configuration. That also includes the power supply’s identification used in
*IDN? query (PSU_SERIAL, MANUFACTURER and FIRMWARE), DAC and ADC parameters, calibration parameters and over-temperature protection (OTP) values.
SCPI parser input buffer length (SCPI_PARSER_INPUT_BUFFER_LENGTH) is by default set to 48 and it can be increased to e.g. up to 255 but please note that will consume twice as much SRAM memory with each increment because two buffers was implemented: one for serial and one for Ethernet communication. That can generate problem during compilation on Arduino Mega in first place because it has only 8 Kb of SRAM.
The following three constants requires additional attention:
- CONF_WAIT_SERIAL – defines does serial communication is required to start firmware execution. It’s disabled by default. Keep in mind that if you enable it then nothing will happened when power is switched on without USB cable connected and a serial console (e.g. Arduino Serial Monitor) is up and running.
- CONF_DEBUG – determines if additional debug messages will be send to the serial console as an assistance in the development process since no real-time debugger is available in Arduino IDE. All debug messages started with ** and some examples are shown on picture below. This constant that is currently enabled by default could be disabled to decrease compiled sketch size.
- CONF_DEBUG_LATEST – represents additional condition for generating debug messages and it’s usually used as an assistance in debugging code that is recently added when additional reporting is required.
conf_channel.hChannel specific information such as
pin mapping used for each channel is defined in conf_channel.h. Additionally all possible variations of channel’s capabilities are listed here. Original file contain three voltage ranges (up to 30, 40 and 50 V) and two current ranges (up to 3.12 and 5 A) that has to match capabilities of the
post-regulator board for proper operation. If one wants different voltage and current ranges e.g 0 – 25 V or 0 – 2 A it can be done here simply by adding new channel profile following the defined structure.
Together with mentioned voltage and current ranges that are represents with three values (MINimum, DEFault and MAXimum), channel profile contains information about voltage and current STEP change (see
SOURce[<n>]]:VOLTage:STEP and
[SOURce[<n>]]:CURRent:STEP), calibration LEVels (see
CALibration:VOLTage:LEVel and
CALibration:CURRent:LEVel),
OVP and
OCP parameters.
Finally over-power protection (OPP) profiles are also defined here as a mix of above mentioned voltage and current profiles.
conf_user.hAn example how to override channel’s profiles defined in conf.h is added into conf_user.h:
#pragma once
// Example: redefine channels
/*
#undef CHANNELS
#define CHANNELS \
CHANNEL(1, CH_PINS_1, CH_PARAMS_50V_3A), \
CHANNEL(2, CH_PINS_2, CH_PARAMS_30V_3A)
*/
Procedure is simple: parameter that we want to change first needs to be undefined (
#undef) when a new definition follows using the
#define operator.
Above mentioned change can be checked with *IDN? or APPL? query:
*IDN?
EEZ,PSU 1/50/03-1/30/03 (Simulator),123456789,M1
APPL? CH1
CH1:50.00 V/3.12 A, 0.00, 0.00
APPL? CH2
CH1:30.00 V/3.12 A, 0.00, 0.00