Project

General

Profile

Analog Output » History » Revision 2

Revision 1 (Adam Klama, 06/21/2026 03:26 PM) → Revision 2/3 (Adam Klama, 06/21/2026 03:27 PM)

# Analog Output 

 ## Overview 
 An **Analog Output** drives a real analog **voltage** on a hardware pin 
 (digital-to-analog conversion). Use it to feed the analog input of another ECU, 
 or to drive an analog gauge or meter, by turning a control value into a voltage. 

 You set an **output voltage range/reference** and a scaling that maps your input 
 (engineering) value onto a voltage within that range. 

 ## Prerequisites & hardware 
 - Wire the output pin to the analog input it should drive, with a **common 
   ground** between the controller and the receiving device. 
 - Pick a **range** the receiving input can accept (e.g. 0–5 V or 0–12 V); do not 
   exceed its input rating. 
 - Have a source value (a map, driver or input) ready to command the output. 

 ## Add it in the app 
 1. Add a new output and choose **Analog Output** as the type. 
 2. Select the **pin** and give it an **alias** (e.g. `Boost Gauge Drive`). 
 3. Choose the output **range**, then set the **in** and **out** scaling points. 
 4. Drive the output from a map/driver that supplies the input value. 

 

 ## Settings reference 
 > Schema: `config/DacConfiguration.proto`. 

 | Setting | Meaning | Unit | Range / values | Notes | 
 |---|---|---|---|---| 
 | **Range** | Output voltage scale / reference | — | `5V`, `Internal 5 V`, `12V`, `Raw` | Sets the full-scale voltage the **Out** values refer to. `Internal 5 V` uses the controller's own 5 V reference; `Raw` outputs the unscaled DAC value. | 
 | **Enable interpolation** | Scale the input through the in/out points | — | on / off | On = interpolate input to output voltage; off = pass the value straight through. | 
 | **In min / In max** | Input (engineering) range to scale **from** | source unit | sint32 | The source low/high points. | 
 | **Out min / Out max** | Output voltage range to scale **to** | mV | sint32 | The voltage produced at In min / In max, within the selected range. | 

 **Scaling:** the input value is mapped from `In min…In max` to `Out min…Out max` 
 using [two-point interpolation](Scaling_and_Maps#two-point-interpolation). 

 

 ## Common settings 
 Analog Output also uses the shared settings — alias and pin. See [Common IO Settings](Common_IO_Settings). 

 ## Example — 0–5 V boost gauge drive 
 1. Type **Analog Output**, alias `Boost Gauge Drive`, on the gauge's pin. 
 2. **Range = 5V**, **Enable interpolation on**. 
 3. **In min/max** `0`/`300` (kPa) → **Out min/max** `0`/`5000` (mV). 
 4. Command it from the boost-pressure channel; 0 kPa gives 0 V, 300 kPa gives 5 V. 

 ## Troubleshooting 
 - **Output voltage too high/low for the device:** pick a smaller **Range** or lower 
   the **Out max** value. 
 - **Voltage doesn't change with the command:** check **Enable interpolation** is on 
   and that the **In min/In max** span matches the source's real range. 
 - **Reads as a fixed offset on the receiver:** confirm a shared **ground** and that 
   the receiver's range matches the selected **Range**. 

 ## Related 
 - [PWM Output](PWM_Output) — for a switched/PWM signal instead of a voltage. 
 - [Tacho Output](Tacho_Output) — generated tacho/frequency signal.