跳转到主要内容

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_T8250x00b3),TIC_T8340x00b5),TIC_T5000x00bd),TIC_N8250x00c3),TIC_T2490x00c9),以及TIC_36v40x00cb)。默认为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 查看散列

上传时间: Python 3

由以下支持