This device is an interface to read incremental encoder meanings with Modbus. It supports encoders from 100 to 1000PPR and interpolate position up to 4 times, so maximum resolutuion is 4000PPR.
It's tested on 1000PPR encoder and it reads correct values on about 1000RPMs on internal 8MHz ATtiny2313 RC oscillator, and about 2000PPM on 16MHz crystal.
This small attiny2313 module and LinuxCNC component allows you to connect almost any precision encoder into LinuxCNC and it works even if it has no Z phase output.
It allows your lathe execute G33, G33.1 (synchronized motion) and G76 (threading) canned cycles and use G96 (constant surface speed) spindle control strategy.
Device has slave ID 0x85. There are 6 16bit analog registers starting from reference address 0x00, containing (0)heartbeat, (1)current position, (2)position increment, (3)current speed in RPM, (4)current Z-index value and (5)encoder direction.
Device UART speed is 38400bps.
Go to ./linuxcnc and execute:
$ sudo make This will install component into your LinuxCNC.
Then you need this component in your HAL:
loadrt spindle_encoder addf spindle-encoder.0 servo-thread setp spindle-encoder.0.ppr 4096 net spindle-heartbeat spindle-encoder.0.heartbeat <= mb2hal.spindle-encoder.heartbeat.int net spindle-pos-in spindle-encoder.0.pos-in <= mb2hal.spindle-encoder.pos-in.float net spindle-pos-out spindle-encoder.0.pos-out => motion.spindle-revs net spindle-speed-rpm spindle-encoder.0.speed-rpm <= mb2hal.spindle-encoder.speed-rpm.int net spindle-speed spindle-encoder.0.speed-rps => motion.spindle-speed-in net spindle-index spindle-encoder.0.index-in <= mb2hal.spindle-encoder.index.int net spindle-index-ena spindle-encoder.0.index-enable <=> motion.spindle-index-enable net spindle-dir spindle-encoder.0.direction <= mb2hal.spindle-encoder.direction.int Also you'll need to load mb2hal module into userspace:
loadusr -W mb2hal config=modbus_config.ini Copy modbus_config.ini from ./linuxcnc into your lathe configuration directory. Write your serial port device to SERIAL_PORT option in that ini file. Correct SERIAL_DELAY_MS if you need.
