Skip to content

System

Identity, saving, resetting, errors, the watchdog, the heartbeat and the settings.

Send_CAN_ID

ID 11host → driver1 bytesPython: Send_CAN_ID()

Gives the driver a new node ID, 0 to 13 (the firmware accepts up to 15, but the bootloader reserves 14 and 15: a driver on one of those cannot be updated over CAN). Saving the configuration (Send_Save_config) also writes the ID into the bootloader's board ID. The driver answers to the new ID at once; the ID is kept over a power cycle only after Send_Save_config.

1 bytes

Byte Bit Field Type Meaning
0 ID unsigned 8-bit 0 to 13; 14 and 15 are accepted but reserved by the bootloader

The driver does not answer this command.


Send_ESTOP

ID 0host → driver0 bytesPython: Send_ESTOP()

Stops the motor and raises the E-stop error, which stays until Send_Clear_Error.

The driver does not answer this command.


Send_Idle

ID 12host → driver0 bytesPython: Send_Idle()

Puts the driver in idle mode (the motor coasts or brakes, see Send_Settings).

The driver does not answer this command.


Send_Save_config

ID 13host → driver0 bytesPython: Send_Save_config()

Writes the current configuration (gains, limits, calibration, CAN ID, heartbeat, watchdog, gripper flag) to the EEPROM, and the CAN ID into the bootloader's board ID. The idle behaviour of Send_Settings and the current loop bandwidth are not kept. It also writes the serial number held in RAM, which is 1 after a power-up unless #SERNUM set it, over the stored one.

The driver does not answer this command.


Send_Reset

ID 14host → driver0 bytesPython: Send_Reset()

Resets the driver. From firmware 105 the reset lands in the bootloader, which waits 2 s for a flashing host and then starts the firmware again; this is how a firmware update begins.

The driver does not answer this command.


Send_Clear_Error

ID 1host → driver0 bytesPython: Send_Clear_Error()

Clears the error flags and goes to idle. An error whose cause is still present comes straight back. A calibration error is cleared only by calibrating. A gripper E-stop comes back until the E-stop bit of Send_gripper_data_pack is 0 again.

The driver does not answer this command.


Send_Watchdog

ID 15host → driver5 bytesPython: Send_Watchdog()

Sets the watchdog: when the time runs out the driver reports a watchdog error and stops. Every valid motion frame (Send_data_pack_1, Send_data_pack_PD, Send_data_pack_HALL, Send_gripper_data_pack) and every status request the driver answers resets it; the setting frames (gains, limits, Idle, Clear, Save, Settings and Send_Watchdog itself) do not. 0 turns it off (the default). The action byte is stored but not acted on by this firmware: the driver always stops into its idle behaviour. Send_Save_config keeps the watchdog, and a kept watchdog runs from power-up: a host that sends no motion frame or status request within the time finds the driver in watchdog error, and clears it with Send_Clear_Error.

5 bytes

Byte Bit Field Type Meaning
0-3 Time unsigned 32-bit ms; 0 = off
4 Action unsigned 8-bit 0 idle, 1 hold, 2 brake (stored only)

The driver does not answer this command.


Send_Heartbeat_Setup

ID 30host → driver4 bytesPython: Send_Heartbeat_Setup()

Sets the heartbeat interval in ms; 0 turns the heartbeat off (the default). Kept by Send_Save_config.

4 bytes

Byte Bit Field Type Meaning
0-3 Interval unsigned 32-bit ms; 0 = off

Send_Settings

ID 35host → driver0 bytes

Sets boolean settings that have no command of their own: a mask byte says which settings the frame touches, a value byte gives their new values; settings outside the mask are left alone. Bit 0 is the idle behaviour: 1 brake (phases shorted), 0 coast. The setting is not kept by Send_Save_config: at power-up the driver brakes. Added in firmware 107. The Python library has no call for it yet.

2 bytes

Byte Bit Field Type Meaning
0 Mask unsigned 8-bit bit 0 = write the idle behaviour
1 Value unsigned 8-bit bit 0: 1 brake, 0 coast

The driver does not answer this command.


Send_Cyclic_command

ID 29host → drivernot implemented

Reserved. The firmware has no handler for this ID and the Python library's call does nothing.


Comments


Found a mistake on this page? Edit it on GitHub · Report it · Get help · This page as Markdown · llms.txt · The whole manual as PDF