I have a 24v servo motor coupled to a 2,000 segment optical encoder that runs on 5v.
That's 2,000 "ticks" per revolution at it's base resolution. (Full quad reading allows 8,000 ticks per revolution, which I have no idea how a person could really USE! Egads that's tiny slices of a circle.)
It ALSO has a 'full-circle' index, a "Z" line.
That Z SEEMS to be coincident with A. Meaning that the clear slot in the rotor seems to be in the same place for both ONE of the A ticks and the only Z tick. I do not have an oscilliscope to verify this, but timestamping two different interrupts makes it seem like they do line up (one on A one on Z).
The motor runs at max 1075 RPM. So if I did the maths correctly that means there are 2,150,000 ticks per minute on the A/B lines plus 1075 ticks per minute on the Z line.
35,833.33-ish ticks per second on the A line.
17.9166-ish ticks per second on the Z line.
I have used sample code from a number of sources on both a Nano v3 and an Uno r3. I can't get counting to be accurate on either device, both lose ticks counting the A trigger and the coincidence of the A and Z ticks makes the interrupts 'stack' (both trigger almost instantaneously, but whichever was first gets processed and THEN the other gets processed...)
I do know that I can get IC's that will count for me, but there are MANY models and I do not have the ability to determine which would suit this situation the best.
Despite reading a great number of posts about encoders and the Arduino code to read them I still don't understand if the Nano or Uno COULD do this on their own at this speed.
GOAL:
- Accurately track all 2000 pulses per revolution at 1075 RPM.
- Accurately track FULL rotation pulses at 1075 RPM.
- Use full rotations as error-checking against the 2000 count.
- Provide error-checked count as an absolute count to external device.
- Provide resettable zero-point to external device (remotely reset the count).
So please, if you would, inform me about or direct me to proven methods and resources for achieving the above goals?