Encoder feedback to correct geartrain backlash

Hello everyone, hopefully the picture comes thru as it’s just a text string right now. This is my first post.

I’m diving into my first Arduino project right now, and the two options I see are in the picture. I have seen stepper motors that have encoders on them, similar to servos, and drivers to run these. The hardware in mind has two gearboxes, which will have some backlash. My thought is rather than putting the encoder on the stepper, put the encoder on the output of the gearbox so the stepper will correct for the error or backlash in the geartrain. So if you want the encoder to move 1000 pulses but it only moves 990, the driver (or board, I don’t know) will tell the stepper to go another 10 pulses until the output encoder is at 1000 pulses as required.

Hopefully this makes sense, but I may be barking up the wrong tree. Thanks for your input everyone.

I can agree that a stepper motor shouldn't need an encoder. Not unless it is slipping. But will you be able to get an encoder with enough resolution to measure the backlash?

It should be easy to compensate. Many 3D printers or CNC machines use a contact to detect exact axis. All you need is to have a calibration function with an electrical contact on the part of your system that matters. Activate until contact made, reverse til contact lost. Do in both directions and you will know exactly how much you need to calibrate for

You could do all kinds of clever things to average for offerente speeds etc.

I agree with you…I think the stepper will go the correct amount of pulses, I’m worried about the backlash in the gears though. If I put an encoder on the output, it will make the stepper adjust its position until the output is where it needs to be.

I hadn’t thought about it that way…if backlash is always 20 pulses, I could correct for that. Add 20 in one direction and subtract 20 in the other. Thanks.

You should not need to double check each time. Just run a calibration. You could run it at the start of every process or once a week but once done why would the backlash change significantly.

It is coded the same as a button and would require a single pin on the arduino and no external kit other than a very basic contact

I wouldn’t be worried about the geartrain changing per se, but I feel like depending on the load (light load=Very little deflection, heavy load=measurable deflection) if possible I would like to have that correction real time to be as accurate as possible. I have a Portenta H7 on the way so hopefully that will be fast enough to handle this. I guess my bigger question is do I get one of the drivers for the “servo” type stepper driver for motors with an onboard encoder, or do I just get a regular stepper driver?

Sounds like a hardware problem if you are getting that much backlash with normal working loads. Basically making something that is so poorly calibrated that you need to attach something better calibrated to correct it seems like a weird way of doing things. Next you will be calibrating your rotary encoder! :joy:

Everything will have some backlash and this may vary a bit but intermittent calibration should be fine, much simpler and require much less expensive parts. Of course you know requirements of your project that we don’t

Yes, the better the hardware, the better the result lol I think I can adjust most of the backlash out of the worm/wheel, but out of the box, the stepper/planetary has about a quarter degree of no-load backlash spec’d. and that’s mostly what I was trying to correct for.

Most likely the teeth of the gear are not correctly angled to match the worm. As you say the better the hardware the better the results. Or you get what you pay for.

Backlash is not a problem if you always approach the final setting from the same direction of rotation.

For "back ups", the usual fix is to overshoot backward by a sufficient angle, then approach the final setting in the forward direction of rotation.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.