The communication is via a 4-wire mini USB connection (VDD, Gnd, Clk, Data).
The readhead passes over the scale tape reading the 3 tracks on a 10 Hz frequency and combines them into a 52-bit output Word transmitted LSB first. The OEM display processor would then take that data, do the bit-jitsu, and output a decimal position. The overflow isn't really a true overflow condition. Each of the 3 tracks are coded using a binary number sequence.
From O-scope testing, we determined the 3 tracks (referred to as Coarse, Mid, & Fine) were as follows:
Fine track - a 9-bit binary sequence, each increment being 0.01 mm long or 5.12 mm for a full cycle.
Mid track - an 8-bit binary sequence, each cycle being 16 cycles of the Fine track or 81.92 mm.
Coarse track - also an 8-bit binary sequence, each cycle being 16 Mid track cycles or 512 Fine track cycles with a maximum length of 131,072 mm in length. Any longer and the sequence would repeat and it would no longer be an Absolute scale.
Both the Coarse and Fine tracks are in sync, starting out at zero with the transitions aligning, hence when the Fine track goes from 111111111 to 000000000 (511 to 0), the Coarse track goes from 00000000 to 00000001 (0 to 1).
The Mid track, however, has its transitions offset from the other two tracks. We’ve concluded the Mid track is just used for noise correction of the other two tracks and is offset so all three tracks don't hit their transitions at the same time. The output position being a corrected combination of the Coarse and Fine tracks.
This is what gives each position a unique identifier over the max possible length that any one scale could be of 1,310.72 meters as any longer would result in a repeat and wouldn’t be unique.
The manufacturer cut the scales into various lengths less than the longest possible length (I think the longest sold was 34” or 36” long) so not all start with the Coarse and Fine tracks at zero. The OEM display had a function where you could set the “Absolute Zero” position anywhere along the length of the scale. It would just store the unique ID when you hit the button and then display the delta between the current position and the Absolute Zero position.
We’ve pretty much decoded everything except how the OEM displays handle the binary Coarse track jump. As stated before, if the track integers are handled as Unsigned, the position will jump when the Coarse track hits the recycle point (11111111 to 00000000). If integers are handled as Signed, the same happens at the Coarse track mid-point (01111111 to 10000000) where it goes from max positive to max negative (+65535 to -65536).
Since these are Chinese manufactured scales, it’s possible that the OEM displays were coded differently depending on if the scale contained either of these points. If it was cut short enough and the tape didn’t contain either of these points, it doesn’t matter how the integer is handled (signed or unsigned) as the output is linear. It’s only an issue if the tape contains one of these points. Here’s where I assume that no scale was cut that contained both of these points. The only way to confirm if they used different code handling for scales containing either of these points would be to have two scale of the same version (they made two, v3.1 & v4.3) each containing one of the points and swapping out the OEM displays and then seeing if a position jump occurred.
What we’re attempting to do is code an Arduino based controller that takes the output of 3 scales and transmits them to an App based DRO display called Touch DRO.
The problem arose when I discovered one of my scales contained the mid-point and another contained the recycle point. Worse was that they were different versions so the OEM displays were incompatible to the other scale (different resolutions), thus, I couldn’t confirm or disprove the use of different coding in the OEM displays. I'll post couple pic’s of the readheads and O-scope signal along with the coding in different posts as size is too big for single post.