Closed loop control of step motors possible with 7344?

Hi All
I have been looking around here for a while for an answer to this question.
For me, a closed loop control system is correcting for following errors all the time, also when the move is complete.
If the load on a system changes, there will often be a need for compensation in order to keep the position right. Then you need a closed loop control system.
I have made a system using DC motors with a 7342 controller. We are in the process og getting a new similar system, where the manufacturer chosed stepmotors in the believe that it can be used in closed loop.
Is it really true that the NI version of closed loop is only performing a what you call a "pull-in" at the end of the move in order to correct for lost steps or flexibility of the connection between motor and object/encoder?
I would call this "backlash compensation" or something like that.
Why dont you make a real closed loop option. The control voltage from your servo motor control, could be fed into a voltage-frequency converter with a matchin sign signal.
This shouldn't be too complicated to accomplish.
/b

You are right. NI motion control boards don't apply a control algorithm
during moves when configured in closed loop stepper mode. In this mode
the board monitors the following error during the move and generates an
error when the following error limit is exceeded and they start the
pull-in moves at the end of the move if necessary.
If you really want to do PID control with stepper motors you still
could connect an external V/f converter to the DAC outputs of the board
and control the axes like DC motor axes. Some vendors implement this
feature on their board but NI has decided not to do that as we don't
think that this approach provides a good solution. Here are some reasons:
The most important issue is the fact that you could easily exceed
the maximum rate of change of the motor frequency in the case that the
following error increases during the move. For a DC motor this would mean that the
voltage of the controller increases to compensate for this error and
the motor will follow - probably with some delay, but it will follow. For
the stepper this could mean that the acceleration becomes so high
that the motor stops immediately as it can't follow with a delay like a DC motor. What
should the controller do then? Restart the move automatically? Generate
an error? There is a big chance that you end up with a system moving in a stop and go mode.
The second issue is related to the control algorithm itself. The transfer function of a stepper motor is not really linear so it will be quite hard to find good tuning parameters. A DC motor can be tuned by analyzing the step response and the Bode plot. For the reasons that I have described in 1.) this won't work for a stepper so how should you tune it?
I have talked to some  motion control engineers who have tried to control steppers with a PID algorithm and they all agree that this is a real pain and it's not recommended.
So if your system requirements involve online following error compensation I strongly recommend using a DC motor.
Best regards,
Jochen Klier
National Instruments Germany

Similar Messages

  • Closed loop control of DC motor drive using PCI 6251

    Hi
    i am using NI PCI 6251 for closed loop control of dc drive.(shunt motor,220v, 0.5HP, 2.5A rated, 1500RPM)
    the dc motor is fed from a bidirectional dc-dc converter. this converter works in boost mode(forword motoring) and buck mode(braking mode/battery charging)
    the converter is built using mitsubishi IGBT module. at low voltage side of the converter a battery bank of 48V is connected and high voltage side the motor is connected.
    An IR sensor is developed to measure the speed of the motor and a hall current sensor is used to sense the converter current.
    in the control part i have an inner current control loop(PWM controller) and a outer speed control loop.both controllers are PI controller. To measure the speed i have used counter of the DAQ assistant, then frequency. then this frequency is converted to RPM using labview.after giving the speed and current signals  to the controllers , then i started  tunning the PI gain, but at the starting the duty cycles was 100%, so the IGBT got damaged immediately. now how to tune the controllers during the closed loop operation.  the switching frequency of the converter is 20KHz.   
    can any body suggest me how to run the dc drive in closed loop ?
    thanking you.

    Hi Premenanda
    The freq data receiverd from the daq assistant has the units of Hz, or in terms of motor speed, rps (rotations per second). I can see that you are trying to convert that to rpm (rotation per minute). which can be done by dividing the rps speed by 60. Instead, you are multiplying it by 60 and also comparing with 2000. the resultant multiplied value is displayed in your program only if it is smaller than 2000.which is causing the problem here.( as seen in file 'original code.png)
    I have attached a file named 'modified code.png' that shows how the conversion from rps to rpm is done. Please do the required changes in your code and let me know if it works.
    Attachments:
    modified code.png ‏18 KB
    Original code.png ‏15 KB

  • Stepper motor closed loop control using 7344

    I have some question about the closed loop control of stepper motor using 7344. From the NI website I got that closed loop steppers work differently from closed loop servos. Instead of adjusting the output on each PID iteration like a servo system, closed loop steppers will do a pull-in move at the end of a move to adjust for any difference between the target position and the encoder feedback. By default, it will attempt the pull-in move three times.
    Now for example I got five points: (0,0) (10,20) (30 40) ( 31 60) (50 65). The request time interval I set as 10ms. This mean that in the first 10ms, the machine should move from (0 0) to (10 20). But for some reasons the machine can not move to (10, 20), it moves to (8,16) and the first 10ms passed. In the second 10ms, how it move? Move from (8 16) to (30 40), If like this, the following error will accumulated. In practise, it is not accumulated. Is there anyone can explain something about the closed loop control of stepp motor? Thanks a lot!

    Requested Interval is additional data for the Position buffer type. The Position buffer type requires a Requested Interval parameter, and indicates the time between contouring data points in milliseconds. For all other buffer types, the Requested Interval parameter is ignored.
    The controller will use the closest value it can that is greater than or equal to the interval value you requested. Your time interval must be an even multiple of the PID rate.
    For example, given a PID rate of 250 ms, a time interval of 11.2 ms between points is physically impossible, so a call to configure buffer with an interval of 11.2 causes the  buffer to actually be configured for 11.25 ms, since 11.25 is the nearest possible interval greater than 11.2. The following table shows valid intervals for each PID rate.
    My question is like this. For example I got five points: (0,0) (10,20) (30 40) ( 31 60) (50 65). The request time interval I set as 10ms. This mean that in the first 10ms, the machine should move from (0 0) to (10 20).  If it is impossible for the machine to move from (0 0) to (10 20), there are two ways to solve this problem. First is the time interval is 10ms and assume it move to (8 16) within 10ms and take (8 16) as the start point and (30 40) as the end point of the second move. Second is extend the time interval, assume it takes 14ms to move from (0 0) to (10 20). After 14ms, the (10 20) is the new start point for the second move. I think it works as the second ways.If not, the following error will accumulated.  Is there anyone can explain something about the closed loop control of stepp motor in detail? Thanks a lot!

  • How to control the step motor in this situation?

    I have a PHI TRIFT3 ToF-SIMS instrument. The instrument comes with a default
    software. However, the software don't offer fine step motor control. I want to control
    the step motor using Labview.
    I got some info from a Japanese engineer of the company.
    The step motor controller is connect to a card in ISA slot. In the default software, I
    can send command like D2000(distance 2000) and A100(acceleration 100) to "port 2"
    to control the motor. I have a manual of the commands.
    However, I don't know how to send command from Labview. Here is a joysticker
    connected to COM1, COM2 is used for other vacuum control. The joysticker can also
    control the motor..Here are some reply from the company about the control.
    "We do not use special driver for control the step motor.
    This is just sending the serial command via RS232C per command instruction I
    sent you before. The only difference is, to simplify the hardware, we just talk to data acq
    module(wave form card) via PAHOST card(installed in ISA bus slot of the PC)
    to passthru the RS232C command to stepper motor control unit.
    If you try to talk to step motor. just send the RS command from Labview
    platform. (of course need to connect the step motor controller from PC,
    default TRIFT PC does not have a spare COM channel, might be need to add
    serial etension card or add the computer for Labview control)
    "TRIFT PC passthru the RS232 command throught ISA bus to PHI data
    acquisition box to stepper motor control.
    Joystick handled by default software , convert to stage movement
    command X and Y then send thru to ISA. "
    I tried to use the Basic Serial Write and Read.vi to send command to COM1 but I always
    get an error"1073807246 ocurred at property node(arg 1) in VISA configure Serial prot(Instr).vi->
    Basic Serial Write and Read.vi  Possible reason: VISA: the resource is valid, but VISA cannot access
    it."   I think this happens because the default software is also open and trying to control COM1.
    What should I do to accomplish the step motor control? Thanks a lot

    Just to start from scratch, have you verified that you can do basic communication with your serial port, ie successfully perform a loopback test?  Please let me know, and we will go from there.
    Logan S.

  • Creating a simple closed loop control

    Hi everyone,
    I need a bit of help creating a (very) simple closed loop control.
    Note: I am using 3 Measurement Computing boards: one USB-2416, and two USB-TC's. Since Measurement Computing has their own driver (called ULx), it might be a bit more difficult to understand than the NI drivers, but keep in mind ULx is the equivalent to DAQmx.
    I need to be able output a 0 or 1 binary value based on measurements from 4 voltage input channels compared to constants. Ie. if voltage measurement < 3.5 (constant), send a boolean value (see a, b, c, d in attached photo) which in turn gets sent to the ULx Write VI, and that outputs the binary value of 0 or 1. The problem I've run into is that I need to "compare" single chanels from different boards, which gives me single boolean values for each channel. The ULx Write VI only accepts boolean arrays. Is there a way (and there probably is, I just haven't been able to find it) of arranging these lone boolean values into a boolean array?
    (see attached file for what I have so far)
    PS. I am a COMPLETE rookie, only been using LV for a week or so, so please explain everything as if I have no clue what's going on.
    Thanks in advance!
    Solved!
    Go to Solution.

    Hi,
    the attached example I've made should demonstrate what you need to do.
    Some things to think about:
    1. It seems that the ULx vis return arrays of signals. If so you can select signals with "index array" as done in my example. That consumes less space and does not change the type of the signals to variant.
    2. If you compare the signals to your constants you will receive boolean arrays because every element of the measured signal is compared to the constant (see my example). You may then decide how to process that info - another hooray for signals :-)
    Regards
    Florian
    Attachments:
    Example01.vi ‏24 KB

  • How can I control my step motor

    I am using a 6006-DB 3-mothor driver and a NEMA step motor model 405-SM, both from AMSI corp. I would like to control my step motor using LabVIEW. We use the LV. 5.1.1 version and we have a PCI-MIO-16E-40 as adquisition card.
    The sistem I want to built is to control my step motor and while turning detect the intesity variation on a photodetector which is conected to my adquisition card.
    I wonder if somebody has an idea how to do that.
    Thank you in advance
    Daniel Hernandez

    Ok I understood, I can use my PCI-MIO-16E card to control my steper motor driver, I will try to do that. But, if I use a DB-25 connector, how can I use my PCI card??
    I was thinking to use the parallel port, directly, to conect my steper motor driver.
    I attache some VI someone passed me. (It use a Setbit.vi and out port.vi)
    Attachments:
    MoteurGOTO6007-DB.vi ‏81 KB
    MoteurGOTO.vi ‏87 KB
    Commande_moteur.vi ‏10 KB

  • Problem using PID toolkit and control design toolkit to design the closed loop system. (for DC motor closed loop)

    Hi, i have facing some problem during i upgrade a project. This project is an opened loop system, it only achieved up to controlling the speed of motor, detecting the speed of motor, and switching the direction of motor while controlling the motor (This motor is a 12 VDC motor).
    In order to improve the project, closed-loop dc motor control system will be implemented to correct the error of the motor's speed and maintaining the speed for the initial setting. I would like to use PID control method to do the closed loop system.
    I already installed the PID toolkit V8.2 and control design toolkit V2.1.2, and i'm using DAQ usb 6221, LabVIEW 8.5
    Below is my problem.
    http://img177.imageshack.us/my.php?image=howtocreatethesetpointnx2.jpg
    question: 1. How to generate a icon for set point? my setpoint is duty cycle...
                    2. How to feedback the output duty cycle to summing junction?
    below this is my basic concept
    http://img237.imageshack.us/my.php?image=closedloopbz5.jpg
    Problem 2:
    http://img357.imageshack.us/my.php?image=problem1yk2.jpg
    question: Why PID toolkit icon cannot wire to cd series.vi?
    Below is my original program...
    http://rapidshare.com/files/140538836/pwm_generate-final_PSMII.vi.html

    Hi Cyrus
    Have you had the opportunity to see our
    developer zone site on the PID toolkit? This article also has sample
    code at the bottom that may help you in developing your application. I
    have also linked below knowledge bases regarding setting a point
    profile and generating a PWM from a digital output line. 
    PID toolkit
    http://zone.ni.com/devzone/cda/tut/p/id/6440 
    How to generate a set point profile:
    http://digital.ni.com/public.nsf/allkb/125F27AC143B6AFD86256C2B0004A4DC?OpenDocument
     How to generate a PWM on a digital output line:
    http://digital.ni.com/public.nsf/allkb/1561D31534F07D608625727900391114?OpenDocument 
    Thank You
    Eric Reid
    Thank You
    Eric Reid
    National Instruments
    Motion R&D

  • DC motor closed loop control through labview using usb 6008

    Hello
    i am doing a project in which i want to control the speed of a DC motor (PID control) through labVIEW 2010. I am having a DC motor, a drive unit that regulates the voltage to the motor by getting analog voltage from 0 to 3.3V ( it can be used for both directions) and i also have a NI usb 6008 board. The problem is that i can't feed the usb 6008 with the digital signal from my hall effect speed sensor. Is it posible with this setup to control the motor?? I can also try to use the pulse as analog input and trasform the frequency into rpm's. Then i am thinking of generating an analog signal to feed the motor drive. If you have any further suggestion of a probably better hardware setup would be more than helpfull to me.
    Sincerely
    Jason Chaloulos

    Hello Michael
    Thanks for the reply. I came across those topics before and all of them are trying to generate a PWM signal as output i want to use just an analog signal output so timing on the output is not that important i guess. i am struggling on getting the frequency from the digital input signal that my hall effect sensor generates. Since the maximum speed of the motor is 3000 rpm and with my tooth wheel the maximum  output frequency of the sensor will be 300Hz which i see its way less than the limitation of my ni board. Is there any tutorial documentation that might help me with this one ? Thank you in advance.
    Kind regards
    Jason

  • Step motor control with a time delay

    Hi all,
    I am trying to control a step motor to move in vertical direction by Labview2010. The specific Labview function blocks are created by the manufacturer of the step motor. Now the axis can move up/down properly but my question is that I want it to move with a time interval. For example, we set the desired position to 10mm and waiting time 1s. When I click on the start button once only the axis moves 1mm and wait 1s. Then axis moves another 1mm and wait 1s. This action will obviously repeat 10 times until the axis reaches 10mm position.
    I will be very thankful if someone could give me some hints.
    Best regards,
    Nicky
    Solved!
    Go to Solution.

    You're welcome
    You should some more to the code so that it's more reliable. There might be some miscalculation between the travel distance and the resolution, i.e. 5mm travel and 2mm resolution will give the forloop 2,5. This should be either 2 or 3. I'm not quite sure how the for loop handles this. I think it will round to nearest. You should anyways check it out. Also avoid using 0mm.
    Good look with your project 
    Regards,
    Even
    Certified LabVIEW Associate Developer
    Automated Test Developer
    Topro AS
    Norway

  • Step motor control with a time interval

    Hi all,
    I am trying to control a step motor to move in vertical direction by Labview2010. The specific Labview function blocks are created by the manufacturer of the step motor. Now the axis can move properly but my question is that I want it to move with a time interval. For example, we set the desired position to 10mm and waiting time 1s. When I click on the start button once only the axis moves 1mm and wait 1s. Then axis moves another 1mm and wait 1s. This action will obviously repeat 10 times until the axis reaches 10mm position.
    I will be very thankful if someone could give me some hints.
    Best regards,
    Nicky

    You're welcome
    You should some more to the code so that it's more reliable. There might be some miscalculation between the travel distance and the resolution, i.e. 5mm travel and 2mm resolution will give the forloop 2,5. This should be either 2 or 3. I'm not quite sure how the for loop handles this. I think it will round to nearest. You should anyways check it out. Also avoid using 0mm.
    Good look with your project 
    Regards,
    Even
    Certified LabVIEW Associate Developer
    Automated Test Developer
    Topro AS
    Norway

  • How can I control stepping motor with PCI-7344 & UMI-7764? And I want to know the simplest circuit that I can do by myself?

    Now I don't want to by commercial stepping motor driver, I want to do it by myself. I want to know the simplest driver circuit to drive and control my stepping motor (+5V 4 phases).

    From the 7344's perspective, in open loop stepper mode, the only necessary outputs are the pulse train for steps and a TTL flag for direction. You can also set it for CW/CCW mode, which will output two separate pulse trains: one for clockwise motion, one for counter-clockwise motion.
    If you only need to decode the signals into four phases and not amplify them above 5V, then a small IC might work for you (as long as you don't need a lot of current). A reconfigurable FPGA could be programmed to decode the incoming signal and output the four phases pretty easily. However, I honestly believe your best bet is just to buy a recommended amplifier for the motors.
    Good Luck
    Kyle V
    Applications Engineer
    National Instruments

  • Closed loop velocity control based on load cell force

    Hello,
    My application is for a drill, that drills into rocks of various densities for the purpose of collecting rock core samples.
    My setup has 2 motors which get controlled, one spins the drill bit at a constant velocity, the other moves the drill mechanism along a Z axis.
    For efficient cutting, it is desired to apply a constant force between the drill bit and the rock.  I have a load cell which measures the force being exerted by the drill bit on the rock surface, and this force can be adjusted by changing the velocity of the Z axis.  So I would like to employ closed loop control to adjust the Z axis velocity to maintain a constant force on the rock.
    Platform: cRIO 9073, with NI 9505 & 9215 Modules, Labview 2010 Full with RT and FPGA modules.
    The load cell is by Transducer Techniques, and I use their TMO-1 module to condition the signal, the output of which is attached to an input of the 9215 module, where 0-100 lbs equates to 0-8VDC.
    The motors and encoders for the Drill and Z axis are connected directly to the 9505 modules.
    Right now I am using a modified version the example found in ...\examples\CompactRIO\Module Specific\NI 9505\Velocity Control (closed loop)\Velocity Control (closed loop) - NI 9505.lvproj to accomplish velocity control of the motors.
    My questions are:
    1) Do I have the appropriate NI hardware/software for this task?
    2) With my current hardware setup, what would be an appropriate way to control my Z axis velocity rate based on Analog feedback from the load cell?
    3) Development time is a critical factor, so are there any toolkits etc that are easy to get started with that would drastically decrease my development time, or do I already have everything I need?
    Thank you for your time
    -MK Hokie

    1. Your hardware and software look appropriate assuming the motors are compatible with the 9505s.  You didn't mention the NI SoftMotion module in your software list which is something you will need.
    2.  There are a few ways of doing this.  One method would be to have a force PID loop that would attempt to maintain a force setpoint by directly outputting values to your torque loop.  In this case, the drill would essentially move as fast as it could while maintaining the force setpoint.  Another option is to have the force loop output a velocity setpoint.  You would then have a velocity PID loop that outputs torque values to the torque loop.  By adding this additional velocity loop you could have control over your maximum and minimum velocities.  There are likely other alternatives as well, but these are the first two that come to mind.
    3.  Unfortunately there are no shipping examples that close the loop on force feedback.  My advice would be to start with the NI 9505 shipping example and adapt it to your needs.  There are quite a few things you will want to change though.  Do you know if you will need to use the trajectory generator to move the drill into position before starting the force control?
    Assuming you don't need any trajectory generation, you can scrap the entire RT portion of the NI 9505 example and just create the necessary FPGA code.  On the FPGA, you won't need the Spline or Synchronization code either because this information would no longer be coming from RT.   You could take these out and replace the position loop with a force loop and possibly a velocity loop and your FPGA program would basically be finished.  In fact the only real motion IP that you will need is for the encoders (assuming you want velocity control) and PID.  Then you would need to create an RT VI that allows you to send down enable, disable, PID gains, and setpoints. 
    If you do need trajectory generation, you would want to keep most of the example code the way that it is, but then program in a 'Force Mode' that utilizes the force and velocity controly as described above.  You could think of it as having two different routines programmed side by side. 
    Regards,
    Burt S

  • Control step motor explanations

    Hello,
    I would like to control a step motor with computer through a cRio solution and a module: NI9512
    I already saw what can be requested for the experiment:
    A controller Ni cRio 9073, in order to plug the module
    A power supply 24VDC
    Step motor
    Nevertheless I noticed that I could also have needed a Step driver (like the P7000). What is its role? What the difference between the Step driver and the module NI9512?, Does I required the both ?
    Thanks you for your responses,
    Regards

    Hi,
    one 9512 provides connectivity for one stepper axis. The same is true for the P70530 drives.
    Using the drive interface modules is probably the most reasonable method to drive stepper motors with a cRIO system. It requires no FPGA programming and provides a very easy to use API (NI-SoftMotion). You may want to have a look at how to configure and program such a system in this short webcast.
    Of course you also could use digital I/O modules and FPGA programming, but this would result in significantly more work. With the drive interface modules you should be up and running in several hours (including cabling and configuration). With the manual approach the setup could easily take several days to weeks (consider extensive testing and recompiling of your code). If you need to meet very special requirements, this is still worth the efforts, but for standard stepper motion control tasks I strongly recommend to use the drive interface modules.
    Kind regards,
    Jochen Klier
    National Instruments

  • I need a step motor and controller compatible with LabView Can you recommend any

    I need a step motor compatible with LabView and I thought i would check with you before i moved forward in my experiment

    Dear chapbs,
    I've attached a sample cart below to show you the components for a possible setup of your system. Keep in mind that whatever stepper drive you purchased would power your motor. If you go ahead with the purchase of a controller & drive, I would highly recommend contacting NI to insure that you purchased the correct accessory components and cables to connect & power the components. I hope the  sample cart is helpful. I created it  by browsing ni.com, adding items to my cart, and then saving the cart to an excel file. Please post back if you have additional questions.
    Best Regards,
    ~NH
    Attachments:
    SampleCart.pdf ‏145 KB

  • CRio Steper Motor Control NI9512 step by step

    Hello,
    I have a project at University, and I need to design a LabView VI to controll a steper motor. Apparently all hardware is installed correctly: cRio-9074 and NI 9512. The motor only needs to turn for a start. Problem is, I am all new to Labview and I have no clue how to programme such a VI. I have completed all the basic tutorials on how Labview works, but I need help on how to direktly control the motor via a VI.
    Pls Help me!
    Solved!
    Go to Solution.

    Hey Thorsten ,
    there is already a post open regardin your topic.Please continue Discussion here:
    http://forums.ni.com/t5/Motion-Control-and-Motor-Drives/Controlling-a-Stepper-Motor-with-LabVIEW/td-...
    Regards
    Roman Imhoff
    National Instruments

Maybe you are looking for