ESH10000590 - Precision ADC/DAC Module
Overview
The ESH10000590 is a precision analog I/O module providing high-accuracy analog-to-digital conversion (ADC) and digital-to-analog conversion (DAC) capabilities for Accordion instruments.
Description
The Precision ADC/DAC module offers 12 analog input channels and 8 analog output channels with built-in calibration support. The module uses Texas Instruments ADS124S08 ADC chips for input and Analog Devices AD5675R DAC chips for output, providing industrial-grade precision measurement and signal generation.
Key Features:
12 Analog Input Channels (ADC): High-precision voltage measurement
- 24-bit resolution
- Configurable gain and offset
- Supports numeric result acquisition with configurable sample rates
- Can be configured as pseudo-digital inputs with programmable VL/VH thresholds
8 Analog Output Channels (DAC): Precision voltage output
- 16-bit resolution
- Configurable gain and offset
- Can be configured as pseudo-digital outputs with programmable VL/VH thresholds
Calibration Support: Per-channel gain and offset calibration
- Persistent calibration storage by product ID, revision, and serial number
- Calibration data accessible via dedicated calibration channel
- Automatic application of calibration factors on module reset
Flexible Channel Configuration:
- Analog mode: Direct voltage measurement/output with gain/offset
- Pseudo-digital mode: Logic level interpretation with user-defined VL/VH thresholds
- Numeric result mode: High-speed multi-sample data acquisition with optional data reduction
Hardware Details
ADC Subsystem:
- Chip: Texas Instruments ADS124S08
- Channels: 12 single-ended inputs
- Resolution: 24-bit
- Communication: SPI bus
DAC Subsystem:
- Chip: Analog Devices AD5675R
- Channels: 8 outputs
- Resolution: 16-bit
- I²C Address: 0x0C
- Communication: I²C bus
GPIO Expander:
- Chip: NXP PI4IOE5V6416
- Purpose: Internal routing control, chip select management, status LEDs
- I²C Address: 0x20
- Not user-accessible (system control only)
Channel Naming Convention
All channels follow the naming pattern: {ModuleIndex}.ESH10000590.{ChannelName}
Where:
{ModuleIndex}is the position of the module in the system (e.g., 0, 1, 2...)ESH10000590is the module type identifier{ChannelName}is the specific channel name from the table below
Example: Module at position 0, ADC channel 5 would be: 0.ESH10000590.ADC05
User-Accessible Channels
| Channel Name | Type | Direction | Usage | Description |
|---|---|---|---|---|
| ADC00 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 0 (ADS124S08 CH0) |
| ADC01 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 1 (ADS124S08 CH1) |
| ADC02 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 2 (ADS124S08 CH2) |
| ADC03 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 3 (ADS124S08 CH3) |
| ADC04 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 4 (ADS124S08 CH4) |
| ADC05 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 5 (ADS124S08 CH5) |
| ADC06 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 6 (ADS124S08 CH6) |
| ADC07 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 7 (ADS124S08 CH7) |
| ADC08 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 8 (ADS124S08 CH8) |
| ADC09 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 9 (ADS124S08 CH9) |
| ADC10 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 10 (ADS124S08 CH10) |
| ADC11 | Analog / Pseudo-Digital | IN | UserAllocatable | Analog input channel 11 (ADS124S08 CH11) |
| DAC00 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 0 (AD5675R CH0) |
| DAC01 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 1 (AD5675R CH1) |
| DAC02 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 2 (AD5675R CH2) |
| DAC03 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 3 (AD5675R CH3) |
| DAC04 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 4 (AD5675R CH4) |
| DAC05 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 5 (AD5675R CH5) |
| DAC06 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 6 (AD5675R CH6) |
| DAC07 | Analog / Pseudo-Digital | OUT | UserAllocatable | Analog output channel 7 (AD5675R CH7) |
| CALIBRATION | Calibration Data | N/A | UserAllocatable | Module calibration table (gain/offset for all channels) |
Channel Configuration
Analog Mode
Channels operate as precision voltage measurement (ADC) or generation (DAC) with configurable parameters:
- Gain: Multiplicative calibration factor
- Offset: Additive calibration offset
- Resolution: Measurement resolution (3-24 bits for ADC, configurable)
- Value: Measured or output voltage
Pseudo-Digital Mode
Analog channels can be configured as digital I/O with voltage threshold interpretation:
- VL (Voltage Low): Maximum voltage considered logic LOW (default: 0.5V)
- VH (Voltage High): Minimum voltage considered logic HIGH (default: 1.5V)
- MinIoVoltage: Minimum allowable voltage (0V)
- MaxIoVoltage: Maximum allowable voltage (5V)
- Value: Boolean state (true/false)
- RawValue: Underlying analog voltage (read-only for inputs)
Constraints:
VL >= MinIoVoltage(typically 0V)VH <= MaxIoVoltage(typically 5V)VH > VL(high threshold must exceed low threshold)- Hysteresis: Values between VL and VH retain previous state
Numeric Result Mode (ADC Only)
High-speed data acquisition mode for capturing multiple samples:
- NumberOfSamples: Number of samples to acquire
- SampleRate: Acquisition rate (samples per second)
- TargetNetName: Comma-separated list of channels to acquire
- ReducedSet: Enable statistical data reduction (min/max/avg/stddev)
- MultiChannel: Enable multi-channel synchronized acquisition
- Base64String: Acquired data encoded as Base64 (output)
Calibration Channel
The CALIBRATION channel provides access to the module's calibration table:
- Read: Returns current calibration data for all channels as Base64-encoded CalibrationTable
- Write: Updates calibration gains and offsets for specified channels
- Storage: Persistent storage by module identity (ProductID, Revision, SerialNumber)
- Format: Base64-encoded CalibrationTable containing per-channel gain/offset pairs
Calibration Table Structure:
// Each channel has:
- NetName: Full channel identifier
- Gain: Multiplicative correction factor
- Offset: Additive correction offset
Usage Example:
- Read calibration data:
GetValue("0.ESH10000590.CALIBRATION") - Modify gains/offsets in returned CalibrationTable
- Write updated data:
SetValue("0.ESH10000590.CALIBRATION", modifiedBase64Data) - Module automatically applies new calibration factors to hardware
Internal Channels (Not User-Accessible)
The following channels are used for internal system control and are hidden from users:
- GPIO Expander Signals (all
HiddenSystemControl):- SYNC0-SYNC3: ADC chip select control
- DACEN0-DACEN2: DAC chip enable control
- SPI_EN: SPI bus enable
- GAIN: Global gain control
- SYNC: Synchronization input
- BOARD_ID_0 to BOARD_ID_2: Hardware identification
- LED_STATUS_R/G/B: Status LED control
Data Bus Integration
The module provides a data bus with 96 signals (12 groups × 8 signals):
- Signal Type: Analog
- NetName Pattern:
{ModuleIndex}.ESH10000590.MPIO{00-95} - Purpose: Internal signal routing and cross-module connectivity
- Note: MPIO signals are system-level infrastructure, not directly user-accessible
Programming Interface
Channel Configuration:
// Example: Configure ADC00 as analog input
ConfigureChannels(new[] {
new AnalogChannel {
NetName = "0.ESH10000590.ADC00",
Enabled = true,
Direction = DirectionTypes.IN,
Gain = 1.0,
Offset = 0.0,
Resolution = 24
}
});
// Example: Configure ADC01 as pseudo-digital input
ConfigureChannels(new[] {
new PseudoDigitalChannel {
NetName = "0.ESH10000590.ADC01",
Enabled = true,
Direction = DirectionTypes.IN,
VL = 0.8, // Logic LOW threshold
VH = 2.0 // Logic HIGH threshold
}
});
Reading Values:
// Read single channel
string[] values = GetValues(new[] { "0.ESH10000590.ADC00" });
double voltage = double.Parse(values[0]);
// Read multiple channels
string[] values = GetValues(new[] {
"0.ESH10000590.ADC00",
"0.ESH10000590.ADC01"
});
Setting Output Values:
// Set DAC output voltage
SetValues(
new[] { "0.ESH10000590.DAC00" },
new[] { "2.5" } // 2.5V output
);
// Set pseudo-digital output
SetValues(
new[] { "0.ESH10000590.DAC01" },
new[] { "true" } // Logic HIGH (will output VH voltage)
);
Numeric Results Acquisition:
// Configure numeric result channel
ConfigureChannels(new[] {
new NumericResultChannel {
NetName = "0.ESH10000590.RESULT01",
Enabled = true,
NumberOfSamples = 1000,
SampleRate = 10000, // 10 kHz
TargetNetName = "0.ESH10000590.ADC00,0.ESH10000590.ADC01",
ReducedSet = false,
MultiChannel = true
}
});
// Read acquired data
string[] result = GetValues(new[] { "0.ESH10000590.RESULT01" });
List<NumericResult> data = NumericResult.FromBase64(result[0]);
Error Handling
The module validates channel configuration and provides detailed error messages:
- Invalid NetName: Throws exception if channel does not exist
- Invalid VL/VH: Validates voltage thresholds are within MinIoVoltage/MaxIoVoltage range
- Invalid VH <= VL: Ensures high threshold exceeds low threshold
- Direction Mismatch: Prevents output operations on input channels and vice versa
- Disabled Channel Operations: Allows GetValue on disabled channels, skips SetValue for disabled outputs
Best Practices
- Always enable channels before use: Set
Enabled = trueinConfigureChannels() - Apply appropriate calibration: Load and verify calibration data after module reset
- Use pseudo-digital mode judiciously: Provides simple digital I/O but sacrifices ADC precision
- Configure VL/VH with margin: Leave hysteresis gap to avoid state oscillation at threshold
- Batch operations: Use multi-channel GetValues/SetValues for better performance
- Numeric results for high-speed: Use NumericResultChannel for acquisition > 100 samples
- Verify calibration: Check calibration table after updates to ensure expected values applied
Module Initialization Sequence
On Reset(), the module performs the following initialization:
- Clear existing channel list
- Setup GPIO expander (PI4IOE5V6416) for internal control
- Create 12 ADC input channels (ADC00-ADC11)
- Create 8 DAC output channels (DAC00-DAC07)
- Load calibration table from persistent storage (or create defaults)
- Apply calibration factors to all ADC and DAC channels
- Add CALIBRATION channel for user access to calibration data
Revision History
- ESH10000590: Current production version
- 12 ADC channels (ADS124S08)
- 8 DAC channels (AD5675R)
- Full calibration support
- Pseudo-digital mode support
- Numeric results acquisition support