TwinCAT Project for Reading the ATI Delta Force/Torque Sensor (DAQ analog electronics, non-NET, non-legacy)
This repository documents the complete and validated integration of an ATI Force/Torque (F/T) sensor – Delta series using analog DAQ electronics and Beckhoff TwinCAT.
The project implements the same mathematical model used by ATI’s official C library, adapted to IEC 61131-3, and provides a fully transparent signal chain:
Raw ADC → Volts → Strain Gage Vector → Calibration Matrix → Forces / Torques → Tool Transform
The implementation is intended to be:
- Physically correct
- Traceable to ATI reference implementations
- Reproducible and maintainable
- Independent from NET / EtherCAT ATI electronics
✔ Delta DAQ analog sensor support
✔ EL3602 and ELM3704 Beckhoff modules
✔ Multi-calibration handling (runtime selectable)
✔ Independent bias (tare) per calibration
✔ Full 6×6 matrix math (no simplifications)
✔ Tool frame transformation (rotation + translation)
✔ Verified against ATI calibration files (.cal)
ATI provides a software downloads page, which includes the ATIDAQ C Library (C reference implementation):
- ATI DAQ F/T Software Downloads (official): https://www.ati-ia.com/Products/ft/software/daq_software.aspx
- ATIDAQ C Library (download from ATI page): “ATIDAQ C Library.zip” (version shown on ATI page)
- GitHub fork/mirror (community): https://github.com/roboticslibrary/atidaq
This project mirrors:
- calibration matrix application
- bias subtraction before matrix multiplication
- force/torque computation semantics
The mathematical model implemented in this project is directly derived from ATI’s official C reference implementation.
The ATI F/T sensor measures six components simultaneously:
- Forces: Fx, Fy, Fz (N)
- Torques: Tx, Ty, Tz (Nm)
The Delta sensor is a monolithic structure with internal strain gages bonded to flexure beams. Elastic deformation produces differential analog voltages proportional to applied loads.
Sensor used in this project:
- Family: ATI Delta
- Electronics: DAQ analog
- Outputs: 6 differential analog channels
- Typical range: ±5 V or ±10 V (calibration dependent)
The sensor is associated with two factory ATI calibrations, each with its own matrix, range, and noise characteristics.
| Serial | Calibration | Full Scale | Output Range |
|---|---|---|---|
| FT6375 | SI-165-15 | ±165 N / ±15 Nm | ±5 V |
| FT6374 | SI-330-30 | ±330 N / ±30 Nm | ±10 V |
Each calibration includes:
- 6×6 calibration matrix
- cross-axis coupling
- scale factors
- calibration certificate
Resources/
├─ FT6374.cal
├─ FT6374 Calibration Certificate.pdf
├─ FT6375.cal
└─ FT6375 Calibration Certificate.pdf
.calfiles are sensor- and serial-number specific and must never be mixed.
Strain Gage Raw ADC
↓
24-bit DINT (±8 388 607)
↓
Voltage Conversion
↓
Bias Subtraction
↓
Calibration Matrix / Scale Factor
↓
Force / Torque Vector
↓
Tool Frame Transform
Each strain gage channel (SG0…SG5) is acquired using Beckhoff AI modules:
- EL3602 or ELM3704
- Range: ±10 V
- Resolution: 24-bit
- PLC value:
DINT
Mapping:
SG_Raw = ±8 388 607 → ±10.0 V
Voltage conversion:
SG_Volt = SG_Raw × (10.0 / (2^23 − 1))
Display Scaling in TwinCAT is visual only. The PLC always receives raw integer values.
Examples:
Raw = (2^23 − 1) → +10.0 V
Raw = 0 → 0.0 V
Raw = −(2^23) → −10.0 V (hardware limit)
Raw = 8,388,607 → +10.0 V
Raw = 0 → 0.0 V
Raw = -8,388,608 → -10.0 V
ATI defines a 6×6 calibration matrix:
[ Fx ] [ c00 c01 c02 c03 c04 c05 ] [ SG0 ]
[ Fy ] [ c10 c11 c12 c13 c14 c15 ] [ SG1 ]
[ Fz ] = [ c20 c21 c22 c23 c24 c25 ] [ SG2 ]
[ Tx ] [ c30 c31 c32 c33 c34 c35 ] [ SG3 ]
[ Ty ] [ c40 c41 c42 c43 c44 c45 ] [ SG4 ]
[ Tz ] [ c50 c51 c52 c53 c54 c55 ] [ SG5 ]
- SG values are voltages
- Output units are N / Nm
- Matrix is not normalized
- Cross-axis coupling is intentional and required
Bias represents:
- tool mass
- gravity
- mounting offsets
- electronics drift
Bias must be removed before matrix multiplication.
Each calibration has its own independent bias vector:
Bias_6374[6]Bias_6375[6]
Bias acquisition:
- Trigger tare
- Average N samples
- Store into calibration-specific bias
Correction:
SG_Volt − Bias
Complete processing pipeline:
-
Read Raw ADC Values (DINT)
-
Convert to Volts:
SG_Volt = SG_Raw × (10.0 / (2^23 − 1)) -
Compute Runtime Matrix using Calibration Matrix and Scale:
Runtime_Matrix[i,j] = CalibrationMatrix[i,j] / CalibrationScale[i]; -
Subtract Bias and Compute FT Vector in N / Nm:
FT = RuntimeMatrix * (SG_Volt − Bias)
This is identical to ATI’s official computation flow.
The project implements a full 6-DOF wrench transformation:
- Rotation: Rx, Ry, Rz
- Translation: r = (dx, dy, dz)
Equations:
F' = R · F
T' = R · T − r × (R · F)
Rotation order:
R = Rz · Ry · Rx
This allows reporting forces/torques at the tool center point (TCP) instead of the sensor origin.
The sensor uses a DB26 connector with fully differential analog outputs.
- SGx Output → AI+
- SGx Reference → AI−
- Twisted pairs for each channel
- Shield connected to ground
Official ATI wiring documentation:
Resources/
├─ DB26 Connector.png
└─ Cable Scheme DB26.pdf
True differential inputs are mandatory for noise immunity and accuracy.
This project supports two Beckhoff acquisition options:
- EL3602 (standard 24-bit EL36xx analog input)
- ELM3704 (measurement-technology terminal)
Important: In TwinCAT, Display Scaling is for engineering-unit visualization. The PLC process data is still the raw ADC value unless you explicitly implement scaling in software.
Selected settings (TwinCAT):
- Measuring range: ±10 V (Display Scaling ±10 V)
- PDO process data: DINT raw value (24-bit incl. sign, represented in 32-bit PDO) (download.beckhoff.com)
CoE (CANopen over EtherCAT) parameters
0x8000:02 Presentation(Ch.1) =2→ right adjust 24 bit (download.beckhoff.com)0x8010:02 Presentation(Ch.2) =2→ right adjust 24 bit (download.beckhoff.com)
With right-adjust 24-bit presentation, the measured value is output with 24-bit resolution. Beckhoff’s documentation shows the full-scale mapping for ±10 V where the output value is 0x007F_FFFF at +10 V and 0xFF80_0000 at −10 V (24-bit value placed in a 32-bit field). (download.beckhoff.com)
Raw → Volts conversion (software)
V = Raw × (V_range / (2^23 − 1))
Where V_range = 10.0 V for ±10 V.
Reference configuration used in this project:
- Mode: Oversampling 1 (24-bit) – DC-Synchron (input based)
- Interface: U ±10 V
- Sensor Supply: External Supply
- Filter1: None
- Filter2: None
- Decimation: 1
- Integrator/Differentiator: Off
- Scaler: Extended Range (Default)
- Extended Functions: Disabled
- Display Scaling: ±10 V (visualization only)
Notes on EtherCAT/CoE objects (ELM370x family) ELM370x terminals expose measurement configuration and process data via manufacturer-specific CoE objects, including:
0x60n1(PAI Samples, 24-bit)0x60n6(PAI Synchronous Oversampling)0x80n0(PAI Settings)0x80n1/0x80n3(Filter 1 / Filter 2 settings)0x80n6(Scaler settings) These object groups are documented by Beckhoff for the ELM370x family. (infosys.beckhoff.com)
ATI FT Sensor/
├─ PLC/
│ ├─ DUTs/
│ ├─ GVLs/
│ ├─ POUs/
│ │ └─ MAIN.TcPOU
│ └─ PlcTask.TcTTO
├─ Resources/
│ ├─ *.cal
│ ├─ calibration certificates
│ └─ wiring diagrams
└─ FT Channels/
- Never linear-scale volts to Newtons
- Always use the full 6×6 matrix
- Bias must be applied before matrix multiplication
- Each calibration is a different sensor behavior
- ATI DAQ Force/Torque Manual – 9620-05-DAQ
- ATI Transducer Installation & Operation Manual – 9620-05 (Transducer Section)
- ATI Calibration Certificates (see
Resources/)
✔ Sensor identified as ATI Delta (DAQ analog)
✔ Calibrations FT6374 / FT6375 validated
✔ Matrix pipeline verified
✔ Bias handling per calibration implemented
✔ Tool transform validated
✔ Ready for ABB GoFa integration
Author Davide Ferrari