--- title: Motor Control description: DiSEqC 1.2 positioner motor control with USALS GotoX, stored positions, and live signal feedback for dish alignment. --- import { Tabs, TabItem, Steps, Aside, Badge } from '@astrojs/starlight/components'; Command-line tool for driving a DiSEqC 1.2 positioner motor through the SkyWalker-1. Supports continuous jog, stored positions, USALS GotoX calculations, and an interactive keyboard-driven mode with live signal feedback for hands-free dish alignment. ## Usage ```bash title="Interactive motor jog with live signal" sudo python3 tools/motor.py interactive ``` ```bash title="Drive to a stored position" sudo python3 tools/motor.py goto 3 ``` ```bash title="USALS GotoX (Es'hail-2 from central Texas)" sudo python3 tools/motor.py gotox --sat 25.9 --lon -97.5 ``` ## Subcommands | Command | Description | |---------|-------------| | `halt` | Emergency stop the motor | | `east [--steps N]` | Drive east (continuous or N steps) | | `west [--steps N]` | Drive west (continuous or N steps) | | `goto SLOT` | Recall stored position (0 = reference) | | `store SLOT` | Store current position in slot (1-255) | | `gotox --sat LON --lon LON` | USALS GotoX with calculated rotation angle | | `limit east\|west` | Set east or west movement limit | | `nolimits` | Disable movement limits | | `raw HEX` | Send raw DiSEqC bytes (e.g. `E0 31 60`) | | `interactive` | Keyboard-driven jog with live signal display | ## Interactive Mode The `interactive` subcommand turns the terminal into a real-time motor controller optimized for dish alignment. No menus, no prompts — just directional input with instant signal feedback. | Key | Action | |-----|--------| | Left / h | Jog west | | Right / l | Jog east | | Space | Halt motor | | 19 | Recall stored position | | s | Store current position (prompts for slot) | | g | USALS GotoX (prompts for coordinates) | | q | Quit (motor auto-halts on exit) | Signal readings update at ~2 Hz, showing SNR, AGC power, and lock status. The display uses ANSI color to distinguish locked (green) from unlocked (red) states. ### Safety Features - **30-second auto-halt** — continuous jog stops automatically after 30 seconds to prevent mechanical damage - **Exit handler** — motor is halted via `atexit` if the process terminates unexpectedly - **Limit enforcement** — DiSEqC 1.2 hardware limits are respected when set ## USALS GotoX The `gotox` subcommand calculates the optimal motor rotation angle using the USALS (Universal Satellites Automatic Location System) algorithm and sends a DiSEqC 1.3 GotoX command. ```bash title="Calculate and drive to Es'hail-2 (QO-100)" sudo python3 tools/motor.py gotox --sat 25.9 --lon -97.5 # Output: Angle: 72.4 deg East — sending GotoX ``` The angle calculation accounts for: - Observer longitude (negative = West) - Satellite longitude (positive = East) - Geostationary orbit geometry at 35,786 km altitude ## DiSEqC 1.2 Protocol All motor commands use DiSEqC 1.2 (EN 50494) framing transmitted through the SkyWalker-1's Manchester encoder. The firmware generates the 22 kHz modulated waveform with correct timing: | Command | DiSEqC Bytes | Description | |---------|-------------|-------------| | Halt | `E0 31 60` | Stop motor movement | | Drive East | `E0 31 68 00` | Continuous east (00 = no step limit) | | Drive West | `E0 31 69 00` | Continuous west | | Store Position | `E0 31 6A NN` | Save current position to slot NN | | Goto Position | `E0 31 6B NN` | Drive to stored position NN | | Set East Limit | `E0 31 66 00` | Set current position as east limit | | Set West Limit | `E0 31 66 01` | Set current position as west limit | | Disable Limits | `E0 31 63` | Remove movement limits | | GotoX | `E0 31 6E HH LL` | USALS rotation (angle encoded as 2 bytes) | The `raw` subcommand accepts any hex string for advanced DiSEqC messaging beyond the built-in commands. ## See Also - [SkyWalker TUI — Motor Screen](/tools/tui/#motor-control) — graphical motor control with signal gauge - [DiSEqC Protocol](/lnb-diseqc/diseqc-protocol/) — protocol specification and Manchester encoding details - [QO-100 DATV Reception](/guides/qo100-datv/) — using motor control for QO-100 dish pointing