I’m currently looking for a solution for a machine at my work. I’ll try to simplify the issue but there is two shafts:a and b. Shaft a drives shaft b. I need the ability to shut the machine off if these shafts go out 1 or 2 degrees from one another. I was thinking two encoders on either end. I was wondering if an Arduino has the ability to look for differences in the two encoders and if they go out so far from one another it sends a 5v signal out. Is this possible? What type of encoder would you recommend? Thanks a lot for any input!
An alternative to quadrature encoders might be a magnet/hall sensor arrangement (or a mark and a reflective IR sensor) on each shaft. Calibrate to the difference in time when each sensor triggers during a revolution. Then if that time period changes by the amount or a 1 or 2 degree change send out your signal.
Thank you for the replies! I will look into quadrature encoders. Also, I’m assuming this system cannot be time based because shaft B is driven off shaft A by: a coupling with springs in it. If shaft B gets momentarily bound, (it will cause the shafts to go out of sync) then it will make it past the bind and the springs will force shaft to sync back with shaft A. Finding that blip is what the encoders are needed for. Any further input is greatly appreciated!
It’s currently running in such a way that doesn't allow them to go out of sync. The problem were trying solve is: these shafts are apart of a feeder that sometimes crushes parts and creates a reject. The way the machine is built there is no other way around that, it will happen sometimes. We want to create a way to catch these crushed parts. By allowing the main driver shaft to separate from the feeder wheel it creates a mechanical switch. (Crushed part pushes spring back because of increased resistance) This needs to be picked up in some way. I thought 2 encoders would do the trick. Shaft a is the driver, shaft b is the feeder wheel. Hopefully I’m describing this clear enough. Again thanks for any input!!!
If you are looking for a binding glitch on shaft B, why the need to reference it to shaft A? I would think that you have an encoder on B, and if the pulses do not arrive in the timing expected you raise the alarm.
Cattledog, I guess the timing expected would be referenced from shaft a because that is really the only thing to compare it to? The machine is driven from one motor on a vfd (speed changes depending on setup) driving different assemblies via gear reducers. Not sure how I would reference the machine speed accurately to register 1 or 2 degree difference? Like interfacing vfd speed through a gearbox to an arduino, I figured it would be easier and more accurate to have two encoders?... if an arduino can do that? I’m pretty clueless overall, these are really good responses!
I don't know if it's the best way, but you could put a slotted encoder wheel on each shaft with a single photointerrupter on each wheel. That'll give you a square wave from each wheel which you can examine for twist.
I don't follow your description of the main shaft separating from the feeder wheel. Are we talking about a flexible drive coupling (which makes sense with the 1 or 2 degrees mentioned) or does the drive de-couple?
Also, out of interest: How many parts are fed per minute? and how often do these crushings happen? What's the value of a solution?
Thinking about using just one encoder wheel, I guess we'd need to know more details about what the normal speed variation looks like compared to a crush event.
PS. I'm just thinking aloud, never done this sort of speed/torque measuring, but I do make 40mm encoder wheels with 28slots and read them up to 6000rpm in my trackball.
What did you have in mind for how you would mount them?
Let's think through a a quadrature encoder with 180 pulses/revolution. Using a 4x reading algorithm that will give 720 counts/revolution, or two counts per degree of rotation. At 30 rpm you will see 180 degrees/per second or 360 counts/second. Therefore, you would expect a pulse every 2778 microseconds.
At your speeds, an encoder with even higher resolution would be possible.
You read the encoder output counts with interrupts and keep a running total of counts, or the difference between two counts.
There may be several ways to implement a time out, but one I would use is to have a timer interrupt to read that count value every 3000 microseconds, and if the count did not increment by at least one, declare a jam.
You would certainly have to determine the normal variation shaft rotation speeds and count timing to set up your procedure.
What about absolute encoders? When the initial positions are set the *difference *between them will be X. Thereafter, if the value of X exceeds Y declare a fault.
I reckon we need a diagram of this machine showing the normal arrangement and the arrangement when the slippage can happen. Photos of the machine, or maybe a short YouTube video would also be a good idea.
The impression I have (from Reply #5) is that the two shafts are geared together but when something gets crushed one of the shafts is designed so it can move sideways (due to the crushed pressure) so that the gears become disengaged.
Haven’t put too much thought into mounting, I figured that would be the easy part. Maybe butt the ends of the shafts and make a coupling. Ideally it would be nice to go with #13 response. That way the relationship between speed and time is no longer a factor? (as described by #12). Speed would change (per setup) on this machine, and it would be great to not have to reprogram the Arduino to match that. I will look into absolute encoders. Again, thank you for the great responses!!!