Python库,用于驱动Pololu Tic步进电机控制器
项目描述
ticlib
是一个纯Python库,用于驱动 Pololu Tic步进电机控制器。
此库支持Python3的串行、I²C和USB连接;以及Micropython的串行和I²C。
示例代码
from src.ticlib import TicUSB
from time import sleep
tic = TicUSB()
tic.halt_and_set_position(0)
tic.energize()
tic.exit_safe_start()
positions = [500, 300, 800, 0]
for position in positions:
tic.set_target_position(position)
while tic.get_current_position() != tic.get_target_position():
sleep(0.1)
tic.deenergize()
tic.enter_safe_start()
安装
您可以通过运行以下命令来安装 ticlib
库:
pip install ticlib
可用控制器
串行
使用Python 3和pyserial库的示例
import serial
from src.ticlib import TicSerial
port = serial.Serial("/dev/ttyS0", baud_rate=9600, timeout=0.1, write_timeout=0.1)
tic = TicSerial(port)
使用Micropython的示例
from machine import UART
from ticlib import TicSerial
port = UART(0, baudrate=9600, timeout=100)
tic = TicSerial(port)
TicSerial
的实例化参数
port
(必需):用于与Tic通信的串行端口。device_number
(可选):您想要控制的设备号。如果您有多个设备连接到串行线,请使用此参数。默认为None
。crc_for_commands
(可选):如果设置为True
,则库将为发送到Tic的每个命令附加一个CRC字节。如果您的Tic的“启用命令CRC”设置已开启,请设置为True
。默认为False
。crc_for_responses
(可选):如果设置为True
,则库将期望每个由Tic返回的响应的末尾都有一个CRC字节。如果您的Tic的“启用响应CRC”设置已开启,请设置为True
。默认为False
。
有关更多详细信息,请参阅Pololu关于串行命令编码的官方文档。
I²C
使用Python 3和smbus2库的示例。
from smbus2 import SMBus
from ticlib import TicI2C, SMBus2Backend
bus = SMBus(3) # Represents /dev/i2c-3
address = 14 # Address of the Tic, that is its device number
backend = SMBus2Backend(bus)
tic = TicI2C(backend)
使用Micropython的示例
from machine import I2C
from ticlib import TicI2C, MachineI2CBackend
i2c = I2C(1) # ID of your I2C peripheral
address = 14 # Address of the Tic, that is its device number
backend = MachineI2CBackend(i2c, address)
tic = TicI2C(backend)
TicI2C
的实例化参数
backend
(必需):I²C后端。Python 3的可用选项是SMBus2Backend
,而Micropython的可用选项是MachineI2C
。
注意:如果您使用Raspberry Pi,请确保遵循Pololu文档中描述的解决方案。
更多详细信息,请参阅Pololu官方关于I²C命令编码的文档。
USB
USB控制器依赖于pyusb库。
示例
from src.ticlib import TicUSB
tic = TicUSB()
TicUSB
的实例化参数
product
(可选):您的Tic的USB产品ID。如果为None
,设备将自动检测。如果您的计算机连接了多个Tic设备,请使用此参数。可用的选项包括:TIC_T825
(0x00b3
),TIC_T834
(0x00b5
),TIC_T500
(0x00bd
),TIC_N825
(0x00c3
),TIC_T249
(0x00c9
),以及TIC_36v4
(0x00cb
)。默认为None
。serial_number
(可选):您的Tic的串行号(字符串格式)。如果为None
,设备将自动检测。如果您的计算机连接了多个Tic设备,请使用此参数。默认为None
。
更多详细信息,请参阅Pololu官方关于USB命令编码的文档。
命令
可用命令
tic.clear_driver_error()
tic.deenergize()
tic.energize()
tic.enter_safe_start()
tic.exit_safe_start()
tic.go_home(value)
tic.halt_and_hold()
tic.halt_and_set_position(value)
tic.reset()
tic.reset_command_timeout()
tic.set_agc_option(value)
tic.set_current_limit(value)
tic.set_decay_mode(value)
tic.set_max_acceleration(value)
tic.set_max_deceleration(value)
tic.set_max_speed(value)
tic.set_starting_speed(value)
tic.set_step_mode(value)
tic.set_target_position(value)
tic.set_target_velocity(value)
更多详细信息,请参阅官方命令参考。
变量
可用变量
# General status -------------------------------------
tic.get_error_occured()
tic.get_error_status()
tic.get_misc_flags()
tic.get_operation_state()
# Step planning ---------------------------------------
tic.get_acting_target_position()
tic.get_current_position()
tic.get_current_velocity()
tic.get_max_acceleration()
tic.get_max_deceleration()
tic.get_max_speed()
tic.get_planning_mode()
tic.get_starting_speed()
tic.get_target_position()
tic.get_target_velocity()
tic.get_time_since_last_step()
# Other -----------------------------------------------
tic.get_analog_reading_rx()
tic.get_analog_reading_scl()
tic.get_analog_reading_sda()
tic.get_analog_reading_tx()
tic.get_current_limit()
tic.get_decay_mode()
tic.get_device_reset()
tic.get_digital_readings()
tic.get_encoder_position()
tic.get_input_after_averaging()
tic.get_input_after_hysteresis()
tic.get_input_after_scaling()
tic.get_input_state()
tic.get_pin_states()
tic.get_rc_pulse()
tic.get_step_mode()
tic.get_vin_voltage()
tic.get_uptime()
# T249-only -------------------------------------------
tic.get_agc_bottom_current_limit()
tic.get_agc_current_boost_steps()
tic.get_agc_frequency_limit()
tic.get_agc_mode()
tic.get_last_motor_driver_error()
# 36v4-only -------------------------------------------
tic.get_last_hp_driver_errors()
更多详细信息,请参阅官方变量参考。
设置
可用设置
tic.settings.get_control_mode()
# Miscellaneous -------------------------------------------------
tic.settings.get_auto_clear_driver_error()
tic.settings.get_disable_safe_start()
tic.settings.get_ignore_err_line_high()
tic.settings.get_never_sleep()
tic.settings.get_vin_calibration()
# Soft error response -------------------------------------------
tic.settings.get_current_limit_during_error()
tic.settings.get_soft_error_position()
tic.settings.get_soft_error_response()
# Serial --------------------------------------------------------
tic.settings.get_serial_7bit_responses()
tic.settings.get_serial_14bit_device_number()
tic.settings.get_serial_alt_device_number()
tic.settings.get_serial_baud_rate()
tic.settings.get_serial_command_timeout()
tic.settings.get_serial_crc_for_commands()
tic.settings.get_serial_crc_for_responses()
tic.settings.get_serial_device_number()
tic.settings.get_serial_enable_alt_device_number()
tic.settings.get_serial_response_delay()
# Encoder -------------------------------------------------------
tic.settings.get_encoder_postscaler()
tic.settings.get_encoder_prescaler()
tic.settings.get_encoder_unlimited()
# Input conditioning --------------------------------------------
tic.settings.get_input_averaging_enabled()
tic.settings.get_input_hysteresis()
# RC and analog scaling -----------------------------------------
tic.settings.get_input_invert()
tic.settings.get_input_max()
tic.settings.get_input_min()
tic.settings.get_input_neutral_max()
tic.settings.get_input_neutral_min()
tic.settings.get_input_scaling_degree()
tic.settings.get_output_max()
tic.settings.get_output_min()
# Pin Configuration ---------------------------------------------
# SCL
tic.settings.get_scl_active_high()
tic.settings.get_scl_config()
tic.settings.get_scl_enable_analog()
tic.settings.get_scl_enable_pull_up()
tic.settings.get_scl_kill_switch()
tic.settings.get_scl_limit_switch_forward()
tic.settings.get_scl_limit_switch_reverse()
tic.settings.get_scl_pin_function()
# SDA
tic.settings.get_sda_active_high()
tic.settings.get_sda_config()
tic.settings.get_sda_enable_analog()
tic.settings.get_sda_enable_pull_up()
tic.settings.get_sda_kill_switch()
tic.settings.get_sda_limit_switch_forward()
tic.settings.get_sda_limit_switch_reverse()
tic.settings.get_sda_pin_function()
# TX
tic.settings.get_tx_active_high()
tic.settings.get_tx_config()
tic.settings.get_tx_enable_analog()
tic.settings.get_tx_kill_switch()
tic.settings.get_tx_limit_switch_forward()
tic.settings.get_tx_limit_switch_reverse()
tic.settings.get_tx_pin_function()
# RX
tic.settings.get_rx_active_high()
tic.settings.get_rx_config()
tic.settings.get_rx_enable_analog()
tic.settings.get_rx_kill_switch()
tic.settings.get_rx_limit_switch_forward()
tic.settings.get_rx_limit_switch_reverse()
tic.settings.get_rx_pin_function()
# RC
tic.settings.get_rc_active_high()
tic.settings.get_rc_config()
tic.settings.get_rc_kill_switch()
tic.settings.get_rc_limit_switch_forward()
tic.settings.get_rc_limit_switch_reverse()
# Motor ---------------------------------------------------------
tic.settings.get_current_limit()
tic.settings.get_decay_mode()
tic.settings.get_invert_motor_direction()
tic.settings.get_max_acceleration()
tic.settings.get_max_deceleration()
tic.settings.get_max_speed()
tic.settings.get_starting_speed()
tic.settings.get_step_mode()
# Homing --------------------------------------------------------
tic.settings.get_auto_homing()
tic.settings.get_auto_homing_forward()
tic.settings.get_homing_speed_away()
tic.settings.get_homing_speed_towards()
# T249-only -----------------------------------------------------
tic.settings.get_agc_bottom_current_limit()
tic.settings.get_agc_current_boost_steps()
tic.settings.get_agc_mode()
tic.settings.get_agc_frequency_limit()
# 36v4-only -----------------------------------------------------
tic.settings.get_hp_current_trip_blanking_time()
tic.settings.get_hp_decay_mode()
tic.settings.get_hp_enable_adaptive_blanking_time()
tic.settings.get_hp_enable_unrestricted_current_limits()
tic.settings.get_hp_fixed_off_time()
tic.settings.get_hp_mixed_decay_transition_time()
目前不支持修改设置。
更多详细信息,请参阅官方设置参考。
版本历史
0.2.2(2021年5月14日)
- 修复了针对Micropython的一些错误。
0.2.1(2021年5月4日)
- 问题#1:修复了阻止多个Tic控制器同时工作的错误。
0.2.0(2021年4月20日)
- 增加了对Micropython(串行和I2C)的支持。
0.1.0(2021年4月18日)
首次发布。
运行测试
对于Python
docker run -it -v ${PWD}:/base -w /base python python /base/tests/tests.py
对于Micropython
docker run -it -v ${PWD}:/base -w /base mitchins/micropython-linux micropython /base/tests/tests.py
项目维护者须知
要发布此库的新版本
- 更新
src/ticlib/__init__.py
中的版本号 - 在上面的“版本历史”部分中添加发行说明。
- 创建并推送形式为
v<版本号>
的标签:例如v.0.2.1
- 如果存在,请删除现有的
dist/
目录。 - 运行:
python3 -m build
- 运行:
python3 -m twine upload dist/*
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
ticlib-0.2.2.tar.gz (14.6 kB 查看散列)
构建分发
ticlib-0.2.2-py3-none-any.whl (12.1 kB 查看散列)
关闭
ticlib-0.2.2.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3ebdbee27629992d46d0fb0feb18dc51e790363b35b174c87de00ce5f6ed7419 |
|
MD5 | b6f8cb97357aafbf1fde0bcd2662e1d5 |
|
BLAKE2b-256 | cd41c77969faae19f61b58b0a41c3d6c2a9013c8f3bc2899f4ea3f023855cea0 |