MicroLYNX Application Notes & Sample Programs Archive

  1. MicroLYNX Analog Joystick

  2. Using Encoder Motor to Detect Stalled Condition

  3. MicroLYNX User-Defined Acceleration Program

  4. Flow Control Using a MicroLYNX with an Analog Input Module

  5. LYNX/MicroLYNX Sample Applications

  6. LYNX Cut-to-Length

  7. Party Mode Communications

  8. Flow Control

  9. How Demanding is Your Multi-Axis System?

  10. Halfstep/Fullstep Application

  11. Multi-Axis Machine Applications

  12. Detection & Shielding Noise

  13. Stepper vs. Pneumatic Applications

  14. Trip Point Application

  15. Variable Speed Control Application

[Back to Main MicroLYNX Notes/Programs Page]

The following example demonstrates set up and use of the MicroLYNX Joystick module.

  1. Set the following values in your program or you can set them in immediate mode using IMS terminal
  2. MSEL=256      'Motor Resolution Select Variable
    MUNIT 51200 'Motor Units Variable
    ADS 1=10,2,1 'Analog Input Setup Variable: Aunit, Joystick Interface, Linear
    JSE=1              'Joystick Enabled
    JSDB=20         'Joystick Dead Band

  3. Perform the IJSC (Calibrate Joystick Instruction) command procedure as described in the software reference Lynx Product Family Operating Instructions. The IJSC will set up your Joystick Center and Joystick Full Scale.
  4. Once the IJSC command is executed you can use the print command to find the set values of the JSC and JSFS or set the values you set manually. If the motor seems to creep at a slow rate JSC can be adjusted along with the JSDB (dead band). Increasing the deadband will stop the motor from creeping.
  5. Values determined in our example by using the IJSC command (values will very based on the joystick you are using) are:
    JSC=2038
    JSFS=2038

  6. The velocity of the motor will not be limited by the values of VI and VM however, the acceleration is affected by VI. From 0 to the value of VI the motor will not ramp up to speed. Instead the motor will instantly run at the velocity set by moving the joystick. Once you exceed the value of VI the motor will follow the acceleration and deceleration ramps set by ACCL and DECL. To set your maximum velocity and the actual velocity based on the joystick use the following formulas:
Maximum Velocity
AUNIT=Analog User Units
Max Velocity = (Aunit *Munit /MSEL * 200) revs/sec

Actual Velocity
Micro Step Per Joystick Count = AUNIT * MUNIT / JSFS

Joystick count is a Function of the actual joystick position
Velocity (microsteps per second) = (Joystick count - JSDB) * Micro Step per Joystick Count
(Formula for Velocity is based on a joystick count greater than the Joystick Deadband. Position of Joystick will determine plus or minus velocity.)
Velocity (Revolutions per second) = Velocity (microsteps per second) / MUNIT
NOTE: Joystick count is determined by the actual position of the joystick. To determine what the value is use Print AIN 1
Once you get the value for AIN 1 use this formula: Actual Joystick Count = (AIN 1/AUNIT) * JSFS

You can type in the values noted above to test and observe how the commands effect and work together.


Example:

Actual Joystick Count = 1000
Max Velocity (revolution per second) =Aunit*Munit/MSEL*200
Max Velocity (revolution per second) =10(51,200)/(256)*200= 10 revs/sec.

Micro Step Per Joystick Count = AUNIT * MUNIT / JSFS
Micro Step Per Joystick Count =10(51,200)/2038=251.22

Velocity (microsteps per second) = (Joystick Count JSDB ) * Micro Step per Joystick Count
Velocity (microsteps per second) = (1000-20)*251.22= 246195.6 micro steps/sec

Position of Joystick will determine plus or minus velocity using Joystick Center (JSC).
The actual Joystick count is from 0 to 4096. In this example we used 1000 counts.
Analog to Digital Counts = Actual Joystick Count - JSC
Analog to Digital Counts = 1000 - 2038
Analog to Digital Counts = -1038
NOTE: Direction is determined by plus or minus counts

External DC Voltage Control

If you are using a 0-5 VDC signal for joystick operation. You can determine the velocity based on the milli-volts per joystick count. The analog joystick module has a 12 bit A to D converter. The resolution is therefore 0-4096 counts. With 5 VDC and a resolution of 4096 you will get 1.22 mV (5 / 4096 = 1.2207 mV) per joystick count, this is a constant.

The JSC command can be set from 0 thru 4096 count. Using the default JSC =2048 you will have 2048 counts to left of joystick center and 2048 counts to the right of Joystick center. On one side of the joystick you have 0 - 2.5 VDC and from the other side of the joystick center you have 2.5 - 5 VDC. The following example will demonstrate how to determine velocity based on analog input voltage.

Velocity with 5 Volts DC input.
MUNIT= 51200
AUNIT= 10 'set in ADS command below
JSC=2048
JSFS=2048
JSDB=20
ADS 1=10,2,1
K= 1.2207 mV/joystick count (constant)

With 5 Volts input the velocity can be calculated by using the following formulas:

JSC=2048

The analog voltage is 5 V to the input, with a joystick center of 2048:
Analog Voltage In = 5 VDC(input) - 2.5 (voltage read with JCS = 2048 * K)
Analog Voltage In = 2.5 VDC (Print AIN returns 10)
Micro Step Per Joystick Count = AUNIT * MUNIT / JSFS
Micro Step Per Joystick Count =10(51,200)/2048=250

Actual Joystick Count = (AIN/AUNIT) * JSFS = 2048
Velocity (microsteps per second) = (Joystick Count - JSDB) * Micro Step per Joystick Count
Velocity (microsteps per second) = (2048-20)*250= 507000 micro steps/sec

Velocity (microsteps per second) = ((Analog Voltage In / K) - JSDB) * Micro Step Per Joystick Count

Velocity (microsteps per second) = ((2.5V / 1.2207 mV) - 20) * 250
                                                            = 507001

Velocity (revolution per second) = Velocity (microsteps per second) / MUNIT
                                                          = 507001 / 51200
                                                          = 9.9 revs/sec

Back to Top


bThe following MicroLYNX sample program shows how to detect a stalled condition by using an encoder motor.

VAR Num                      'declare variables
Msel=256                     'set 256 microsteps/full step
Munit=51200                'set 51200 microsteps per revolution
                                        'MUNIT=256*200=51200
Eunit=800                     'set encoder counts to 800
                                       'encoder counts = 4*encoder line count
Ee=1                             'enable encoder mode
Stlde=1                         'enable stall detection
Stlf=.01                         'stall factor. Stepper motors stall when 
                                      'they lag behind by more than 2 full steps
                                      '(2/200)=.01 revolution. Thus Stlf=0.01

Ios 13=3,0,0,0,1,0     'Encoder Channel A input (low true)
Ios 14=4,0,1,0,1,0     'Encoder channel B input (high true)
                                     'logic levels vary depending on the 
                                     'encoder and the direction of count.
                                     '+ moves need a + count.

Ios 21=0,1,0,0,0,0    'set IO 21 as a general purpose output

VAR stalled=21         'declare global variable called "stalled"

Pgm 1                        'enter program mode at address 1
LBL startup               'label designation that executes on power up
Io stalled=0               'set IO 21 to 0 or off
ONER stuck              'On Error transfer execution to a sub routine
                                    'called stuck. ONER acts as a call not a branch.
MOVR 1                     'move relative 1 revolution in the + direction
HOLD 2                     'hold program execution until move is complete
DELAY 500               'delay 500 milliseconds
BR startup                'branch to label startup and repeat program
END                           'end of program
Pgm                           'exit program mode

Pgm 100                   'enter program mode at address 100
LBL stuck                  'label referred to in the "ONER" command
Error=0                      'set ERROR to 0 and clear error
Io stalled=1              'set IO 21 to 1 or on.
END                          'end of program. Clears sub routine stack
Pgm                          'exit program mode

Back to Top


bMicroLYNX software includes 4 pre-programmed Acceleration Type Variables. These are: Linear, Parabolic, Triangle S-Curve, and Sinusoidal S-Curve. For loads requiring an acceleration profile other than the 4 pre-set standards, a user-defined option is available via the ACLTBL command.  The following sample program demonstrates this user-defined acceleration profile command.

VAR Num             'declare variables
VAR C
VAR step
VAR Factor
VAR dist

'***********************************
dist = 30              'set dist to 30 revs after ACLTBL is generated set dist = 50 in the terminal
                            'mode and start the program at "begin2" below
                            'repeat with dist = 60
'***********************************

Munit = 51200    '51200 steps per rev
Vm = 5                'Max Vel set to 5 RPS
Accl = 1              'set accel to 1 P/S/S
Decl = 1              'set decel to 1 R/S/S

Pgm 1                'enter the program mode at line 1
LBL begin          'begin label
Num = 1             'set Num to 1
step = 0              'set step to 0
factor = 0           'set factor to zero factor is a fractional number that is the average
                          'of all the points generated in the table

C = 1/127          '0.007874015 constant increment for each table entry
Aclt = 0              'Accel type user defined
Dclt = 0              'Decel type user defined
Ldclt = 0            'Limit Decel user defined

'******************************************
LBL loop1 
Acltbl Num = step         'each time through the loop sets the appropriate table value
                                      'sets ACLTBL 0 through 127
factor = factor + step    'sum all the table values DON'T PRINT "Num = ",Num, " step = ",step
Num = Num + 1             'increment the table target
step = step + C             'increase the step value by C
BR loop1, Num < 128    'stay in this loop until num is 128
'************************************************

Acltbl Num = step          'set the ACLTBL 128 value DON'T PRINT "Num = ",Num, " step = ",step
factor = factor + step    'sum all the table values
num = num +1               'increment the table target this new target allows a second 1.0 value
                                      'to be placed in the table one is at location 128 and the other is 129 
'************************************************

LBL loop2
Acltbl Num = step         'each time through the loop sets the appropriate table value
                                      'sets ACLTBL 129 through 256
factor = factor + step    'sum all the table values DON'T PRINT "Num = ",Num, " step = ",step
Num = Num + 1             'increment the table target
step = step - C              'decrease the step value by C
BR loop2, Num < 256    'stay in this loop until num is 256
'************************************************

Acltbl Num = step         'set the ACLTBL 256 value DON'T PRINT "Num = ",Num, " step = ",step
'************************************************

Acltbl 0 = factor/256     'caculate the average value and store it in the scale factor loction zero

                                      'DON'T PRINT Acltbl Num
                                      'DON'T DELAY 10000 'wait 10 seconds to allow print to complete

LBL begin2                   'once the ACLTBL is generated you can start the 
                                      'program here to generate velocity information
MOVR dist                    'can set dist to diferent values and see results
LBL loop3
PRINT Vel                     'print present velocity
DELAY 50                    ' slow down print cycle prevents the print buffer from overflowing
BR loop3, Mvg = 1        'branch to loop3 and print velocity while motor is still moving
PRINT Vel 
DELAY 1000                 'delay 1 sec to allow print to complete



END                               'end program
Pgm                               'exit program mode

Back to Top


Flow Control Using a MicroLYNX
with an Analog Input Module

 
Click to enlarge

Flow control represents a large potential market for IMS products. The MicroLYNX with the Analog Input/Joystick module is ideally suited for closed-loop flow control applications in industries ranging from medical equipment to bottling.

 In this case the MicroLYNX has a flow sensor with a 0 to 5-volt, ( or 4 to 20mA) output connected to an analog input. As liquid flows past the sensor, the sensor will output a voltage based upon the volume of liquid flowing past it.
This feedback will translate to motor steps to accurately position a stepper motor. This motor is regulating the flow of liquid by "throttling" a ball valve, which is located up stream from the sensor.

The error correction in the system may be accomplished using a PID loop in the LYNX program. As the system starts up, the flow rate will approach a specified value, or the SET RATE. This value will be stored as a LYNX user variable. The voltage seen at the input of the analog module will be sampled periodically and stored to a LYNX user variable declared for the ACTUAL RATE. The program may then use the math functions to calculate the difference between the set rate and actual rate in the fashion FLOW RATE ERROR = SET RATE - ACTUAL RATE. This difference is stored in a user variable set for the flow rate error.

The MicroLYNX will position the motor, thus opening and closing the valve, based upon the value of the flow rate error, as the error approaches 0, the motor will stop and wait for the next round of samples. The MicroLYNX will continue to sample and adjust the valve opening to regulate the liquid flow to the set rate.

Using the MicroLYNX/Analog input module in this fashion would accurately regulate the flow of liquid through the system. This type of system configuration will work well in flow control applications where the flow of liquid needs to be accurately and consistently regulated.

Additional sensors may be connected to the MicroLYNX I/O to control other events in the system such as closing the valve when a reservoir is full, when a leak is detected, or after a specific volume of fluid has passed the flow sensor.

Proportional flow control is only one of a vast array of potential applications where the MicroLYNX, and its customizable I/O set, can make the difference for your customers in terms of price, power, and package.

Back to Top


bThe following 6 applications are the result of an informal survey conducted by the IMS Applications Engineering Department to learn the most common LYNX/MicroLYNX 1 and 1-1/2 axis applications. The application examples are downloadable in PDF format and contain diagrams, flowcharts and program codes for the applications listed below. The program text file is also downloadable by right-clicking (shift-click for Netscape Navigator users) the text file icon next to the application name and selecting "Save Target As".

And Or                   Register                  Read And Feed                       On The Fly

Feed And Cut          Traverse                Download Sample MicroLYNX Applications

Back to Top


Factory floors all around you are being automated with Step Motor Controllers and Drives. Manufacturers are seeing the advantages of automation with increased through put and higher consistency in the end product.

One very common automation application is called Cut-to-Length. In this application, the IMS Lynx Controller can be used to prompt a machine operator on the factory floor to enter the length and number of pieces to be cut.

The application does not specify a Drive, however, the Lynx Controller has the ability to control a number of Drives including Microsteppers, Half/Full Step, Digital Servos and Vector Drives. This application highlights the power of Lynx to serve complex applications. The Lynx Controller's functionally rich instruction set allows machine operators to interface with the Lynx without requiring that they know how to program. The machine operator would only see the data (or text) printed to the terminal.

Below, the LYNX Controller demonstrates its ability to print data (or text) to a dumb terminal, prompting the user to set parameters like feed length and quantity of pieces to be cut. Once the length and quantity are entered the machine operator simply pushes a Start button and the Lynx Controller automates the entire process. When the quantity of pieces have been cut the Lynx Controller would prompt for a new length and quantity, starting the process over.

Below is the program the System Designer would write for the Lynx Controller. Although the program can be expanded to accommodate other motion control functions in an application, this simplified version shows the Commands used for a machine operator interface application as described above.

Commands:

IOS 21=0,0,0,0,0,0                
MUNIT=51200/25                         
VAR length                                 
VAR qty                                 
VAR total                                
VAR start=21                         
VAR inactive=0                         
PGM 1                                 
LBL ent_data                         
PRINT "Enter desired length"        
INPUT length                         
PRINT "Enter desired quantity" 
INPUT qty                                 
LBL wait                                 
BR wait,io start=inactive        
LBL run                                 
MOVR length                         
HOLD 2                                
INC total                                
BR run,total<qty                         
PRINT "Process done"                
TOTAL=0                                 
BR ent_data                        
END                                        
PGM   

Download Program Text File

Back to Top

Comments:

'configure input 21
'scale steps for user units, application specific
'create user variable
'create user variable
'create user variable
'create user variable
'create user variable
'enter program at address 1
'create user label
'print data to terminal
'set variable to entered value
'print data to terminal
'set variable to entered value
'create user label
'conditional branch
'create user label
'move relative variable value
'hold program until move is complete 
'increment variable by one
'conditional branch
'print data to terminal
'reset variable to zero
'unconditional branch
'define end of program 
'exit from program mode


Notes about Party Mode Communications

When a unit has been put into Party Mode, all communications require a Ctrl J (linefeed) to clear the buffer and act as an end of line delineator. Communications then must begin with the desired unit's device name. The device name is the only command in the Lynx software language that IS case sensitive. It can be set either via the Address Switches on the side of the unit, or via the software command DN (for example DN="A" sets the unit to be A, whereas DN="a" sets the unit to be lowercase a). It should also be noted that if the Address Switches have been set to a specific device name, it will override any software set device name.

Once the Ctrl J has been issued, each MicroLynx in the system them waits for its device name. If its device name is not the first character it sees, it will disregard all other characters until the next Ctrl J is issued.

It is a common practice in Party Mode systems to turn the echo off for the units not directly connected to the PC. This cleans up confusion for units either accepting their commands or waiting for their device name. However, when the echo has been turned off, it will appear that the unit is not communicating. The ECHO command can be turned on by issuing the ECHO = 0 command. This turns on the echo for both RS-232 and RS-485 lines. It should be noted that if the echo is off, you will not see the typed command to turn it back on.

Another common problem is when there is a program residing in the problem unit. It may have commands executing such that one does not appear to be communicating when, in reality, there is just insufficient time to input your entire command. This can occur due to a print command in the program, or a hardware switch that is overriding the system (a "start input" for example).

Finally, the unit connected to the PC may have been set to have a different BAUD rate than the PC setting. In this situation, you must attempt to establish communications at each available BAUD rate (4800, 9600, 19200, and 38400). Unfortunately, if this is the problem, you may have to attempt each fix at each BAUD rate.

The following is a sequence for troubleshooting Party Mode Communications

Hardware

  1. Connect to only one MicroLynx at a time.
  2. Make sure that the UPGRADE DIP switch on the side of the unit is in the OFF position (Toward the Fan).
  3. Check that the communications cable is functional by either using it with another unit, or by shorting transmit (TX) to receive (RX) (Shorting allows all typed characters to be directly echoed back to the terminal). This test will verify the functionality of the communications cable.
  4. To simplify things, set the Address DIP switches to Address 0 = ON, Address 1 = OFF, and Address 2 = OFF. This way we know that the unit will be device "A" since the hardware address settings override any software set device name.

Software

  1. Verify that the Terminal Window says "Connected" (if not, double click where it says "Disconnected" to connect, or use the phone icon in the toolbar).
  2. Type Ctrl J, then capital A into the Terminal Window. (If A is echoed back to the screen, skip ahead to "Resetting Factory Defaults")
  3. If nothing appears, type ECHO=0, then Ctrl J into the Terminal Window and Repeat Step 2. Note: you will not see the letters as you type ECHO=0. (If you have hit any other key, or lowercase "a", you will need to type Ctrl J, then A before ECHO=0)
  4. If you still do not see the A after setting the echo back on, try typing Ctrl C while watching the Green LED on the top of the MicroLynx. If the Light blinked once, then you are communicating (you just simulated a cycle power) and the unit must either be running a program or have a hardware switch overriding the system. If the light did not blink, re-check your Hardware wiring, verify that you have the correct input voltage range, and double check the cable again (If still there is no response, contact Applications Support).
  5. To try to stop a program from running, you can type Ctrl J, then A, then hit the ESC key. Then repeat step 2. If there is something printing to the screen, you must get the Ctrl J, A, and ESC input between print lines.
  6. If a hardware switch could be interrupting communications, it will be necessary to manually change the state of each switch. (This can be done by turning the DIP switches for the I/O lines into the ON position, then connecting a wire from each I/O line to ground (Pin 8) one by one and testing communications).
  7. If your unit could have been set to a BAUD rate other than the Factory Default (9600), then you must attempt the above steps at each Baud rate available (Go to Edit>>Preferences>>Comm Settings, then select and apply).
  8. If all attempts fail, contact IMS Applications Support (see above).

Resetting Factory Defaults

  1. If you have typed the Ctrl J, then A, and you saw an A appear in the Terminal Window, next type PARTY=0, then Ctrl J (this will take the unit out of party mode).
  2. Turn the Address DIP switches into the OFF position (otherwise, when you power down and back up, it will revert back to party mode with the specified address).
  3. Next, type RTFD into the Terminal window (no Ctrl J required) then hit ENTER (this returns the unit to the factory default settings).
  4. Type SAVE into the Terminal window (no Ctrl J required) then hit ENTER (otherwise it will revert back to the previous saved settings when power is cycled).

Your unit is now set back to the factory defaults.

Back to Top


When discussing motion control, there is seldom a clear path to accomplish the desired application. Often the correspondence knows the end result of what the system must accomplish, but is not clear on the decision process of what controller will do the job. Both in the controllers capability and cost. And of course, no two applications are the same, so this phenomena simply repeats itself. The LYNX multi-axis stand alone controller will handle the most demanding single-axis applications as well as many that previously required an expensive multi-axis controller.

One example of a multi-axis application is that in which a customer wants to apply an even amount of paint upon a flat surface. The paint is distributed by a human operating a paint gun that is hovering above the product surface on an X/Y Gantry. A constant flow of paint would force the operator to move in very consistent even strokes. Since human error is unavoidable with a constant flow system, the flow must vary with the movements of the operator. Because the movements of the operator are restricted to the X/Y plane, we can generate a velocity feedback from both the X and the Y axis. From the two velocities we can generate a linear velocity based on Pythagorean's Theorem.

Sounds like an expensive unit to close the loops and calculate the desired data. If you get a unit that can handle the feedback and provide the math capability, you still need an unit to drive the pump. There are systems that can handle this capability, your boss's jaw will hit the floor when you tell him the price, but this is not rocket science. IMS has an inexpensive system that has proven to be a much more powerful controller than it was intended to be. The LYNX Controller was our solution to this customer's application.

We accomplished this application because of the flexibility of the I/O and the power math capabilities. The LYNX has three differential counters available for a combination of high-speed Inputs and Outputs. We used two of these for the X and Y axis and a third will be configured as an output to drive the pump. Now the tricky part. You need the speed of the two inputs. We accomplished this by creating user variables and scanning the two input counters for a change in value. Then we just do the math and the output is a function of these inputs.

Back to Top


When you say Multi-Axis, what do you define it as? I define it as Synchronized motion of more than one axis capable of circular and as a minimum linear interpolation. However, most multi-axis applications do not need circular interpolation or synchronized motion. Most of these applications are two axes working sequentially.

Users usually have three options. First, they can buy a multi-axis card that simply is plugged into a computer slot. A multi-axis card is a fine solution, but it makes a PC a required component in the system. The second option, a better solution as far as real estate is concerned, is using a stand-alone multi-axis controller. Only this stand-alone has a price tag that will often lean you back towards the bulky PC. Then we have the PLC with the optional motion modules, and though the limited Step Clock Frequency. They work, but the PLC usually requires 24 vdc, and often the Motor drivers want to see more like 45 to 75 vdc. This means two power supplies.

Often, PLCs do not give the motion performance required. Users where buying PLCs for the I/O benefits, but were buying IMS microsteppers with embedded indexer to perform the motion. IMS saw a hole in the industry for a quality motion controller that will replace the PLC in most cases, and control up to three axes. It is a stand-alone motion controller that offers up to 24 user defined I/O, and an added bonus; it can run off of the same bus voltage as the motor drivers.

The LYNX with its three clocks lends itself to controlling two or three axes sequentially. The following program demonstrates this ability. The demo uses two IM483s and one IB462. Each drive is controlling an M2-2215 motor. Each motor has a turntable, which is divided into 10 increments. The LYNX and the three step motor drivers are all powered from a single supply, the ISP200.

The LYNX prompts the user for the X, Y, & Z coordinates, then one at a time each axis moves to its desired position. The program below shows the "makes sense" mnemonic language. The combination of relatively easy learning curve of the software, the noise resilient I/O, and the ability to control several Axes, will assert the LYNX as a center piece of many control systems.

Back to Top


The IB Series of Halfstep/Fullstep drives are robust little drives that pack a lot of power into a small package. Using IB drives can provide the most cost effective solution in applications that do not require microstepping.

The following application called for moving an adhesive spray head using a timing belt actuator. The stroke length was 3 feet, the spray head was quite heavy and the stop/start distance was less than 1 inch. In order to ensure uniform application of the adhesive, the spray head had to be up to speed over the entire 36 inch stroke. To make matters worse, the motor and power supply had already been selected. The motor was a 23 frame rated at 2 amps and the supply voltage was 36 VDC.

After completing the torque and inertia calculations it was apparent that this would be a difficult application. The inertia mismatch turned out to be more than 20:1 and the acceleration/deceleration time worked out to be approximately 50ms. The performance numbers were marginal at best but the only drive that could operate on 36 volts, put out 2 amps and still meet the cost objective was the IB462.

An IB462 drive was installed and tested without success. The motor would stall halfway through the acceleration ramp. After making adjustments to the motion profile the slew velocity could not be reached in less than 100 ms. Next, the drive was changed from full step to half step mode. Half step mode produces torque fluctuations not found in full step or microstepping, but it has the characteristic of reducing the effects of motor resonance somewhat. At this point the system could attain slew velocity in 50 ms but not consistently and it tended to overshoot the destination during deceleration.

It was apparent that the flexible self aligning coupling that was being used between the motor and load was contributing to the problem. A low cost, rigid, shaft coupling was installed and this was the finishing touch. By using a stiffer coupling the overshoot problem was corrected. The system now met the performance requirements reliably and with a healthy safety margin.

Back to Top


Recently, we've been conducting research in the field with our IM483I2 Indexer/Driver for multi-axis machine applications. One in particular is an application that involved rotating a 6 inch diameter plastic disk at 1 RPM for timed light transmission through fiber optic cables. (This is on a special effect device for a large entertainment company here in California.)

The customer selected on their own, an Eastern Air Devices NEMA 17" hybrid, driven by the IM483I2 indexer/drive with an IP402 Power Supply. The reflected load inertia to rotor ratio calculated out to 45:1. However, with the speed low and the ramp rate un-important, we determined that the motor was appropriate to drive the load. This particular motor was unipolar (6 leads) with coils connected in series leaving the center taps dangling. The disk was directly coupled to the motor shaft.

Initially, the motor ran roughly so we adjusted the step resolution to 1/16. The velocity smoothed out slightly, but not enough to satisfy the customer. Then the current was increased to provide more torque in order to compensate for the large inertia mismatch, but this made the motor run even rougher.

We started decreasing the current resulting in a gradual smoothing of velocity. At this point, the step resolution was increased to 1/64th keeping the velocity at 1 RPM, and the wheel started running very smoothly. I continued reducing the current down to 5% and kept the resolution at 1/64th. The velocity was steady enough for a projector light to be shown through the disk, which had a series of holes in various places, creating a twinkling light array through the fiber optic cable. And judging by the twinkle in his eye, it was obvious the customer was pleased that the IM483I2 indexer/drive was able to perform at a very low speed without erratic motion.

It's important to remember, when sizing a stepper motor system to consider the velocity and ramp rate the motor will perform at because not all applications require a 10:1 reflected load to rotor ratio. This is a rule of thumb with built-in margin so you don't have to oversize the system. In some applications, (like this one) you can go higher than a 10:1 ratio because the velocity and acceleration rates are low. Also, in certain applications the right amount of current into the motor can effect the velocity smoothness.

Back to Top


What is Noise:
"Noise" or "Interference" consists of unwanted electrical signals which superimposes on and masks the desired signal. Designing a control system is challenging enough, but designing a control system that has noise immunity adds a whole other dimension. Ideally, you want the noise-to-signal ratio to be as small as possible. Noise is always present in a system that involves high power and small signal circuitry. The key is to manage the noise so that it does not interfere with the performance of the system at hand.

Sources of Noise:
Sources of noise can be external to the stepper motor system as well as within. The most common external sources are relays and motors. Internally, the relatively high current motor drivers are the source. All bi-polar stepper motor drivers apply a chopping function to the applied voltage of each phase. This chopping enables use of higher voltages than the motor is rated for, achieving higher speeds while keeping the motor from getting too hot. The combination of the chopping and inductance of the motor creates noise on the ground plane. This [ground plane noise] can be introduced into nearby external systems if proper wiring and shielding precautions are not taken. The result can be intermittent failures of the system as a whole.

Components of Noise & How to Manage Them:
In order to manage noise it is important to understand its components. Noise [Interference] is categorized into two groups: radiated and conducted. Radiated interference is transmitted by electromagnetic fields and picked up by the antenna effect of other equipment. If it were always possible to isolate susceptible receivers and radiating sources from one another, radiated interference would be more manageable. As distance increases, radiation fields become weaker thus energy becomes dampened along a conduction path. Unfortunately with toady's limited system real-estate, distance isn't usually an option. Reducing the antenna effect and adding shielding, controls this type of interference. (Improper shielding can cause more problems than no shielding at all.(See Rules of Shielding.)

Conducted interference is that which is introduced into a circuit by either direct or indirect coupling. Both direct and indirect coupling are classified into three specific types: Resistive, Capacitive, and Inductive. These types of coupling are most frequent where common return circuits and power supply grounds exist. Conducted interference can originate from a variety of sources, such as relay and switch contacts, fan motors, power switching or digital devices with short rise and fall times. The effect of conducted interference cannot be eliminated as easily as shielding eliminates the effect of radiated interference. Good wiring practices are necessary to minimize Conducted interference. Give close consideration to connections to and from power supplies. Give particular attention to common grounds. Ultimately, the whole system must be referenced to them. (See Rules of Wiring.)

How to Detect Noise:
The first step in troubleshooting a noise problem is acquiring the right tools for the task. An isolated Oscilloscope is the chosen tool for detecting noise. A battery powered scope [if one is available] achieves the best circuit isolation, however a scope with an isolated ground will still be an effective tool. Also, keep in mind that a Digital scope may mask the noise depending on it's sample rate and frequency response. Therefore, an Analog Oscilloscope is better than a Digital scope for detecting asynchronous signals of high frequency such as noise. Along with the scope a wiring diagram and a basic knowledge of the systems operation are the best tools. The next step is to simplify the system. Start by removing power then disconnect all system components from the Stepper Driver that are not absolutely necessary for basic motion. Keep an open mind, even experiment a little by using a jumper wire to introduce noise and simulate the failure mode you are experiencing. Remember there may be more than one noise source.

IMS encourages our customers to ask questions and take advantage of our Application Support Team early in your design. We can review your system and make suggestions on the interfacing and wiring practices. We may suggest other tips not listed below that are application specific; but as a starting point refer to "Good Wiring and Shielding Practices" for the basic rules.

Good Wiring and Shielding Practices

  • Find the Noise 

  • Disconnect all unnecessary I/O. 

  • Connect I/O one at a time until problem reoccurs. 

  • Shut down any other equipment that may be emitting noise. 

Rules of Wiring

  • Power Supply and Motor wiring should be shielded twisted pairs, and run separately from signal-carrying wires. 

  • A minimum of one twist per inch is recommended. 

  • Motor wiring should be shielded twisted pairs using 20 gauge, or for distances of more than 5 feet, 18 gauge or better. 

  • Power ground return should be as short as possible to established ground. 

  • Power supply wiring should be shielded twisted pairs of 18 gauge for less than 4 amps DC and 16 gauge for more than 4 amps DC. 

  • The shield must be tied to zero-signal reference potential. It is necessary that the signal be earthed or grounded, for the shield to become earthed or grounded. Earthing or grounding the shield is not effective if the signal is not earthed or grounded.

  • Do not assume that Earth ground is a true Earth ground. Depending on the distance from the main power cabinet, it may be necessary to sink a ground rod at the critical location.

  • The shield must be connected so that shield currents drain to signal-earth connections. 

  • The number of separate shields required in a system is equal to the number of independent signals being processed plus one for each power entrance.

  • The shield should be tied to a single point to prevent ground loops. 

  • A second shield can be used over the primary shield, however the second shield is tied to ground at both ends. 

Back to Top


Many times, more than one technology is suitable for a given motion control application. Pneumatic cylinders are frequently used for simple stroke limited or cut to length applications because of low cost and simplicity. Air cylinders may sometimes be an acceptable solution but they are not always the best.

Take the case of a packaging equipment manufacturer we recently worked with. His machine was based on a modular design that could be adapted to different boxes depending on the end Customer. The primary function of his machine was filling, folding and sealing boxes and it worked well. Some Customers needed desiccant bags put in the box before sealing so a separate modular section was added to the machine for this purpose.

The desiccant bags come on a reel with a registration hole punched in between each bag. The bags must be separated by cutting at or near the registration hole and then placed one to a box. Air cylinders were used as the feed to length and cutter actuators and a PLC controlled the motion. The PLC took its input from a photo-cell used to detect the registration hole. Relays and solenoid valves on the output of the PLC controlled the air which drove the cylinders.

This arrangement worked OK but in order to handle different sized desiccant bags, the machine had to be completely reworked. At 80 bags per minute maximum, the desiccant bag feeder was the limiting factor for through put. In addition to this, the air cylinders were the only things that needed compressed air on the entire machine. Experience with the first machine showed that they were also noisy, dirty, and required regular maintenance.

With guidance from IMS, the machine was reworked with a vastly superior stepper solution. The feed mechanism was replaced by a pinch roller driven by an M2-4247-S Stepper Motor and a Panther HI2 microstepping drive. The pneumatic cutter was replaced with an electric cutter and controlled by a relay which was controlled by the Panther HI2 . The Panther was programmed to move at constant velocity until the registration hole was detected. Once detected the drive would advance a fixed number of microsteps from that position, then stop and fire the cutter. The desiccant bag cutter module would now work with any size bag without any adjustments or reprogramming required.

This stepper approach resulted in a superior system. Precision was improved and scheduled maintenance was reduced to sharpening the cutter blade. Adaptability to different desiccant bags went from very difficult to completely automatic and transparent. The stepper solution was smaller and required less wiring and panel space. Through put went from 80 bags per minute to 200 bags per minute, and the machine no longer required compressed air. The best news incidentally was that including assembly labor and materials the IMS stepper solution cost about the same.

Back to Top


The Automotive industry is exploding with applications perfect for stepper motors. Whether it's in the end product or part of the production process, stepper motors are making it easier for Control Engineers to do their job. Recently, we worked with one such application where a customer wanted to measure the wheel-well height as a quality control check on the assembly line.

Using a Panther HI2 Microstepping Driver and a linear actuator, a sensor was used to detect the top of the wheel-well. However, the customer did not want the linear actuator to ever exceed a determined distance which equated to 2000 steps. Using the trip command "T", we set the trip point. Then, moving the actuator at a constant velocity using the "M" command, we looped on one of the general purpose inputs until the sensor detected the wheel-well. The loop "wait until" command, "L2048" allowed the program to fall through when input became true and stopped the motion. Then the "Z" command sent the position to a PLC. If the sensor did not detect the wheel-well, then the trip would stop the motion at 2000 steps, return to start position, and flag the PLC using one of the general purpose outputs that no wheel-well was detected. Overall, the learning curve for the indexer commands was small and the customer was very pleased.

Back to Top


Typically, variable speed applications require the use of an expensive controller. However, IMS has an inexpensive Indexer that will control a stepper motor driver. And given the advances in today's digital technology, interfacing a stepper motor system makes for a preferred solution.

I recently had a customer who was using our indexer drivers for various other applications. He was so impressed with the ease of programming and interfacing, he insisted on using our drive for this variable speed application. So, we went to work, and came up with a solution. Keeping in mind that the specs on the stepper motors are max ratings, depending on your application, you may need to de-rate the motor.

Before power up, a speed range is selected. Then after the ready light is on, the selector switch is put into the Run position and the Start button starts the motor turning. Each range has 40 speeds which are controlled by input 1 and input 2. The selector switch used in this application was a 8 position BCD out, a PLC or equivalent could achieve the same effect. The Speed increase and Decrease and the Start buttons are all momentary switches.

It worked great for his application of rotating a product against a grinder, and I had fun figuring out how he could do it.

Back to Top

 

For assistance, contact IMS applications support:

(860) 295-6102, E-mail: etech@imshome.com

Appfeb.jpg (16758 bytes)

Click to Enlarge

 

IMS Logo Wide

370 N. Main St., P.O. Box 457
Marlborough, CT 06447 U.S.A.
Phone: 860 / 295-6102
Fax: 860 / 295-6107
Email: info@imshome.com

Contact

TECHNICAL SUPPORT (U.S.A.)
Phone: 860 / 295-6102
Fax: 860 / 295-6107
E-mail: etech@imshome.com

IMS ASIA PACIFIC OFFICE
30 Raffles Pl., 23-00 Caltex House
Singapore 048622
Phone: +65 / 6233 / 6846
Fax: +65 / 6233 / 5044
E-mail: wllee@imshome.com

IMS EUROPEAN SALES MGT.
4 Quai Des Etroits
69005 Lyon, France
Phone: +33 / 4 7256 5113
Fax: +33 / 4 7838 1537
E-mail: bmartinez@imshome.com

IMS UK Ltd
.
Sanderson Centre
15 Lees Lane
Gosport,Hampshire, UK  PO12 3UL
Phone: +44 / 0 2392 520775
Fax: +44 / 0 2392 502559
E-mail: mcheckley@imshome.com

U.S.A. SALES OFFICES
Eastern Region 

Phone: 973 / 661-1270
Fax: 973 / 661-1275
E-mail: jroake@imshome.com

Central Region
Phone: 260 / 402-6016
Fax: 419 / 858-0375
E-mail: dwaksman@imshome.com

Western Region
Phone: 602 / 578-7201
E-mail: dweisenberger@imshome.com