Package: ticlib
ticlibis a pure-Python library to drivePololu Tic stepper motor controllers.This library supports serial, I²C, and USB connections for Python3; and serial and I²C for Micropython.Example codefromsrc.ticlibimportTicUSBfromtimeimportsleeptic=TicUSB()tic.halt_and_set_position(0)tic.energize()tic.exit_safe_start()positions=[500,300,800,0]forpositioninpositions:tic.set_target_position(position)whiletic.get_current_position()!=tic.get_target_position():sleep(0.1)tic.deenergize()tic.enter_safe_start()InstallationTheticliblibrary is hosted on PyPI and can be installed by running this command:pipinstallticlibAvailable controllersSerialExample using Python 3 and thepyseriallibrary:importserialfromsrc.ticlibimportTicSerialport=serial.Serial("/dev/ttyS0",baud_rate=9600,timeout=0.1,write_timeout=0.1)tic=TicSerial(port)Example using Micropython:frommachineimportUARTfromticlibimportTicSerialport=UART(0,baudrate=9600,timeout=100)tic=TicSerial(port)Instantiation parameters forTicSerial:port(required): Serial port used to communicate with the Tic.device_number(optional): Number of the device that you want to control. Use this if you have multiple devices
connected to your serial line. Defaults toNone.crc_for_commands(optional): IfTrue, the library will append a CRC byte to every command sent to the Tic. Set
this toTrueif your Tic's "Enable CRC for commands" setting is turned on. Defaults toFalse.crc_for_responses(optional): IfTrue, the library will expect a CRC byte at the end of every response returned
by the Tic. Set this toTrueif your Tic's "Enable CRC for responses" setting is turned on. Defaults toFalse.For more details, see Pololu's official documentation onserial command encoding.I²CExample using Python 3 and thesmbus2library.fromsmbus2importSMBusfromticlibimportTicI2C,SMBus2Backendbus=SMBus(3)# Represents /dev/i2c-3address=14# Address of the Tic, that is its device numberbackend=SMBus2Backend(bus)tic=TicI2C(backend)Example using Micropython:frommachineimportI2CfromticlibimportTicI2C,MachineI2CBackendi2c=I2C(1)# ID of your I2C peripheraladdress=14# Address of the Tic, that is its device numberbackend=MachineI2CBackend(i2c,address)tic=TicI2C(backend)Instantiation parameter forTicI2C:backend(required): The I²C backend. Available options areSMBus2Backendfor Python 3 andMachineI2Cfor
Micropython.Note: If you use a Raspberry Pi, make sure to follow the workaround described in thePololu documentation.For more details, see Pololu's official documentation onI²C command encoding.USBThe USB controller has a dependency on thepyusblibrary.Example:fromsrc.ticlibimportTicUSBtic=TicUSB()Instantiation parameters forTicUSB:product(optional): USB product ID for your Tic. IfNone, the device will be automatically detected. Use this if
multiple Tic devices are connected to your computer. The available options are:TIC_T825(0x00b3),TIC_T834(0x00b5),TIC_T500(0x00bd),TIC_N825(0x00c3),TIC_T249(0x00c9), andTIC_36v4(0x00cb). Defaults
toNone.serial_number(optional): The serial number (in string format) of your Tic. IfNone, the device will be
automatically detected. Use this if multiple Tic devices are connected to your computer. Default toNone.For more details, see Pololu's official documentation onUSB command encoding.Commands:Available commands: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)For more details, see the officialcommand reference.VariablesAvailable variables:# 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()For more details, see the officialvariable reference.SettingsAvailable settings: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 ---------------------------------------------# SCLtic.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()# SDAtic.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()# TXtic.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()# RXtic.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()# RCtic.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()Modifying settings is currently not supported.For more details, see the officialsettings reference.Version history0.2.2 (May 14, 2021)Fixed some bugs for Micropython0.2.1 (May 4, 2021)Issue #1: Fixed bug that prevented multiple Tic controllers from working at the same time.0.2.0 (April 20, 2021)Added support for Micropython with serial and I2C.0.1.0 (April 18, 2021)Initial release.Running the testsFor Python:dockerrun-it-v${PWD}:/base-w/basepythonpython/base/tests/tests.pyFor Micropython:dockerrun-it-v${PWD}:/base-w/basemitchins/micropython-linuxmicropython/base/tests/tests.pyNotes for project maintainersTo release a new version of this library:Update version number insrc/ticlib/__init__.pyAdd release notes in the "Version history" section above.Create and push tag of the form:v<VERSION_NUMBER>(e.g.v.0.2.1)Delete existingdist/directory, if any.Run:python3 -m buildRun:python3 -m twine upload dist/*