Servo motor encoder pulses/counter data erroneous

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
Solved!
Go to Solution.

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? 

Similar Messages

  • Velocity Measurement from FPQuad-510 encoder pulse counter

    Hi, I have a quad-510 quadrature encoder counter and a 1024pulse/1rotation encoder. How can I read or calculate angular velocity(accurately and without much delay) from encoder readings?
    Is there a special vi or another algorithm (other than derivative.vi) that could help?
    Thank you.

    Caner,
    What do you see listed for the status of the velocity channels in MAX?
    Also check your channel configuration to make sure you have an appropriate range set.
    Regards,
    Simon
    Message Edited by Simon H on 02-02-2007 06:50 PM
    Attachments:
    MAX_CTR.png ‏26 KB
    MAXDataConf.png ‏11 KB

  • Can some body help me to develop labview code for generating pulse to drive ac servo motor

    can some body help me to develop labview code for generating pulse to drive ac servo motor... i am using NI 9401 card ....tnx

    Driving an AC servo motor would (I missed AC on the previous msg) requires some complex hardware. This is generally done by drivers specifically designed for this purpose. I doubt you will be able to accomplish this with the hardware you currently have and it might be cheaper to just buy a driver for it and control the speed through the driver.

  • Encoder Feedback with a Servo Motor

    I want to use Encoder oder Position feedback with my servo motor in MAX or VIs. How do I do it?
    Thanks
    Solved!
    Go to Solution.

    Hi Fregue
    what LV Version and HW is in use?
    I have seen in your other posts you are using a  NI UMI-7774,NI PCI 7550, and Labview 2010 is this correct?
    If the encoder is connected to the UMI you should be able to see the signals in MAX.
    You can select the closed loop step
    then the encoder is used to control the positon.
    Please check if the microsteps from the motion devcive and the encoder steps per revolution are correct
    Then you should able to use the encoder.
    You can also use the MAX to check if the encoder is connected correct in the interactive tab.
    I hope this helps.
    best regards
    Alexander Glasner
    AE NIE

  • Encoder pulse edge counting on VBAI

    Hi I am Dana and currently using smart camera 1772C.
    I connected the incremental encoder (1200 pulses/revolution) to the camera in digital input port to trigger image acquisiton. 
    This is working well and accurate when encoder is rotating at very slow speed.
    But the problem is when it goes a little fast (1 revolution /sec). It cannot read edges because encoder pulses just remain at high (=1) and doesn't change at all.
    On the monitor panel, I can adjust the sampling rate but the maximum is 150 Hz. Is this the reason why I cannot read the high speed pulses?
    Please anybody help me !
    Thank you

    Hi Dana,
    The sampling rate most likely maxes out at 150Hz because the digital lines can change that quickly, but I checked the specs for the 1772C, and it looks like the maximum frames per second for that specific smart camera is 65fps. In order to trigger off a 1.2kHz signal, you would have to divide the signal down to a maximum of 65Hz. 
    David S.

  • CDAQ module for high speed pulse counting

    I need to know a USB module which can be used for pulse counting. The pulses are generated from an encoder attached with an stepper motor. It generates 15 pulses per step.Pulse amplitude is 0 to 5V. I am using a compact DAQ system (ni 9178).

    The counters are on the cDAQ chassis backplane (there are 4 of them on the 9178).  So, in order to use an external signal with the counters you would need a way to route the signal to the backplane.  Your available options are:
    1.  Any digital I/O module with 8 or less lines on it (some modules are input-only or output-only--input modules can be used for counter input tasks only, output modules can be used for counter output tasks only).  Modules with over 8 lines transfer the data serially to the chassis backplane and so do not support routing signals through to the counters.
    2.  The 2 PFI lines on the 9178 (I should have mentioned this earlier, this might be a good option for you to route your encoder pulses without having to purchase an additional module if you only need 2 inputs--that is, no Z index signal).  The bandwidth on the chassis PFI lines is lower than that of the 9401 and 9402, I believe the chassis PFI lines should take signals up to ~1 MHz.
    3.  An analog module with triggering capabilities (at this time only the 9205 and 9206) can route a digital signal (the 9205 and 9206 have a PFI line) or an "analog comparison event" (see my post here) to the counter terminals.
    In case 1 above, you configure this by selecting the counter using the module's name (e.g. "cDAQ1Mod2/ctr0").  Default input terminals will be used (check the device pinouts for your module in Measurement and Automation Explorer) or you can select which terminals to use for your inputs using a DAQmx channel property node.
    In cases 2 and 3, you would need to select the counter as the internal backplane counter (e.g. "cDAQ1/_ctr0").  You will need to select which terminal your signal is coming from (since the internal backplane counter does not have default terminals.  This same method can be used to count internal signals (e.g. sample clocks, counter outputs, etc.) without having to use any of the 3 routing options mentioned above.
    Best Regards,
    John Passiak

  • Servo motor control using MCB2300 and Labview

    Hello Everyone,
    I have to drive servo motor using MCB2300 board and labview. I am new to LabView as well as MCB2300 board. I understand that I have to generate Pulse to control the servo motor. 
    I have gone through some of the post but could not find something useful. 
    I need to do it asap, a fast and eloborating answer is much appreciated. 
    Thanks is advanced.

    I don't know if this will help you, but think about this tip:
    On the back of my (digital-) Servo package there was some data written (see attached image).
    You've heard of PWM (Pulse Width Modulation)? If not look it up in
    wikipedia / microcontroller.net / (if you speak german) http://www.rn-wissen.de/index.php/Servos or google
    The description of the Servo says that I have to send every 200ms +/- 1ms a positive (+5V +/- 1V) signal with a length depending on the angle I want the Servo to be set. The Signal is coded in conjunction to time, which means, as longer the Signal as higher the angle is. The Signal range is in between 70 to 240 ms (with my servo and not exactly). The Signal must repeated every 200 ms like I said before. I don't know, if you understand C but here is a function I wrote, which works fine for me:
    void set_Servo_0(uint8_t angle)
      DDRA |= 2; // Specific Port declaration for my µC (Atmel)
      uint8_t tick; // a var to count how often I send my Signal
      for(tick = 0; tick < 2; tick++) // loop to count -> send Signal three times
        if(getStopwatch1() > 200)  // getStopwatch is a libary specific function to measure time in ms steps
          PORTA |= 1;  // port high
          sleep(angle);  // angle comes from outside the function, it is a parameter for this function. Sleep for this time with port high = pos Signal
          PORTA &= ~1;  // then pull down
          setStopwatch1(0); // reset the timer 
      mSleep(250); // Finally I have to wait for this time (in ms) when I send different angle parameters one after another, to let the whole system
                          // (µC + Servo and rest of program) to settle down, else I will loose signal steps due to incorrect timing (not nice, but works).
    This function gets the angle as Integer from 7 to 24 and puts the Servo in corresponding position one time.
    Maybe You can adapt it, good luck.
    Attachments:
    Servo.jpg ‏207 KB

  • Encoder quadrature Count issues

    Hello,
    I'm interfacing a servo motor through an SCB-68 Board with an R series FPGA and my computer. I have a pulse generaton programme to control the stepper motor which works fine. I have hooked up the encoder and used the general example vi   "Quad ctr - R series.lvproj" with the inputs changed to my inputs on the board.
    Now it seemed to work fine, but then I changed the direction of the servo motor. The pulse count does not rise the same when going counterclockwise as opposed to clockwise. I.e if i do one whole revolution both clockwise and counterclockwise i get a different amount of pulses outputted. Does anyone have any idea why this might be? I've tried the SCTL in simulation and the pulse count is fine if i manually change the A and B channels. Also, i've tried a dc motor with a different encoder and the same problem arises.
    Any help would be greatly appreciated,
    Sam 

    How much is it off by? Is it always a consistent number of pulses off? Just to verify it is the same channel you're reading correct, so there's no possibility its a phase issue since pulses are often out of phase on these encoders so you can determine direction.
    CLA, LabVIEW Versions 2010-2013

  • How do I use daqmx to get encoder direction/count on E-series board?

    Hardware:
    PCI-6014
    Labview 7.1
    I have a linear actuator and wish to get distance/direction.  The
    motor has a quad encoder with phase A and B only.  I connected the
    lines according the the E-series, PFI-8 and PFI-6, and ground to
    digital ground. I then attempted to design a control with daqmx but
    failed.  I have tried the daqmx examples but none were attempting
    a reverse in direction.  Most examples given for direction change
    are for traditional daq control; i cant make a correlation on what to
    use to substite traditional daq with daqmx vi's. 
    2 questions:
    How do I use daqmx to get encoder direction/count on E-series board?
    Are there low pass filter vi's recommended for each phase connection to stabilize data?
    Thanks,
    Wayne Hilburn

    Hello Wayne,
    Take a look at the Count Digital Events.vi shipping example.  You can find this in LabVIEW by selecting Help >> Find Examples... then browsing to Hardware Input and Output >> DAQmx >> Counter Measurements >> Count Digital Events.
    If you set the "Count Direction" control to "Externally Controlled", you will be able to count up and down depending on which direction you rotate your encoder.  Make sure you wire Phase A to Ctr0 Source and Phase B to P0.6.  P0.6 is the up/down line for counter 0.
    I hope this helps.  Please let me know if you have any further questions.
    Regards,
    Sean C.

  • Encoder triggering counter capture

    Hi, I'm doing some research into how I can implement the below application. From what I've read, I'm 95% sure I can do what I want with a timer/counter card. But I figured I'd throw it out there to make sure. My application is as follows:
    I have (or will have)  a scanning head that rotates through 180 degrees across the sky. The scanning head has a mirror on it that directs light into a PMT (photon-multiplier-tube). The PMT outputs a TTL pulse every time a photon hits it (sometimes you get double hits, but we'll ignore those for now). The idea is that we want to count the number of pulses from the PMT for incremental portions of the scan. 
    The scanning head will have an incremental encoder on it, outputing a quadrature signal - which I believe can be put directly into the timer/counter card. I need it so that for say every 1 degree of motion, the PMT pulse counter resets and I get a value for the number of counts from the previous 1 degree increment. The speed of the head will NOT be constant (it will be moving slower at low elevations and faster overhead) so the counting of pulses must be synchronized to the encoder input signal. Actually, there is also the possibility that the speed will be constant, and the position increment to trigger will change. Is it possible to setup events to that it triggers at 1 degree, 2 degree, 5 degree, 11 degree, etc? Obviously this would actually be based on the encoder count (not degrees) and there would probably be ~500 events per 180 degrees. 
    So, is this doable? Can I link events to the encoder count value and have them trigger the system to capture the current count and then reset it? I don't know anything about how you setup these events, so any advice would be great!
    Thanks!

    Actually, I should take a step or two back from the brink.  I still do foresee some monkey wrenches
    if you really need dead-on hardware sync of these signals and sampling times.  However, maybe I'm
    much too quick to assume the need for that kind of dead-on sync.
    If you can approach the app by capturing "sufficient" data within and across all these position bins,
    you can probably get a very good approximation with some fairly straightforward software post-
    processing, and simple interpolation/curve fitting.  Not sure how much "sufficient" is, but likely a
    manageable amount.
    And yes, "digital change detection" is simply the ability to detect TTL transitions.  When a transition
    is detected, a pulse is generated on the board, and tasks can be configured to use that pulse to
    sync up triggers, sample clocks, or other timing signals.  Both the M-series and X-series multifunction
    boards support it.  The 6602 doesn't.  If you're going for true dead-on hardware sync, I still suspect
    you'll end up wanting the change detection feature.  If the software post-processing is good enough,
    you probably won't need it.
    One last thing: the ability to filter digital TTL signals has been improved on data acq boards over the
    years.  I suspect the X-series will give you better filtering options than the other boards but I can't
    speak from direct experience.
    -Kevin P

  • Tuning servo motor problems

    I have a PCI 7344 connected to a UMI and a Ecodrive amplifier, with a linear modul and servo. Feedback is a incremental encoder 16404counts/rev (400counts/mm). When i try to autotune, the servo motor goes berserk, so I have to manually tune it with "Step response".
    I am able to get a nice response curve according to "Understanding servotune" but the problem is, curve starts at -50mS? and at 50mS it seems stable, but settling time is indicated to be 500 - 600 mS, and when i use "wait for move complete.vi" it waits about the same period before it returns "move complete". I was expecting/hoping for 50 - 100mS settling time. How to tune this? I run position mode and there is no problem regarding velocity, acceleration and position feedback, the only
    thing is that settling time is to long. I have no following error. Is there any other way to get a signal exactly when a position is reached.

    Hi, thank you for your answer.
    I still have problems with this, so here is some more questions.
    1. I am getting a perfect curve on the step response, similar to attached picture (1), only with shorter time scale. The step response report under the chart that settling time is 500-600mS, which is settling time (<100mS) and steady state (>400-500mS) together. This period seems to be the same that i am experience with "move complete.vi".
    I have Kp=7 Kd=14 and Ki=1, and i have tried to adjust these values but this is the best i get.
    Does the loop need that time to determine that move is complete?
    2. The move i want to do in my application is a movement about 20000 counts (50mm) in 130mS, wait 100mS and return to start in 130mS, this is possible if I use
    software delay and start return move before first move is settled according to "move complete.vi" But this generate a increasing stop position error each move if I loop this sequense with 100mS rest time. These timings should be possible with the hardware I am using. Any suggestions?
    3. I have set the driver/amplifier in velocity mode (incremental encoder feedback), how is that compared to torque mode in the driver in this case?
    4. It is possible to get a second feedback from the drive (torque, velocity or position from an analog output) but this is 8 bit and less accurate than encoder. I also have a second external encoder for precision measurement and a force cell, but they are only active parts of the range to the servo (under the desired move) is there any other way i could set this up?
    Regards
    Attachments:
    153.gif ‏29 KB

  • Servo Motor Control

    Hi all...
    I'm working with the AT-MIO-16E-10 Board,
    and I use its 2 counter (0 and 1) to control 2 servo motors, when I
    using them to generate continuous pulse, both motors can move
    continuous. But my problem is, when I generating a finite pulse train,
    only either 1 motor can move(ie. no of pulse=10000)...why and how can I
    control 2 servo motors by this board?

    sushma:
    You currently have 4 other threads asking help for control of a stepper, one of which you said you had a working solution. Now you are asking about servos which operate totally different from stepper motors. Please keep discussion on one thread and include what hardware you have to work with (motor driver, motor, DAQ card) so that others may help in an efficient and timely manner.
    Thanks
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    "It’s the questions that drive us.”
    ~~~~~~~~~~~~~~~~~~~~~~~~~~

  • Analog and Encoder being collected only on encoder pulses.

    I currently have the setup below and the XValue timestamps from the Write to Measurement File are not exactly at the rate I specified in the DAQ Assistant.  The DAQ Assistant just has analog channels with Samples to Read set as 10 (or 1, which does not affect this example) and the Sample Rate (Hz) set to 10 Hz.  The main problem that I am having is that the analog channels seem to follow the Frequency Counter in the sense that it alters the XValue timestamps in the Write to Measurement File and will only log the analogs and frequency channel when the encoder (frequency counter) encounters the edge of a pulse.  How do I get the analog channels in the DAQ Assistant to log as well as getting the Frequency Counter to log simultaneously with the correct XValue timestamps from the Write to Measurement File with or without the encoder moving? 
    Also, is the 100 ms Wait Until Next ms Multiple needed for the Frequency Counter?
    Thanks in advance for the help.

    The *.vi works correctly except for the fact that when the encoder is not reading any pulses, not moving, it delays all data acquisition for all channels (analog and counter) until the encoder rotates again or the counter channel for the encoder times out according to the timeout specified.  I would like for all of the channels to be able to continue logging at the specified rate in the DAQ Assistant for the analog channels and the specified rate for the counter channel (encoder) if the encoder is not reading any pulses.  Also, when the counter channel is reading pulses, the timestamp XValue of the Write to Measurement File is not at the exact rate I specify in the DAQ Assistant.  An example of some data is shown below.
    X_Value
                  Analog
           Encoder
    0
    2.231008
    0
    9.237507
    0.942442
    0
    20.366281
    3.523876
    5.227699
    20.725778
    -4.150966
    1.09365
    22.304438
    6.117589
    70.197237
    When the encoder is not receiving counts, it halts all data to be written to the Write to Measurement File and the X_Value timestamps are not exactly at 10Hz as I requested in the DAQ Assistant.
    Thanks again for any help.

  • Tuning a servo while encoder gives negative position feedback

    I want to tune my servo motor (voice coil) manually in MAX. Stable step response is possible, but two problems occure:
    1) When the step is done, the curve displayed on the "Calibration>Servo tune>Step response" tab shows an excitation step line from -70000 to the value I entered under "step length", although I reset the current position in the "1-D interactive" to zero beforehand.
    2) No matter how I change the "step length" value or Ki, the motor step always goes from this above mentioned -70000 to +50000.
    To facilitate any hint, mazbe this causes the problems: My encoder head is mounted the way that it gives back negative count values in the positive motor direction. Does this have to be changed or is it possible to also tune the servo with this negative encoder position feedback. Is it even possible the position feedback from - to + within MAX?
    Thanks in advance for any help.

    Customer solved the problem:
    "Sehr geehrter Herr Wagner,
    bzgl meiner Anfrage für die Regelung meines "Vertikal-Servos" habe ich
    meine Probleme lösen können:
    - Das Vorzeichen der Encoder-Counts konnte ich durch vertauschen der
    Encoder-A-B-Polaritäts-Kabel am Encodereingang des Motor Drives umdrehen.
    - Wie erwartet war es dann (wenn auch nur mit viel Geduld) möglich,
    PID-Einstellungen zu finden, die meine Achse auch mit dem aufliegenden
    Gewicht vertikal kontrollieren lassen.
    Ihnen nochmals vielen Dank für Ihre Unterstützung.... Die nächsten
    Probleme kommen für mich bestimmt.
    Freundliche Grüsse,
    Henri Hagenmüller"

  • Identifying single motor units from EMG data

    I need to identify single motor units from EMG data and have been unable to find anything on the NI web site that could help. I have identified a third party program, Spike 2 from Cambridge Electronic Design (CED), that is able to do the job however I have already go a large investment in NI hardware and software and do not want to have to buy all the CED hardware. I was wondering if anyone knew if it were possible to control the spike 2 program from inside LabVIEW (in close to real time), or if there was a LabVIEW based solution that I have been unable to find.

    Sorry for the confusion.
    This post is regarding template matching/detection of events from a nosy analogue signal. It is a medical application, not a motor/servo application. The term �motor unit� refers to the action potentials found in electrical recordings taken from muscles (EMG). By identifying the occurrence of these events we can determine properties of the nerves controlling these muscles. However identifying these events is very difficult as the recorded signals are noisy and the shapes of these units change over time. Many researchers have attempted to design computer-based solutions to this problem but is has only been with recent improvements in computer power that a solely software based solution for real time pattern matching has been possibl
    e. Although this application is specific to medical research (and electrical recordings of nervous system activity in particular) the number of research laboratories around the world attempting to perform such analysis is large enough that I though a LabVIEW base solution may exist.
    Barring a LabVIEW based solution I was wondering if anyone knew if it were possible for the data to be acquired in LabVIEW then directed to Spike2 (the most common program used for this application) in almost real-time. I know I can record data in LabVIEW and save it as a text file then open it up in Spike2 but I do not know if I can stream the data into Spike2 online. Online processing of the data is necessary to determine the progress of the experiments.

Maybe you are looking for

  • Ipod not recognized by windows, the updater, or itunes

    I have a click wheel ipod, that i've had for little more then a year now. Recently, my itunes when i started it, told me i had to update it's software, which i did, problem solved. However, now my ipod won't update, and i cannot put any songs on it.

  • Split Amount, Account 552970 in company code 7175 is not a one-time account

    Dear Experts, Extremely urgent. I'm working on the 4.6c release. I've activated the split amount in the MIRO transaction, but I'm getting the following error: "Account xxxxxx in company code xxxx is not a one-time account". It's a normal vendor not a

  • Have I messed up my partitions?

    Hi, Just wondering if any of you can shed some light on an issue that's bothering me. I think I might be missing an old partition from my HDD (a 512gb SSD). I installed Windows 7 last week under bootcamp, giving it a measly 25gb. This proved to be a

  • How to launch a non bsp url through transaction launcher

    Hi All, i am not able to launch a non bsp url from transaction launcher. i have followed all the steps needed. Defined URL as non bsp url and defined the logical system and assigned it to rfc destination. when i test this out, i am getting a blank pa

  • Acroexch error in Word 2010 x64

    Hello, I had this error with a user yesterday inside her Microsoft Word 2010 x64: "The program used to create this object is AcroExch. That program is not installed on your computer. To edit this object, you must install a program that can open the o