Counter/Timer

cancel
Showing results for 
Search instead for 
Did you mean: 

Servo motor encoder pulses/counter data erroneous

Solved!
Go to solution

First off, I am very new to using labview.  I am trying to complete a project a former employee was working on.

For a quick background on what I am working with, I am using a NI DAQCard-6036E connected to a SC-2345.  The SC-2345 is then connected to a load sensor, Omron R88D servo driver, and an omron servo motor.  The servo motor has a incremental encoder with a resolution of around 2048 pulses per revolution.  My labview program includes a counter that records the data from the encoder on the servo motor.  I have been able to get accurate data when testing through the measurement and automation program by manually turning the motor.  Also when running through the specific DAQ assistant I am using for my counter, I am getting correct readings when manually turning motor.  Once I run my complete program, instead of getting 2048 pulses per revolution, I am getting between 34000-36000 pulses per revolution.  The most logical assumption is that I am getting vibration in the motor itself or some sort of noise is interfering with my signal.  I first attempted to change any possible settings through the omron servo driver that might reduce any vibration in the motor.  I attempting changing the rigidity settings, turning on and off the auto-tuning function, and a few other settings specified by the user manual that might cause vibration.  If I turn the rigidity settings as low as possible, I am able to get around 2000 pulses per revolution, but the data is very sporadic. Also, my equipment needs to be very rigid, and with the lowest rigidity setting for the servo driver, I am able to almost stop the motor with minimal force.  My equipment needs to be able to travel at a near constant speed with fluctuations of up to 200 N of force.  Any suggestions on which direction I should go in finding a countermeasure? 

 

Thanks

0 Kudos
Message 1 of 7
(8,761 Views)
Solution
Accepted by topic author skindeform
Past experience with servo motors is that they can produce large amounts of electrical noise.  I would suspect that the noise is getting into the signal from the encoders.  Look carefully at your wiring and make sure you don't have a ground loop between your NI hardware and the servo motor.
Message 2 of 7
(8,725 Views)

Hello skindeform,

 

First, I'd like to congratulate you on an excellent post.  I specifically commend you for putting the specific information about your DAQcard-6063E, SC-2345, and Omron R88D servo driver.  Could you please tell us the model number of your servo motor? To address your problem of getting incorrect counts when you rotate your servo motor automatically as opposed to by hand, it is a good chance that the cause is vibration.  Does the servo motor, when rotated automatically, turn at constant or variable speeds? If variable speeds is your answer, how does the accuracy of the counts correspond to the speed of rotation? There is an NI Developer Zone article called 'Using Quadrature Encoders with E Series DAQ Boards' that has an interesting section on the drawbacks of using non-conditioned quadrature encoders; one of which is inaccurate data due to vibration.  The article points to using a clock converter device to condition the encoder signals and improve the reliability of your encoder measurements. 

 

Regards,

Wallace F.

National Instruments
Applications Engineer
Message 3 of 7
(8,722 Views)
The model number of the servo motor is R88M-W10030L.  The servo motor rotates at a constant speed.  The program is designed to drive the servo motor connected to a ball screw in one direction.  Once the load sensor reaches a desired load, it will reverse at a constant speed until no load is on the sensor. Throughout, it records load vs. displacement.   I have found a few things that will alter the pulses counts.  If you apply resistive pressure on the servo motor while it is rotating, the pulse output will vary.  Also when you apply pressure to the casing of the servo motor itself, the pulses will often jump around. I was almost certain my false pulses were caused by vibration.  After have no success adjusting settings to reduce vibration(according to the user manual), I ran the program while moving around several wires to see if any were loose, etc... After applying force to the power lines and encoder cable, the program ran several times with an average of 2000 pulses per revolution and would actually subract pulses while going in reverse(what I want it to do); Although the average was around 2000 pulses per revoltion, i saw positive and negative jumps in pulse counts while traveling forward at constant speed.  Today I re-wired the equipment, seperating as many wires as possible.  After the re-wire, the equipment/program is back to sending 34000+ pulses per revolution, and does not subract pulses while reversing.  I have read the 'Using Quadrature Encoders with E Series DAQ Boards' article.  Referring to the article, I am running similar to "method 1".  I am already using a signal conditioning box, but have the counter data run directly through. Do you believe running the signals through a SCC-CTR01 might solve the problems? 
0 Kudos
Message 4 of 7
(8,700 Views)

Correction: Not sure how accurate my assumption of applying pressure to the outer casing of the servo-motor/encoder casing was affecting my pulse output.  As of now, I am not getting any change in pulse output by applying pressure at those points. 

 

 I know some DAQ cards allow certain debugging/filter methods to be applied by making modifications to the actual labview program.  Other than adding equipment to my setup that would possibly filter out bad signals, would it be possible to insert certain VI's that would be compatible with my 6036E card that would simulate a filter?

0 Kudos
Message 5 of 7
(8,690 Views)

I very much agree with centerbolt's suspicion that you have an issue with electrical noise.  The fact that the problems are more pronounced when the motor works against a higher load help to confirm that.  With higher loads, the motor commutation switches higher currents which in turn will tend to generate more electrical noise.

 

Unfortunately, there isn' t much you can do to "filter" this noise using software vi's.  You need a hardware fix.  I looked up the servo drive and it says that the encoder outputs are RS-422A style line driver outputs.  You need a line receiver circuit to convert that to a referenced TTL-compatible signal for your data acq board.  Better yet, purchase a combo unit that'll both convert from line driver to TTL and will perform the quadrature decode.  The previously-linked app note refers to one such interface board.

 

-Kevin P.

ALERT! LabVIEW's subscription-only policy came to an end (finally!). Unfortunately, pricing favors the captured and committed over new adopters -- so tread carefully.
Message 6 of 7
(8,668 Views)

I had my shielding for my load sensor cable grounded to two seperate grounds. Made a grounding block, routed everything to a common ground and now everything seems to work properly.  Thanks guys.

0 Kudos
Message 7 of 7
(8,629 Views)