Sterowanie silnikiem krokowym bipolarnym przez Pololu Tic T249 z obsługą wyłączników krańcowych i procedury homing
Project description
Tic T249 Stepper Motor Controller
Sterowanie silnikiem krokowym bipolarnym przez Pololu Tic T249 (TB67S249FTG) z pełną obsługą wyłączników krańcowych (limit switches) i procedury homing.
Tryby obsługi krańcówek
1. Tryb tic — sprzętowy (zalecany)
Wyłączniki podłączone bezpośrednio do pinów Tic T249 (SCL, SDA, TX, RX lub RC). Konfiguracja pinów w Tic Control Center → Advanced → Pin configuration. Wymaga firmware ≥1.06.
Tic automatycznie blokuje ruch w kierunku aktywnego wyłącznika i obsługuje sprzętową procedurę homing (go_home → jedzie do krańcówki → cofa → pozycja = 0).
Tic T249 Pin TX ─── Limit Switch Forward ─── GND
Tic T249 Pin RX ─── Limit Switch Reverse ─── GND
2. Tryb gpio — programowy (Raspberry Pi)
Wyłączniki podłączone do dowolnych pinów GPIO, monitorowane z przerwaniami. Natychmiastowe zatrzymanie silnika (emergency stop) przy aktywacji krańcówki w kierunku ruchu.
RPi GPIO 17 ─── Limit Switch Forward ─── GND (pull-up wewnętrzny)
RPi GPIO 27 ─── Limit Switch Reverse ─── GND (pull-up wewnętrzny)
Wymaga gpiozero lub RPi.GPIO:
pip install gpiozero
Instalacja
sudo apt-get install libusb-1.0-0-dev
pip install -r requirements.txt
# Reguła udev
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1ffb", MODE="0666"' | \
sudo tee /etc/udev/rules.d/99-pololu-tic.rules
sudo udevadm control --reload-rules
Użycie — CLI
Homing (zerowanie na krańcówce)
# Homing sprzętowy Tic — jedź reverse aż limit switch, cofnij, pozycja=0
python tic_t249_controller.py home-reverse --limit-mode tic
# Homing forward
python tic_t249_controller.py home-forward --limit-mode tic
# Homing GPIO — piny BCM 17 (forward) i 27 (reverse)
python tic_t249_controller.py home-reverse --limit-mode gpio --gpio-fwd 17 --gpio-rev 27
# Z pliku konfiguracji
python tic_t249_controller.py home-reverse --config config.json
python tic_t249_controller.py home-reverse --config config-gpio.json
Wyznaczanie zakresu ruchu
# Jedź do reverse limit (pozycja=0), potem do forward limit → odczytaj zakres
python tic_t249_controller.py demo-range --limit-mode tic
Ruch z ochroną krańcówek
# Ruch do pozycji (Tic blokuje sprzętowo przy limit switch)
python tic_t249_controller.py move -p 5000 --limit-mode tic
# Ruch z soft limitami (przycina do zakresu - margin)
python tic_t249_controller.py move-safe -p 3000
# GPIO — emergency stop jeśli krańcówka aktywna w kierunku ruchu
python tic_t249_controller.py move -p 5000 --limit-mode gpio --gpio-fwd 17 --gpio-rev 27
Status krańcówek
python tic_t249_controller.py limit-status --limit-mode tic
python tic_t249_controller.py status --limit-mode tic
Pozostałe komendy
python tic_t249_controller.py demo-positions
python tic_t249_controller.py demo-velocity
python tic_t249_controller.py demo-homing --limit-mode tic
python tic_t249_controller.py velocity --speed 1000000 --duration 5
python tic_t249_controller.py home # ręczne zerowanie, bez krańcówek
Użycie — Python API
from tic_t249_controller import (
TicT249Controller, MotorConfig, LimitSwitchConfig,
StepMode, HomingDirection,
)
# --- Tryb Tic (sprzętowy) ---
config = MotorConfig(
current_limit_ma=1200,
step_mode=StepMode.SIXTEENTH,
limit_switches=LimitSwitchConfig(mode="tic"),
)
with TicT249Controller(config) as ctrl:
# Homing na reverse limit switch → pozycja = 0
ctrl.go_home(HomingDirection.REVERSE)
# Ruch — Tic automatycznie blokuje przy limit switch
ctrl.move_to(5000)
ctrl.wait_for_position()
# Status krańcówek
status = ctrl.get_limit_switch_status()
print(f"Forward: {status['forward_active']}")
print(f"Reverse: {status['reverse_active']}")
# Wyznacz zakres ruchu
travel = ctrl.find_travel_range()
print(f"Zakres: {travel} kroków")
# Ruch bezpieczny (z soft limitami)
ctrl.move_to_safe(travel // 2)
ctrl.wait_for_position()
# --- Tryb GPIO (Raspberry Pi) ---
config_gpio = MotorConfig(
limit_switches=LimitSwitchConfig(
mode="gpio",
gpio_forward_pin=17,
gpio_reverse_pin=27,
gpio_active_low=True, # NO switch z pull-up
homing_speed_towards=300_000,
homing_speed_away=100_000,
),
)
with TicT249Controller(config_gpio) as ctrl:
ctrl.go_home(HomingDirection.REVERSE)
ctrl.move_to(3000)
ctrl.wait_for_position() # przerywa jeśli krańcówka aktywna
Konfiguracja JSON
config.json (tryb Tic)
{
"limit_switches": {
"mode": "tic",
"homing_speed_towards": 500000,
"homing_speed_away": 200000,
"soft_limit_margin": 50
}
}
config-gpio.json (tryb GPIO)
{
"limit_switches": {
"mode": "gpio",
"gpio_forward_pin": 17,
"gpio_reverse_pin": 27,
"gpio_active_low": true,
"gpio_bounce_time_ms": 5,
"homing_speed_towards": 500000,
"homing_speed_away": 200000,
"soft_limit_margin": 50
}
}
Procedura homing — jak działa
Tryb Tic (sprzętowy)
- Komenda
go_home(direction)→ Tic jedzie w zadanym kierunku - Tic napotyka limit switch → natychmiastowe zatrzymanie (sprzętowe)
- Tic czeka 20 ms
- Tic cofa wolno aż limit switch się dezaktywuje
- Pozycja = 0, flaga "position uncertain" skasowana
Tryb GPIO (programowy)
- Jeśli już na krańcówce → najpierw odjazd
- Ruch wolny w kierunku krańcówki (
homing_speed_towards) - GPIO przerwanie →
halt_and_hold()(natychmiastowy stop) - Cofanie wolne (
homing_speed_away) aż GPIO zwolni halt_and_set_position(0)
Bezpieczeństwo
- Ctrl+C → bezpieczne deenergize (cewki wyłączone)
- GPIO emergency stop → natychmiastowe
halt_and_hold()przy krańcówce - Soft limity →
move_to_safe()przycina pozycję do zakresu ± margines - Nigdy nie odłączaj silnika przy zasilonym sterowniku
- Bez radiatora max ~1800 mA na cewkę
Licencja
Program: MIT (Softreck, softreck.dev) Zależność ticlib: BSD-2-Clause (Julien Phalip) — dozwolona komercyjnie
License
Apache License 2.0 - see LICENSE for details.
Author
Created by Tom Sapletta - tom@sapletta.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pololu-0.1.1.tar.gz.
File metadata
- Download URL: pololu-0.1.1.tar.gz
- Upload date:
- Size: 10.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
902da76eb12691bba4852b6f46e339f66f97b6374eb903d04043f1d4a8a8899b
|
|
| MD5 |
327eed67adcdc4e96acd983217233f32
|
|
| BLAKE2b-256 |
11d93703c28c0b83fe24e868743e25f81daefc1f2c1720a3ae1480ec60638df7
|
File details
Details for the file pololu-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pololu-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75e9eaf69ce5b4a0bea73183417021257788d90ed3c560fc0dbcea2e9ad3ce70
|
|
| MD5 |
ba42fa14abb16f8de658bfff5ae8be7d
|
|
| BLAKE2b-256 |
2b00d6a9e61c1852721978f44b8ed120cc1e45440dc18eba07d3925cd7716d9b
|