Yet another iteration of nothing
Random header image... Refresh for more!

Category — DRO

Dynomotion KFLOP’s KmotionDef.h’s entries pertaining to encoders (2015 to current)

double Position;

  • // encoder, ADC, Resolver, reading

double invDistPerCycle;

  • // for stepper distance for one complete cycle (4 full steps)
  • // for brushless 3-4 phase encoder counts for one complete cycle
  • // (saved as reciprocal for speed)

Inv Dist Per Cycle applies to Stepper, 3 Phase, and 4 Phase motors.  For a stepper motor, the distance per cycle defines the distance that the commanded destination should change by for a motor coil to be driven through a complete sinusoidal cycle.  Parameter should be entered as the inverse (reciprocal) of the distance per cycle.  Stepper motors are most often characterized by shaft angle change per “Full Step”.  A motor coil is driven through a complete cycle every four – “Full Steps”.  See the following examples:

Example #1 : A mechanism moves 0.001″ for each full step of a step motor  It is desired for commanded distance to be in inches.

Result: One Cycle = 4 full steps = 0.004″,  Thus InvDistPerCycle = 1.0/0.004 = 250.0 (cycles/inch).  Commanding a move of 1.00 will generate 250 sine waves, or the equivalent of 1000 full steps, or one inch of movement..

Example #2 : InvDistPerCycle is left at the default value of 1.0

Result: Move units are in cycles.  Commanding a move of 50 will generate 50 sine waves, or the equivalent of 200 full steps, or one revolution of a 200 Step or 1.8 degree motor.

For 3 Phase or 4 Phase motors, Inv Dist Per Cycle represents the inverse of the distance for one complete commutation cycle.

Example #1 : A 3 phase motor/encoder has a 4096 count per revolution encoder which is used for position feedback and for motor commutation.  InputGain0 is set to 1.0 so position measurement remains as encoder counts.  The motor design is  such that the commutation goes through 3 complete cycles each motor revolution.

Result: One Cycle = 4096 counts/3.0  Thus InvDistPerCycle = 3.0/4096 = 0.000732421875.

Note that it is important to use a high degree of precision to avoid commutation errors after moving to very large positions (or at constant velocity for a long period of time).  KMotion maintains Inv Dist Per Cycle (as well as position) as a double precision (64 bit) floating point number for this reason (more than 70 years at 1 MHz would be required to have 1 count of error)

int InputChan0,InputChan1;

  • // Encoder or ADC channels to use

float InputOffset1,InputGain1;

  • // or for ADC, or (InputGain0=-1 reverses encoder)

signed char last_enc;

  • // last fpga encoder reading


  • // address to read/write encoder noise rejection filter value (0..255)


  • // noise rejection filter default value (100MHz/3/7/2 = 2MHz)

#define ENC_NOISE_ERR_ADD 0x08

  • // encoder sudden change by 2 error address

#define ENC_NOISE_ERR_BIT0 4

  • // encoder sudden change by 2 error bit for encoder 0

#define ENC_NOISE_ERR_BIT1 5

  • // encoder sudden change by 2 error bit for encoder 1

#define ENC_NOISE_ERR_BIT2 6

  • // encoder sudden change by 2 error bit for encoder 2

#define ENC_NOISE_ERR_BIT3 7

  • // encoder sudden change by 2 error bit for encoder 3

void EnableAxis(int ch);

  • // enable the Axis at the current encoder position

void Zero(int ch);

  • // Zero the Encoder Position and Current Commanded Position


  • // any write clears all encoder errors

#define SNAP_ENC 8

  • // (4) 16 bit Encoders (bit15=error 7-0=data)

#define SNAP_DIFF_IN 16

  • // 16 bits (15-8= Diff inputs 7-0=encoder inputs)

February 7, 2017   Comments Off on Dynomotion KFLOP’s KmotionDef.h’s entries pertaining to encoders (2015 to current)

Digital Read-Outs (DRO)

While my machine went right to CNC, and I use the integrated program for read out, there is a healthy environment for manual or precision DRO units.

Basic Categories

– Capacitance: lowest cost, lowest resolution, accuracy, and repeatablity

– Magnetic : middle, quadrature to achieve resolution. Can be cut and custom fit

– Optical/Glass: higher, direct reading, bulkier, cannot be shortened, can be affected by dust and coolant

Costs range from mild to extreme.

For this class of mini-mill, with the typical positional accuracy in ACME/transport grade screws, several claim the magnetics are good enough. However, to achieve the stated accuracy, they are quadrature units and interpolated. For true accuracy, Glass Scales are the way to go, but they have their own limtations; cost among them.


An excellent source of information on DRO`s in general, and the Android Open Source DRO project: TouchDRO (Wireless DRO)

Yuri`s Toys excellent primer on the differing types of scales : Selecting Scales for DRO

Home Machinist on same

I`m still converting my archives to web, so more to come.


January 10, 2015   Comments Off on Digital Read-Outs (DRO)