Firmware/software feature suggestions for the tic family

Hello friends!

Been playing around with the TIC T825 and have really been loving it. I have a few things I think could be implemented entirely in software that would expand the capabilities of this thing even further, or at least be useful for me personally.

First, a few notes about my specific context and application, so you can get a feel for my thinking. I have a relatively small motor that I am running over it’s current rating in short bursts, and then de-energizing when it’s at rest so it doesn’t get super hot. Also, my setup has a brake.

  1. I’d love a way to de-energize the motor without putting it into an “error” state, especially where I have a brake I can rely on when it’s not moving.

  2. it would be awesome if I could configure one of the pins on the TIC to be a “brake trigger” line that could be set to drive high or low when the motor stopped. obviously this requires separate hardware- a relay or something to actually operate the brake, but it would still be super handy to have the TIC handle the logic.

  3. tying the above together, if there was a “motor with brake” mode for the TIC where it could set the brake trigger line and then de-energize the motor when the motor stopped, and then release the brake to move again, while not throwing itself into an error state or becoming uncertain of it’s position, that would be pretty cool.

  4. this one’s probably less likely to see release- a mode where the TIC would automatically raise the current limit to a configurable higher value for acceleration. I’d love to be able to tell the tic to give my motor an amp during acceleration and 500ma otherwise.

  5. would it be possible to add a mode where the step/direction pins were outputs, so it would be possible to use the tic as the interface and motion logic for acceleration, and speeds and stuff but wire it up to an external high power stepper driver.

Interested to hear your thoughts. The one’s id most like to see are 1-4. 5 was just something I thought of, not something I actually need.

Loving this driver!
cheers,
-Gordo

I’m back with more!

I’d like to be able to set both a max accel/decel and also a “working” accel/decel.

for example, I know through trial and error what my max accel is for my motor with given current, microstepping, etc. If I exceed that, I risk motor instability.

but then for a given motion, I might like to be able to set a “working” accel below that, based on any number of things, maybe even programmatically. in that case, I should be able to use a set accel command which would take precedence as long as the working accel wasn’t higher than the max. then maybe there should be a command to clear the working acceleration. in the case there is no working acceleration, the max would be used.

I guess my reasoning here is that “max accel” is something I think of as being a motor setup parameter, tuned to a given motor setup and set once and saved, but the acceleration for a given move is based on the motion the user is trying to create and should be something that is set freely and dynamically during operation.

currently, if I want to lower my accel for a move, I have to overwrite max accel on the tic, and then if I want to raise it again, my control software has to remember what the max safe accel is for my motor. It feels like that should be something that the controller remembers.

This same sort of thing already exists with speed. the motor config has a max speed that can’t be violated, but you can set a target speed lower for a given movement. if you set a target speed higer than max, you are safe because the TIC keeps track of max seperately.

sorry for the text wall. it’s late-ish and I kept doubting if I was being clear about what I meant or not.

cheers,
-Gordo

Even more!
I said before:

This same sort of thing already exists with speed. the motor config has a max speed that can’t be violated, but you can set a target speed lower for a given movement. if you set a target speed higer than max, you are safe because the TIC keeps track of max seperately.

This isn’t exactly true, since this only works in target velocity mode, not target position mode. I guess in my ideal world, I could have a motor tuned maximum parameter for speed and acceleration that were “sacred” and then also a settable “working” acceleration and speed, and I could then set a target position and the motor would move at my working speed and acceleration if I had set them, otherwise it would use the max values.

Still interested to hear your thoughts. Of course I understand my use case and needs may be different from what you’re targeting, but I wanted to mention these things as I think about them since it feels like what you’re building here is a super solid product that could be expanded in software to really own this kind of hobby robotics motion control

Hello, Gordo.

I am glad that you have been loving the Tic T825 stepper motor controller. Thank you for the feedback.

1: The Tic’s “De-energize” command does put it into an error state and causes the controller’s red LED to turn on. You might consider sending a “Set current limit” command to set the current limit to zero or something small, which would have a similar effect without being considered an error.

2: We will probably add scripting features in a future firmware update, which would let you control spare pins on the Tic (so you could control the brake manually from your software).

3 and 4: Generally speaking, it sounds like you want features for changing the current limit and pin states depending on whether the motor is stationary, accelerating, decelerating or moving at a steady speed. We will keep that in mind for future firmware updates. It might be tricky to do because people would probably want the current limit and the pin states to change some time before the motor starts moving, so that their system has a chance to react. This means that commands that cause the motor to start moving would need to be delayed.

5: The STEP and DIR pins are already outputs by default, so you could connect them to an external stepper driver. However, you would still need to supply power to the Tic’s VIN pin to prevent it from having a Low VIN error.

6: The Tic’s “Current limit”, “Max speed”, “Starting speed”, “Max acceleration”, and “Max deceleration” settings in the “Input and motor settings” tab are just defaults for the corresponding run-time values, and the run-time values can all be raised or lowered with the appropriate commands (and without overwriting the settings stored by the Tic). The Tic will not prevent the run-time values from exceeding the stored maximums, but that should be easy for you to do in your software. For example, you can use the Tic’s “Get setting” command to get the Tic’s settings from it, and then make sure you never set a working acceleration that exceeds the maximum reported by the Tic. The maximum speed is at offset 0x47, length 4. The maximum deceleration is at offset 0x4B, length 4. The maximum acceleration is at offset 0x4F, length 4. You could just issue one command at offset 0x47, length 12, to get all three of those variables.

Please let me know if you additional feedback or questions.

–David

hmm, great response. Thanks!

setting the current limit to zero should solve my de-energizing issue. As soon as I read that I remembered reading something like that in the documentation, and now I feel like an idiot. I’m really not sure how I could have read it and not realized it was exactly what I was looking for…

I am definitely looking forward to those scripting features you mentioned. It sounds like those would address my brake functionality.