feat: Pan/tilt gimbal servo driver for ST3215 bus servos (Issue #547) #559

Merged
sl-jetson merged 1 commits from sl-firmware/issue-547-gimbal-servo into main 2026-03-14 11:40:03 -04:00
Collaborator

Summary

  • servo_bus.c/h: half-duplex USART3 driver for ST3215 bus servos at 1 Mbps (PB10, open-drain); blocking TX/RX with CRC; read/write position, torque, speed; deg-to-raw conversion
  • gimbal.c/h: gimbal_t controller; 50 Hz self-throttled feedback poll, alternating pan/tilt at 25 Hz each; clamps to ±180°/±90° soft limits; tracks bus error rate
  • jlink.c: dispatch JLINK_CMD_GIMBAL_POS (0x0B, 6-byte payload); jlink_send_gimbal_state() for JLINK_TLM_GIMBAL_STATE (0x84, 16-byte frame)
  • main.c: servo_bus_init() + gimbal_init() on boot; gimbal_tick() every 1 ms; gimbal_updated handler; GIMBAL_STATE telemetry at 50 Hz co-scheduled with STATUS
  • config.h: SERVO_BUS_UART/PORT/PIN/BAUD, GIMBAL_PAN/TILT_ID, GIMBAL_TLM_HZ, GIMBAL_PAN/TILT_LIMIT_DEG
  • jlink.h: CMD_GIMBAL_POS, TLM_GIMBAL_STATE, jlink_tlm_gimbal_state_t (10 B), gimbal_updated/pan_x10/tilt_x10/speed fields in JLinkState

Closes #547

🤖 Generated with Claude Code

## Summary - servo_bus.c/h: half-duplex USART3 driver for ST3215 bus servos at 1 Mbps (PB10, open-drain); blocking TX/RX with CRC; read/write position, torque, speed; deg-to-raw conversion - gimbal.c/h: gimbal_t controller; 50 Hz self-throttled feedback poll, alternating pan/tilt at 25 Hz each; clamps to ±180°/±90° soft limits; tracks bus error rate - jlink.c: dispatch JLINK_CMD_GIMBAL_POS (0x0B, 6-byte payload); jlink_send_gimbal_state() for JLINK_TLM_GIMBAL_STATE (0x84, 16-byte frame) - main.c: servo_bus_init() + gimbal_init() on boot; gimbal_tick() every 1 ms; gimbal_updated handler; GIMBAL_STATE telemetry at 50 Hz co-scheduled with STATUS - config.h: SERVO_BUS_UART/PORT/PIN/BAUD, GIMBAL_PAN/TILT_ID, GIMBAL_TLM_HZ, GIMBAL_PAN/TILT_LIMIT_DEG - jlink.h: CMD_GIMBAL_POS, TLM_GIMBAL_STATE, jlink_tlm_gimbal_state_t (10 B), gimbal_updated/pan_x10/tilt_x10/speed fields in JLinkState Closes #547 🤖 Generated with Claude Code
sl-jetson added 1 commit 2026-03-14 10:38:59 -04:00
- servo_bus.c/h: half-duplex USART3 driver for Feetech ST3215 servos at
  1 Mbps; blocking TX/RX with CRC checksum; read/write position, torque
  enable, speed; deg<->raw conversion (center=2048, 4096 counts/360°)
- gimbal.c/h: gimbal_t controller; 50 Hz feedback poll alternating pan/tilt
  at 25 Hz each; clamps to ±GIMBAL_PAN/TILT_LIMIT_DEG soft limits
- jlink.c: dispatch JLINK_CMD_GIMBAL_POS (0x0B, 6-byte payload int16+int16+
  uint16); jlink_send_gimbal_state() for JLINK_TLM_GIMBAL_STATE (0x84)
- main.c: servo_bus_init() + gimbal_init() on boot; gimbal_tick() in main
  loop; gimbal_updated flag handler; GIMBAL_STATE telemetry at 50 Hz
- config.h: SERVO_BUS_UART/PORT/PIN/BAUD, GIMBAL_PAN/TILT_ID, GIMBAL_TLM_HZ,
  GIMBAL_PAN/TILT_LIMIT_DEG
- jlink.h: CMD_GIMBAL_POS, TLM_GIMBAL_STATE, jlink_tlm_gimbal_state_t (10 B),
  gimbal_updated/pan_x10/tilt_x10/speed volatile fields in JLinkState

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit 6409360428 into main 2026-03-14 11:40:03 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#559
No description provided.