Firmware v3.03.0: DiSEqC Manchester encoder (cmd 0x8D extended), parameterized spectrum sweep (0xBA), adaptive blind scan (0xBB), error code reporting (0xBC). All new function locals moved to XDATA to fit within FX2LP 256-byte internal RAM constraint. Motor control: DiSEqC 1.2 positioner with USALS GotoX, stored positions, interactive keyboard jog, 30-second safety auto-halt. QO-100 DATV: Es'hail-2 wideband transponder tools — LNB IF calculator, narrowband scan, tune, and TS-to-video pipe (ffplay/mpv). Carrier survey: six-stage pipeline (coarse sweep → peak detection → fine sweep → blind scan → TS sample → catalog). JSON catalog with differential analysis, QO-100 optimized mode, CSV/text export. TUI: F9 Motor screen (3-column layout with signal gauge), F10 Survey screen (Full Band + QO-100 tabs). Bridge, demo, and theme updated. Docs: motor.mdx, survey.mdx, qo100-datv.mdx guide, tui.mdx updated for 10 screens. Site builds 41 pages, all links valid.
108 lines
4.8 KiB
Plaintext
108 lines
4.8 KiB
Plaintext
---
|
||
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.
|
||
|
||
<Badge text="Requires custom firmware v3.03.0+" variant="caution" />
|
||
|
||
## 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 |
|
||
|-----|--------|
|
||
| <kbd>Left</kbd> / <kbd>h</kbd> | Jog west |
|
||
| <kbd>Right</kbd> / <kbd>l</kbd> | Jog east |
|
||
| <kbd>Space</kbd> | Halt motor |
|
||
| <kbd>1</kbd>–<kbd>9</kbd> | Recall stored position |
|
||
| <kbd>s</kbd> | Store current position (prompts for slot) |
|
||
| <kbd>g</kbd> | USALS GotoX (prompts for coordinates) |
|
||
| <kbd>q</kbd> | 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
|
||
|
||
<Aside type="caution">
|
||
The motor continues to drive until explicitly halted. If the SkyWalker-1 loses USB power during a jog, the motor will keep moving until it hits a hardware limit. Always set east/west limits before extended use.
|
||
</Aside>
|
||
|
||
## 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
|
||
|
||
<Aside type="tip">
|
||
For QO-100 reception from North America, the motor angle is extreme (~70+ degrees East). Verify your positioner has sufficient travel range before issuing the command.
|
||
</Aside>
|
||
|
||
## 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
|