Motion Control Stack

The full motion-control stack from encoder to ROS 2 topic.

FOC firmware running at 400 Hz on STM32. ROS 2 / micro-ROS node pre-configured. MoveIt 2 SRDF files included. EtherCAT and CANopen on the same PCB. No middleware porting required from your side.

Architecture

FOC control loop architecture

Current sensor → Park/Clarke Transform → PI Controllers → SVPWM → BLDC Motor → Encoder feedback — all running on a single STM32 MCU at 400 Hz.

Firmware

FOC implementation specs

400 Hz
Control Loop Rate

Current control loop running at 400 Hz on STM32G474 (170 MHz Cortex-M4). Torque bandwidth sufficient for compliant contact and impact recovery.

19-bit
Encoder Resolution

Magnetic absolute encoder with 524,288 counts/rev. SPI interface with CRC error detection. No index pulse needed.

3× PWM
SVPWM Output

Space-vector PWM at 48 kHz carrier. Dead-time compensation and current ripple cancellation built-in.

<2 ms
Torque Step Latency

Torque command to physical output step latency under 2 ms. Verified on dyno with known inertia load.

CoE
CANopen over EtherCAT

Full CiA 402 motion profile. PDO mapping configurable via ESI file. Compatible with TwinCAT, SOEM, and LinuxCNC EtherCAT drivers.

OTA
Firmware Update

Over-the-air firmware updates via USB or EtherCAT bootloader. Signed firmware images, rollback on verification failure.

ROS 2 / micro-ROS

Native ROS 2 support. No driver writing.

Each Tendonkindle actuator ships with a pre-compiled micro-ROS node that publishes sensor_msgs/JointState and subscribes to std_msgs/Float64 torque commands. Launch files and example configurations for ROS 2 Humble and Iron are included.

MoveIt 2 SRDF files and example moveit_config packages for single-joint and multi-joint assemblies are available in the firmware download package.

ROS 2 Integration Guide
BASH — Launch micro-ROS agent
# Start micro-ROS agent on USB serial
ros2 run micro_ros_agent micro_ros_agent \
  serial --dev /dev/ttyUSB0 -b 921600

# List joint state topics
ros2 topic list | grep joint

# Echo joint states
ros2 topic echo /tk120/joint_states
YAML — Joint state publisher config
joint_state_broadcaster:
  ros__parameters:
    joints:
      - tk120_joint_0
    interface_names:
      - position
      - velocity
      - effort
Compatibility

Framework and protocol support

Framework / Protocol TK-120 TK-240 TK-480 Notes
ROS 2 Humble micro-ROS node included
ROS 2 Iron Same micro-ROS node
MoveIt 2 SRDF + config pkg included
EtherCAT (CoE) ESI file + CiA 402 profile
CANopen (CiA 402) Object dictionary included
SOEM (open-source EtherCAT) Example C code provided
TwinCAT 3 Partial Partial TK-480 fully tested; others via ESI
Gazebo / gz-sim URDF + transmission plugin

The Tendonkindle motion stack is not a generic motor controller framework. It is purpose-built for compact harmonic-drive BLDC joints running at high torque density — the kind used in humanoid robot limbs and exoskeleton frames. If your application is a standard industrial servo with point-to-point PLC control, TK firmware will be more than you need. If your application requires backdrivability, impedance control, and a real-time ROS 2 joint state topic, you are in the right place.

Ready to integrate Tendonkindle into your motion system?

Download Firmware Request Engineering Sample