Known issues¶
The faults in the STEPFOC firmware that are known and not yet fixed, and what to do until they are. The pages that describe each part say the same where it matters; this page collects them in one place. Which releases work together is in Versions and compatibility.
STEPFOC firmware¶
Seen in: 108.
| What happens | What to do | More | |
|---|---|---|---|
| KI-1 | The current limit of Send_Limits over CAN is used as sent, also above the driver's 2800 mA; only #Ilim over UART clamps it. |
Keep the current limit your host sends within the motor's rating and 2800 mA. | Send_Limits |
| KI-2 | Calibration sets the current limit to 1600 mA and leaves it there, whatever it was before; a #Save right after calibration stores the 1600 mA. |
After every calibration set #Ilim for your motor, then #Save. |
Calibration: save |
| KI-3 | The serial number is not read back from the EEPROM at power-up, so #SERNUM, Motor GUI and Send_Respond_Device_Info report 1, and every #Save writes that 1 over the stored number. |
Tell drivers apart by their CAN node ID. To keep a serial number stored, set it with #SERNUM before every #Save. |
Saving the configuration |
| KI-4 | For anyone reading or changing the source, the start values in common.h are not the factory defaults (the gripper and calibrated flags start at 1, the pole pairs at 50, Max_Vbus at 29500 mV). The EEPROM replaces them at power-up, so a running driver does not show them. |
Take the defaults from the Defaults page, which lists what #Default writes, or from Set_Default_config() in EEPROM.cpp. |
Defaults |
| KI-5 | While the E-stop bit of the last Send_gripper_data_pack (or #Gripstop 1) is 1, the driver raises the gripper E-stop error again on every control cycle, so Send_Clear_Error or #Clear alone does not clear it. |
Send a gripper frame with the E-stop bit 0 (or #Gripstop 0) first, then clear the error. |
Gripper mode: moving |
| KI-6 | The answer to a 5-byte Send_gripper_data_pack goes out before the driver has acted on the command, so its object detection and error bits are those of the moment before, for example 3 (position reached) from the previous move. | Judge the new move by the answers to later frames, or poll with an empty Send_gripper_data_pack. | Gripper mode: moving |
| KI-7 | A 5-byte Send_gripper_data_pack, Send_Clear_Error or #Clear during the gripper calibration stops it without a message and leaves its counters as they were, so the next calibration starts part way through; it may skip the opening or give up early. |
Send only empty status polls while the gripper calibrates (up to about 24 s). After an interrupted calibration, switch the driver off and on before you calibrate again. | Gripper mode: calibrating |
| KI-8 | The action bit in Respond_Gripper_data_pack is a copy of the last command's action bit; the driver never clears it, so it stays 1 after the move has ended. | Tell the end of a move by the object detection, 3 position reached, 1 or 2 stopped on an object. | Respond_Gripper_data_pack |
| KI-9 | Open loop (#Openloop, #gosteps) puts #Openv on the coils without a current limit; #Ilim does not apply. The default 5000 mV drives about 4.5 A through a 1.1 Ω coil. |
Set #Openv to the motor's rated current times its phase resistance first, and keep open-loop tests short. |
Open-loop stepping |
| KI-10 | The velocity error trips only above a fixed 30,000,000 ticks/s, about 1830 revolutions per second and far above any speed a stepper reaches; #Vlimit does not change it, so it does not catch a motor that runs away. |
Watch the speed in your host and send Send_Idle or Send_ESTOP when it is wrong. | Errors and recovery |
| KI-11 | Only motion frames and answered status requests reset the watchdog. Setting frames (gains, limits, Idle, Clear, Save) and UART commands do not, so a host that only configures the driver, or a terminal session with a saved watchdog, ends in a watchdog error. | While the watchdog runs, send a status request such as Send_Respond_Encoder_data within every watchdog period. Before you work over UART alone, set the watchdog to 0 over CAN and save. | Over CAN: a control loop |
| KI-12 | The driver error flag (Driver_error, Driver error in #Error) is never raised. STEPFOC reads no fault output of its driver stage, so a stage that shuts down for heat or a short only makes the motor lose torque, with no error. |
Watch the current and the position in your host; a commanded motor that goes limp points to the driver stage. Lower the current limit and give the board air. | Troubleshooting: the driver gets hot |
| KI-13 | #Dir stores a flag that #Info prints as Phase direction, but the control code does not use it: it does not reverse the motor. |
To make the other direction positive, negate the setpoints and the values you read back in your host. | Wiring: phase order and direction |
| KI-14 | #Mode prints Gripper mode in voltage-torque mode (#Uq), and nothing at all in gripper mode, HALL mode, the angle-offset search and open-loop steps (#gosteps). |
In those modes go by the command you sent last, not by #Mode. |
UART commands: status and utility |
| KI-15 | In idle the driver brakes, with the coils shorted, at every power-up and also with an error; #Coast is not kept by #Save. The current a turned motor drives through the shorted coils is not limited. |
Send #Coast (or Send_Settings) after every power-up if the motor must turn freely in idle, and do not let a load drive a braking motor fast. |
Braking in idle |
Something that is not here¶
Check the symptom tables first. If it is still not explained, Report a problem says what to include so it can be reproduced. A fixed issue stays on this page, under "Fixed", with the release that fixes it.
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