Advanced Microstepping Motion Control Chipset Features Internal generation of microstepping signals 2-phase as well as 3-phase stepper motors 64 microsteps per full step S-curve, trapezoidal, and velocity profile trajectory modes Incremental encoder feedback On-the-fly motor stall detection Software & feature compatible with other versions of PMD's chipset family Available in 1 or 2 axis configurations 32-bit position, velocity, acceleration and jerk trajectory profile registers Electronic Gearing Two travel-limit switches per axis Choice of PWM or DAC motor output signals Chipset Developer's Kit Available Microstepping Waveforms Phase B 90 Deg Microsteps 64 128 192 256 3-Phase Stepper Phase A 120 Deg Phase B Phase C General Description The MC1241A is a dedicated motion processor which functions as a complete chip-based stepper motor controller. Packaged in a 2-IC chipset, this device performs trajectory profile generation and microstepping signal generation. The chipset outputs PWM or DAC-compatible motor command signals which directly drive the windings of the stepping motor, eliminating the need for external microstepping circuitry. The MC1241A also provides the ability to input incremental encoder signals. It is available in a one, or a two-axis configuration. The MC1241A is functionally similar to other members of PMD's 1st Generation Motion Processor Family however it adds the ability to perform micrstepping signal generation. All of these devices provide sophisticated trajectory generation allowing the creation of complex motion sequences. 2-Phase Stepper Phase A MC1241A MC1141A 320 Both two and three-phase stepping motors are supported by the MC1241A. An internal ROM-based lookup table is used to generate the microstepping waveforms. The motor power level can be controlled with a resolution of 16 bits. Changes to the motor power level can be coordinated with other profile changes to optimize motor heat dissipation under different load and acceleration conditions. The chipset is controlled by a host processor which interfaces with the chipset via an 8-bit, bi-directional port. Communications to/from the chipset consist of packet-oriented messages. The chipset is packaged in 2 68-pin PLCC packages. Both chips utilize CMOS technology and are powered by 5 volts. Doc. Rev. 11.03, Nov 1997 Performance Motion Devices, Inc. 12 Waltham St. Lexington, MA 02421 tel: 781.674.9860 fax: 781.674.9861 www.pmdcorp.com Table of Contents Host Interrupts.......................................................Page 28 Encoder Position Feedback ..................................Page 29 High Speed Position Capture............................Page 29 Position Capture ReadBack ..............................Page 29 Stall Detection ...................................................Page 29 Position Error ....................................................Page 30 Recovering From A Motion Error ......................Page 30 Microstepping........................................................Page 30 Microstepping Waveforms.................................Page 31 Motor Command Control...................................Page 31 AC Induction Motor Control...............................Page 31 Command Summary .........................................Page 32 Motor Output .........................................................Page 32 Motor Output Signal Interpretation ....................Page 32 DAC16 Decoding...............................................Page 32 PWM Decoding .................................................Page 32 Motor Drive Configurations ...............................Page 33 3-Phase Drive Configuration .............................Page 33 Host Commands .....................................................Page 34 Command Summary .............................................Page 34 Command Reference ............................................Page 36 Axis Control.......................................................Page 36 Profile Generation .............................................Page 37 Parameter Update.............................................Page 41 Interrupt Processing ..........................................Page 43 Status/Mode ......................................................Page 44 Motor Control ....................................................Page 45 Encoder.............................................................Page 46 Miscellaneous ...................................................Page 48 Microstepping....................................................Page 49 Application Notes ...................................................Page 52 Interfacing MC1241A to ISA bus...........................Page 52 PWM Motor Interface ............................................Page 54 16-Bit Serial DAC Motor interface .........................Page 56 Product Family Overview....................................... Page 3 Introduction........................................................... Page 3 Family Summary................................................... Page 3 Electrical Characteristics....................................... Page 4 Absolute Maximum Ratings.................................. Page 4 Operating Ratings................................................. Page 4 DC Electrical Characteristics ................................ Page 5 AC Electrical Characteristics ................................ Page 5 I/O Timing Diagrams............................................. Page 7 Pinouts .................................................................... Page 12 MC1241A, MC1141A Pinouts............................... Page 12 Pin Descriptions.................................................... Page 13 Theory of Operations ............................................. Page 17 Operational Parameters ....................................... Page 18 Trajectory Profile Generation................................ Page 18 S-curve Point to Point....................................... Page 19 Trapezoidal Point to Point................................. Page 20 Velocity Contouring........................................... Page 20 Electronic Gear................................................. Page 21 Trajectory Control .......................................................... Page 21 Halting The Trajectory ...................................... Page 21 Motion Complete Status ................................... Page 22 Parameter Loading & Updating ............................ Page 22 Manual Update ................................................. Page 22 Breakpoints....................................................... Page 23 Disabling Automatic Profile Update .................. Page 23 Travel Limit Switches........................................ Page 23 Axis Timing ........................................................... Page 24 Host Communications .......................................... Page 25 Electrical Interface ............................................ Page 25 Packet Format .................................................. Page 25 Packet Checksum............................................. Page 26 Illegal Commands............................................. Page 26 Command Errors .............................................. Page 26 Axis Addressing................................................ Page 27 Axis Status............................................................ Page 27 Status Word...................................................... Page 27 Miscellaneous Mode Status Word .................... Page 27 Performance Motion Devices, Inc. does not assume any responsibility for use of any circuitry described in this manual, nor does it make any guarantee as to the accuracy of this manual. Performance Motion Devices, Inc. reserves the right to change the circuitry described in this manual, or the manual itself, at any time. The components described in this manual are not authorized for use in life-support systems without the express written permission of Performance Motion Devices, Inc.. 2 Product Family Overview # of axes Motors Supported Encoder Format Output Format S-curve profiling Electronic gearing On-the-fly changes Limit switches PID & feedforward PWM output DAC-compatible output Pulse & direction output Index & Home signal Chipset p/n's Developer's Kit p/n's: MC1401 series 4, 2, or 1 DC Servo Incremental (no dash version) and Parallel ('-P' version) DC servo Yes Yes Yes Yes Yes Yes Yes Yes MC1401A, MC1401A-P (4 axes) MC1201A, MC1201A-P (2 axes) MC1101A, MC1101A-P (1 axis) DK1401A, DK1401A-P MC1231 series 2 or 1 Brushless Servo Incremental MC1241 series 2 or 1 Stepper Incremental MC1451 series 4, 2, or 1 Stepper Incremental (-E version) Sinusoidally commutated Yes Yes Yes Yes Yes Yes Yes Yes MC1231A (2 axes) MC1131A (1 axis) Microstepping Pulse and Direction Yes Yes Yes Yes Yes Yes Yes MC1241A (2 axes) MC1141A (1 axis) DK1231A DK1241A Yes Yes Yes Yes Yes Yes (-E version) MC1451A, MC1451A-E (4 axes) MC1251A, MC1251A-E (2 axes) MC1151A, MC1151A-E (1 axis) DK1451A Introduction Family Summary This manual describes the operational characteristics of the MC1241A and MC1141A Motion Processors. These devices are members of PMD's 1st generation motion processor family, which consists of 16 separate products organized into four groups. MC1401 series (MC1401A, MC1201A, MC1101A, MC1401A-P, MC1201A-P, MC1101A-P) - These chipsets take in incremental encoder signals (standard version) or parallel word encoder signals (-P version) and output a motor command in either PWM or DACcompatible format. These chipsets come in 1, 2 or 4 axis versions and can be used with DC brushed motors, or brushless motors using external commutation. Each of these devices are complete chip-based motion controllers. They provide trajectory generation and related motion control functions. Depending on the type of motor controlled they provide servo loop closure, on-board commutation for brushless motors, and high speed pulse and direction outputs. Together these products provide a software-compatible family of dedicated motion processor chips which can handle a large variety of system configurations. MC1231 series (MC1231A, MC1131A) - These chipsets take in incremental quadrature encoder signals and output sinusoidally commutated motor signals appropriate for driving brushless motors. They are available in one or two axis versions. Depending on the motor type they output two or three phased signals per axis in either PWM or DAC-compatible format. Each of these chips utilize a similar architecture, consisting of a highspeed DSP (Digital Signal Processor) computation unit , along with an ASIC (Application Specific Integrated Circuit). The computation unit contains special on-board hardware such as a multiply instruction that makes it well suited for the task of motion control. MC1241 series (MC1241A, MC1141A) - These chipsets provide internal microstepping generation for stepping motors. They are available in a one or a two-axis version. Two phased signals are output per axis in either PWM or DAC-compatible format. An incremental encoder signal can be input to confirm motor position. Along with a similar hardware architecture these chips also share most software commands, so that software written for one chipset may be reused with another, even though the type of motor may be different. MC1451 series (MC1451A, MC1251A, MC1151A, MC1451A-E, MC1251A-E, MC1151A-E) - These chipsets provide very high speed pulse and direction signal output appropriate for driving step motorbased systems. They are available in a one, two, or four-axis version and are also available with quadrature encoder input. This manual describes the operation of the MC1241A and MC1141A chipsets. For technical details on other members of PMD's 1st generation motion processors see the corresponding product manual. Each of these chipsets has an associated Chipset Developer's Kit available for it. For more information contact your PMD representative. 3 Interconnections between the two chips consist of a data bus and various control and synchronization signals. The following table summarizes the signals that must be interconnected for the chipset to function properly. For each listed signal the I/O chip pin on the left side of the table is directly connected to the pin to the right. Electrical Characteristics Overview I/O Chip Signal Name CPData4 CPData5 CPData6 CPData7 CPData8 CPData9 CPData10 CPData11 CPAddr0 CPAddr1 CPAddr2 CPAddr3 CPCntr0 CPCntr1 CPCntr2 CPCntr3 CPWrite CPClk The MC1241A consists of two 68 pin PLCC's both fabricated in CMOS. The Peripheral Input/Output IC (I/O chip) is responsible for interfacing to the host processor and to the position input encoders. The Command Processor IC (CP chip) is responsible for all host command, trajectory, and microstep computations, as well as for outputting the PWM and DAC signals. The following figure shows a typical system block diagram, along with the pin connections between the I/O chip and the CP chip. Motor (2 axis) Encoder (1-2 axis) Amplifier (1-2 axis) Data4-11 I/OAddr0-3 I/O I/OWrite I/O Chip Pin 18 5 6 7 8 17 3 1 68 27 29 12 20 36 22 63 2 46 CP Chip Signal Name Data4 Data5 Data6 Data7 Data8 Data8 Data10 Data11 I/OAddr0 I/OAddr1 I/OAddr2 I/OAddr3 I/OCntr0 I/OCntr1 I/OCntr2 I/OCntr3 I/OWrite ClkOut CP Chip Pin 50 49 46 43 40 39 36 35 28 9 6 5 16 18 68 67 15 19 CP For a complete description of all pins see the 'Pin Descriptions' section of this manual. I/OCntrl0-3 ClkOut Absolute Maximum Ratings Host Processor Unless otherwise stated, all electrical specifications are for both the I/O and CP chips. The CP and I/O chips function together as one integrated motion processor. The major components connected to the chip set are the optional encoder (2, or 1 axes), the motor amplifier (2, or 1 axes), and the host processor. Storage Temperature, Ts.....................-55 deg. C to +150 deg. C Supply Voltage, Vcc.............................-0.3 V to +7.0 V Power Dissipation, Pd..........................650 mW (I/O and CP combined) The encoder signals are input to the I/O chip in quadrature format. Two signals encode the position, and an optional index signal contains a once-per-rotation locating signal. Operating Ratings The chipset's motor output signals are connected to the motor amplifier. Two types of output are provided; PWM (pulse width modulation), and DAC-compatible signals used with an external DAC (digital to analog converter). In addition 2-phase as well as 3-phase stepping motors are supported. Because the output signals are in microstepping format, two phased signals are provided per axis, with the relative phasing of the two signals depending on the motor type (2-phase or 3-phase). Operating Temperature, Ta .................0 deg. C to +70 deg. C* Nominal Clock Frequency, Fclk ...........25.0 Mhz Supply Voltage, Vcc.............................4.75 V to 5.25 V * Industrial and Military operating ranges also available. Contact your PMD representative for more information The host processor is interfaced via an 8-bit bi-directional bus and various control signals. Host communication is coordinated by a ready/busy signal, which indicates when communication is allowed. 4 DC Electrical Characteristics (Vcc and Ta per operating ratings, Fclk = 25.0 Mhz) Symbol Vcc Idd Input Voltages Vih Vil Vihclk Vihreset Output Voltages Voh Parameter Supply Voltage Supply Current Min. 4.75 Logic 1 input voltage Logic 0 input voltage Logic 1 voltage for clock pin (ClkIn) Logic 1 voltage for reset pin (reset) Logic 1 Output Voltage 2.4 Vol Logic 0 Output Voltage Iout Iin Iinclk Tri-State output leakage current Input current Input current ClkIn Max. 5.25 100 Units V mA 2.0 -0.3 3.0 Vcc + 0.3 0.8 Vcc+0.3 V V V 4.0 Vcc+0.3 V V -20 -50 -20 0.33 V 20 50 20 uA uA uA Conditions open outputs @CP Io = 300 uA @I/O Io = 4 mA @CP Io = 2 mA @I/O Io = 4 mA 0 < Vout < Vcc 0 < Vi < Vcc 0 < Vi < Vcc AC Electrical Characteristics (see reference timing diagrams) (Vcc and Ta per operating ratings; Fclk = 25.0 Mhz) (~ character indicates active low signal) Timing Interval Encoder and Index Pulse Timing Motor-Phase Pulse Width Dwell Time Per State Index Pulse Setup and Hold (relative to Quad A and Quad B low) Reset Timing Stable Power to Reset Reset Low Pulse Width Clock Timing Clock Frequency (Fclk) Clock Pulse Width Clock Period T# Min. T1 T2 T3 1.6 0.8 0 uS uS uS 0.25 1.0 Sec uS 6.7 19.5 39 T4 T5 5 Max. 25.6 75 (note 2) 149 (note 2) Units Mhz nS nS Timing Interval Command Byte Write Timing ~HostSlct Hold Time ~HostSlct Setup Time HostCmd Setup Time Host Cmd Hold Time HostRdy Delay Time ~HostWrite Pulse Width Write Data Setup Time Write Data Hold Time Data Word Read Timing ~HostSlct Hold Time ~HostSlct Setup Time HostCmd Setup Time HostCmd Hold Time Read Data Access Time Read Data Hold Time ~HostRead high to HI-Z Time HostRdy Delay Time Read Recovery Time Data Word Write Timing ~HostSlct Hold Time ~HostSlct Setup Time HostCmd Setup Time HostCmd Hold Time HostRdy Delay Time ~HostWrite Pulse Width Write Data Setup Time Write Data Hold Time Write Recovery Time DAC Interface Timing I/OAddr Stable to ~I/OWrite setup time ~I/OWrite Pulse Width Data Hold Time After ~I/OWrite ClkOut Low to I/OAddr stable ClkOut Low to ~I/OWrite Low ClkOut Low to Data Valid ClkOut Cycle Time I/OAddr Stable to DACSlct High ~I/OWrite Low to DACSlct High PWM Output Timing PWM Output Frequency note 1 note 2 note 3 note 4 T# Min. Max. Units T6 T7 T8 T9 T13 T14 T15 T16 15 10 10 25 2000 (note 3) nS nS nS nS nS nS nS nS T6 T7 (read only) T8 (read only) T9 T10 T11 T12 T13 T17 15 - 20 - 20 25 70 50 35 30 2000 (note 3) 50 10 50 70 60 T6 T7 T8 T9 T13 T14 T15 T16 T18 15 10 10 25 2000 (note 3) 70 50 35 30 60 T19 T20 T21 T22 T23 T24 T25 T26 T27 35 56 17 10 75 97.6 95 40 92 92 160 typical (note 4) 66 44.5 nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS nS Khz ~HostSlct and HostCmd may optionally be de-asserted if setup and hold times are met. Chip-set performance figures and timing information valid at Fclk = 25.0 only. For timing information & performance parameters at Fclk < 25.0 Mhz, call PMD. Two micro seconds maximum to release interface before chip set responds to command ClkOut from CP is 1/4 frequency of ClkIn (CP chip). 6 I/O Timing Diagrams The following diagrams show the MC1241A electrical interface timing. T#' values are listed in the above timing chart. Quadrature Encoder Input Timing T1 T1 Quad A T2 T2 Quad B T3 T3 ~Index Index = ~A * ~B * ~IND Clock Timing ClkIn T4 T4 T5 7 Command Byte Write TIming T7 T6 T8 T9 ~HostSlct HostCmd T14 ~HostWrite T15 HostData0-7 T16 HostRdy T13 8 Data Word Read TIming T7 T6 Note 1 ~HostSlct T8 T9 Note 1 HostCmd T17 ~HostRead T12 HostData0-7 High-Z High-Z High Byte T10 High-Z Low Byte T11 HostRdy T13 9 Data Word Write TIming T7 T6 Note 1 ~HostSlct T8 T9 Note 1 HostCmd T18 T14 T14 ~HostWrite T15 HostData0-7 T15 High Byte Low Byte T16 T16 HostRdy T13 10 DAC Interface Timing T25 ClkOut T22 T19 I/OAddr T23 T20 ~I/OWrite T24 T21 Data 0-11, DACAddr0,1 T27 T26 DACSlct 11 Pinouts 9 61 1 9 60 10 61 1 60 10 CP I/O (Top view) (Top view) 26 44 27 44 26 43 27 43 MC1241A Pinouts 28 42 24 13 26 30 9 23 33 46 52 45 29 12 2 20 36 22 63 68 27 41 37 4, 21, 25, 38, 55 4, 22, 33 VCC VCC QuadA1 QuadB1 Index1 Home1 QuadA2 QuadB2 Index2 Home2 DACSlct CPClk I/OClkIn I/OClkOut CPAddr2 CPAddr3 CPWrite CPCntrl0 CPCntrl1 CPCntrl2 CPCntrl3 CPAddr0 CPAddr1 HostCmd HostRdy I/O HostRead HostWrite HostSlct HostIntrpt HostData0 HostData1 HostData2 HostData3 HostData4 HostData5 HostData6 HostData7 CPData4 CPData5 CPData6 CPData7 CPData8 CPData9 CPData10 CPData11 8 56 7 55 2 54 1 53 30 29 24 19 17 16 18 68 67 64 63 62 61 51 47 48 44 50 61 53 65 67 62 64 60 18 5 6 7 8 17 3 1 PWMMag1A PWMSign1A PWMMag1B PWMSign1B PWMMag2A PWMSign2A PWMMag2B PWMSign2B DAC16Addr0 DAC16Addr1 ClkIn ClkOut Reset I/OCntrl0 I/OCntrl1 I/OCntrl2 I/OCntrl3 DACLow0 DACLow1 DACLow2 DACLow3 GND CP Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9 Data10 Data11 I/OAddr0 I/OAddr1 I/OAddr2 I/OAddr3 I/OWrite PosLimit1 PosLimit2 NegLimit1 NegLimit2 60 59 58 57 50 49 46 43 40 39 36 35 28 9 6 5 15 52 45 51 44 Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9 Data10 Data11 I/OAddr0 I/OAddr1 I/OAddr2 I/OAddr3 I/OWrite PosLimit1 NegLimit1 60 59 58 57 50 49 46 43 40 39 36 35 28 9 6 5 15 52 51 GND 3, 34 14, 15, 32, 49, 54, 66 MC1141A Pinouts 28 42 24 13 33 46 52 45 29 12 2 20 36 22 63 68 27 41 37 4, 21, 25, 38, 55 4, 22, 33 VCC VCC QuadA1 QuadB1 Index1 Home1 DACSlct CPClk I/OClkIn I/OClkOut CPAddr2 CPAddr3 CPWrite CPCntrl0 CPCntrl1 CPCntrl2 CPCntrl3 CPAddr0 CPAddr1 HostCmd HostRdy I/O HostRead HostWrite HostSlct HostIntrpt HostData0 HostData1 HostData2 HostData3 HostData4 HostData5 HostData6 HostData7 CPData4 CPData5 CPData6 CPData7 CPData8 CPData9 CPData10 CPData11 51 47 48 44 50 61 53 65 67 62 64 60 18 5 6 7 8 17 3 1 8 56 7 55 30 29 24 19 17 16 18 68 67 64 63 62 61 PWMMag1A PWMSign1A PWMMag1B PWMSign1B DAC16Addr0 DAC16Addr1 ClkIn ClkOut Reset I/OCntrl0 I/OCntrl1 I/OCntrl2 I/OCntrl3 DACLow0 DACLow1 DACLow2 DACLow3 CP GND GND 14, 15, 32, 49, 54, 66 3, 34 12 Pin Descriptions The following tables provide pin descriptions for the MC1241A-series chipsets. IC Pin Name I/O Chip Pinouts I/O QuadA1 QuadB1 QuadA2 QuadB2 Pin # Description/Functionality 28 42 26 30 Quadrature A, B channels for axis 1 - 2 (input). Each of these 2 pairs of quadrature (A, B) signals provide the position feedback for an incremental encoder. When the encoder is moving in the positive, or forward direction, the A signal leads the B signal by 90 degs. NOTE: Many encoders require a pull-up resistor on each of these signals to establish a proper high signal (check the encoder electrical specifications) NOTE: For MC1241A all 4 pins are valid. For MC1141A pins for axes 1 only are valid. Invalid axis pins can be left unconnected I/O ~Index1 ~Index2 24 9 NOTE: These signals are not required for normal operation, but may be used if desired to confirm motor position. Index encoder signals for axis 1-2 (input). Each of these 2 signals indicate the index flag state from the encoder. A valid index pulse is recognized by the chip set when the index flag transitions low, followed by the corresponding A and B channels of the encoder transitioning low. The index pulse is recognized at the later of the A or B transitions. If not used this signal must be tied high. NOTE: For MC1241A both pins are valid. For MC1141A pins for axes 1 only are valid. Invalid axis pins can be left unconnected. I/O ~Home1 ~Home2 13 23 NOTE: These signals are not required for normal operation, but may be used if desired to confirm motor position. Home signals for axis 1-2 (input). Each of these signals provide a general purpose input to the hardware position capture mechanism. A valid home signal is recognized by the chipset when the home flag transitions low. These signals have a similar function as the ~Index signals, but are not gated by the A and B encoder channels. For valid axis pins, If not used, this signal must be tied high. See below for valid pin definitions for the MC1241A and MC1141A. NOTE: For MC1241A both pins are valid. For MC1141A pins for axes 1 only are valid. Invalid axis pins can be left unconnected. I/O DACSlct 33 I/O CPClk 46 I/O I/OClkIn 52 I/O I/OClkOut 45 I/O CPAddr0 CPAddr1 CPAddr2 CPAddr3 68 27 29 12 NOTE: These signals are not required for normal operation, but may be used if desired to confirm motor position. DAC Select (output). This signal is asserted high to select any of the available DAC output channels. For details on DAC decoding see description of DAC16Addr0-1 signals. I/O chip clock (input). This signal is connected directly to the ClkOut pin (CP chip) and provides the clock signal for the I/O chip. The frequency of this signal is 1/4 the user-provided ClkIn (CP chip) frequency. Phase shifted clock (input). This signal must be connected to I/OClkOut (I/O chip), and inputs a phase shifted clock signal. Phase shifted clock (output). This signal must be connected to I/OClkIn (I/O chip), and outputs a phase shifted clock signal. I/O chip to CP chip communication address (input). These 4 signals are connected to the corresponding I/OAddr0-3 pins (CP chip), and together provide addressing signals to facilitate CP to I/O chip communication. 13 IC I/O Pin Name ~CPWrite Pin # 2 I/O I/O CPCntrl0 CPCntrl1 CPCntrl2 CPCntrl3 HostCmd 20 36 22 63 41 I/O HostRdy 37 I/O ~HostRead 51 I/O ~HostWrite 47 I/O ~HostSlct 48 I/O ~HostIntrpt 44 I/O I/O HostData0 HostData1 HostData2 HostData3 HostData4 HostData5 HostData6 HostData7 CPData4 CPData5 CPData6 CPData7 CPData8 CPData9 CPData10 CPData11 Vcc 50 61 53 65 67 62 64 60 18 5 6 7 8 17 3 1 4, 21, 25, 38, 55 I/O GND 14, 15, 32, 49, 54, 66 I/O Description/Functionality I/O chip to CP chip communication write (input). This signal is connected to the ~I/OWrite pin (CP chip) and provides a write strobe to facilitate CP to I/O chip communication. I/O chip to CP chip communication control (mixed). These 4 signals are connected to the corresponding I/OCntrl0-3 pins (CP chip), and provide control signals to facilitate CP to I/O chip communication. Host Port Command (input). This signal is asserted high to write a host command to the chip set. It is asserted low to read or write a host data word to the chipset Host Port Ready/Busy (output). This signal is used to synchronize communication between the DSP and the host. HostRdy will go low (indicating host port busy) at the end of a host command write or after the second byte of a data write or read. HostRdy will go high (indicating host port ready) when the command or data word has been processed and the chip set is ready for more I/O operations. All host port communications must be made with HostRdy high (indicating ready). Typical busy to ready cycle is 67.5 uSec, although it can be longer when host port traffic is high. Host Port Read data (input). Used to indicate that a data word is being read from the chip set (low asserts read). Host Port Write data (input). Used to indicate that a data word or command is being written to the chip set (low asserts write). Host Port Select (input). Used to select the host port for reading or writing operations (low assertion selects port). ~HostSlct must remain inactive (high) when the host port is not in use. Host Interrupt (output). A low assertion on this pin indicates that a host interrupt condition exists that may require special host action. Host Port Data 0-7 (bi-directional, tri-stated). These signals form the 8 bit host data port used during communication to/from the chip set. This port is controlled by ~HostSlct, ~HostWrite, ~HostRead and HostCmd. I/O chip to CP chip data port (bi-directional). These 8 bits are connected to the corresponding Data4-11 pins on the CP chip, and facilitate communication to/from the I/O and CP chips.. I/O chip supply voltage pin. All of these pins must be connected to the supply voltage. Supply voltage = 4.75 to 5.25 V I/O chip ground pin. All of these pins must be connected to the power supply return. 14 IC Pin Name CP Chip Pinouts CP PWMMag1A PWMMag1B PWMMag2A PWMMag2B Pin # Description/Functionality 8 7 2 1 PWM motor output magnitude signals (output). When the chip set is in PWM output mode these pins provide the Pulse Width Modulated magnitude signal to the motor amplifier. Two phases of command signal are output per motor axis, indicated phase A and phase B, with the axis number indicated 1 or 2. NOTE: For MC1241A all four pins are valid. For MC1141A pins for axes 1 only are valid. Invalid axis pins can be left unconnected. CP CP CP CP PWMSign1A PWMSign1B PWMSign2A PWMSign2B PosLimit1 PosLimit2 NegLimit1 NegLimit2 DAC16Addr0 DAC16Addr1 56 55 54 53 52 45 51 44 30 29 The PWM resolution is 10 bits, frequency = 97.6 kHz. PWM motor output direction signals (output). When the chip set is in PWM output mode these pins provide the sign signal to the motor amplifier. Two phases of command signals are output per motor axis, indicated phase A and phase B, with the axis number indicated 1 or 2. NOTE: For MC1241A all four pins are valid. For MC1141A pins for axes 1 only are valid. Invalid axis pins can be left unconnected. Positive limit switch input for axis 1-2. These signals provide directional limit inputs for the positive-side travel limit of the axis. Upon powerup these signals default to "active high" interpretation, but the interpretation can be set explicitly using the SET_LMT_SENSE command. (See Host Command Section for more info.) If not used these signals should be tied low for the default interpretation, or tied high if the interpretation is reversed. NOTE: For MC1241A both pins are valid. For MC1141A pins for axes 1 only are valid. Invalid axis pins can be left un connected. Negative limit switch input for axis 1-2. These signals provide directional limit inputs for the negative-side travel limit of the axis. Upon powerup these signals default to "active high" interpretation, but the interpretation can be set explicitly using the SET_LMT_SENSE command. (See Host Command Section for more info.) If not used these signals should be tied low for the default interpretation, or tied high if the interpretation is reversed. NOTE: For MC1241A both pins are valid. For 1141 pins for axis 1 only are valid. Invalid axis pins can be left un connected. Axis Address used during 16-bit DAC motor command output. These signals encode the motor output axis address as shown in the table below: Dac16Addr1 Low Low High High CP ClkIn 24 Dac16Addr0 Low High Low High Addressed Encoder Axis 1 phase A Axis 1 phase B Axis 2 phase A Axis 2 phase B To write a valid DAC motor command value DACSlct (I/O chip) and I/OAddr0-3 (CP chip) must be high, and I/OWrite (CP chip) must be low. The 16 bit DAC data word is organized as follows: High twelve bits are in Data0-11 (CP chip), and low 4 bits are in DACLow0-3 (CP chip). Clock In (input). This pin provides the chip set master clock (Fclk = 25.0 Mhz) 15 IC CP Pin Name ClkOut Pin # 19 CP ~Reset 17 CP I/OCntrl0 I/OCntrl1 I/OCntrl2 I/OCntrl3 Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Data9 Data10 Data11 DACLow0 DACLow1 DACLow2 DACLow3 I/OAddr0 I/OAddr1 I/OAddr2 I/OAddr3 16 18 68 67 60 59 58 57 50 49 46 43 40 39 36 35 64 63 62 61 28 9 6 5 I/OWrite 15 CP CP CP CP Description/Functionality Clock Out (output). This pin provides a clock output which is 1/4 the ClkIn frequency. This pin is connected to I/OClkin (I/O chip). Master chip set reset (input). When brought low, this pin resets the chip set to its initial condition. Reset should occur no less than 250 mSec after stable power has been provided to the chip set. I/O chip to CP chip communication control (mixed). These signals are connected to the corresponding CPCntrl0-3 pins on the I/O chip, and provide control signals to facilitate CP to I/O communication. Multi-purpose Data0-11. (Bi-directional). These pins have 2 functions: 1) Pins Data4-11 (8 bits total) are connected to the corresponding CPData4-11 pins on the I/O chip, and are used to communicate between the CP and I/O chips 2) Pins Data0-11 hold the high 12 bits of the DAC output value when the output mode is set to 16-bit DAC. DACLow0-3 (output). These pins hold the lowest 4 bits of the 16 bit DAC output word when the output mode is set to 16 bit DAC. These pins, in conjunction with Data0-11 (providing the high 12 bits) make up the 16-bit DAC output word. Multi-purpose Address0-3 (output). These pins are connected to the corresponding CPAddr03 pins on the I/O chip. They have 2 functions; They provide addressing signals to facilitate communication between the I/O chip and CP chip, and they are used during DAC data decoding. To read a valid DAC value from Data0-Data11 (CP chip), DACSlct (I/O chip) and I/OAddr0-3 (CP chip) must all be high, and I/OWrite (CP chip) must be low. Multi-purpose write (output). This pin is connected to CPWrite on the I/O chip. It has 2 functions: 1) It provides a control signal to the I/O chip to facilitate communication between the I/O chip and CP chip. CP Vcc 4, 22, 33 CP GND 3, 34 2) It is used during DAC data decoding to read a valid DAC value from Data0-Data11 (CP chip), DACSlct (I/O chip) and I/OAddr0-3 (CP chip) must all be high, and I/OWrite (CP chip) must be low. CP chip supply voltage pin. All of these pins must be connected to the supply voltage. Supply voltage = 4.75 to 5,.25 V CP chip ground pin. All of these pins must be connected to the power supply return. 16 Theory of Operations Internal Block Diagram Incremental Encoder Index Home 1/a Motor Output B A 1/a 1/a PWM mag. PWM dir. 1/a DAC address DAC data 2 1/phase 16 PWM, DAC signal generator (2-4 channels) Microstepping Generator (2) Quadrature decoder counter (2) Trajectory profile generator (2) Index capture register (2) System Registers (2) Host command Host I/O controller 5 Control 8 Data 1/a 1 host interrupt PosLimit Host I/O 1/a NegLimit Over-travel Inputs The above figure shows an internal block diagram for the MC1241A motion processor. The sine-wave microstepping signals are output in PWM format with a separate magnitude and sign signal per phase, or as a digital word with up to 16 bits of resolution that is constructed externally into an analog signal using a DAC. In DAC mode two address bits indicate which of the two axes and two phases are being loaded by the chipset. Each axis provides programmable trajectory generation including electronic gearing, trapezoidal point-to-point, and s-curve point to point moves. In addition the chipset contains an internal microstepping signal generator. The microstep generator outputs 2 phased signals per axis with 64 usteps per full step. These signals can be used to directly drive each coil of the stepper motor for smooth, microstepped motion. Encoder feedback is available for each motor axis and can be used by the host to check that the axis has achieved a desired position. Additionally, the chipset can use the encoder information to automatically detect a motor stall condition while a move is ongoing. The chipset calculates all trajectory information on a cycle-by-cycle basis. Each cycle results in a new desired sine-wave frequency output based on the trajectory generator mode and the specified trajectory parameters. The following table summarizes the operational parameters of the MC1241-series chipsets. 17 MC1241-Series Chipset Operational Parameters Available configurations: Operating Modes: Position Range: Velocity Range: Acceleration Range: 2 axes with internal microstepping generation (MC1241A) 1 axes with internal microstepping generation (MC1141A) Open loop (motor is controlled directly by trajectory generator) -1,073,741,824 to 1,073,741,823 usteps -16,384 to 16,383 usteps/cycle with a resolution of 1/65,536 usteps/cycle S-curve profile: - 1/2 to + 1/2 usteps/cycle2 with a resolution of 1/65,536 usteps/cycle2. Jerk Range: All others: -16,384 to 16,383 usteps/cycle2 with a resolution of 1/65,536 usteps/cycle2 -1/2 to +1/2 usteps/cycle3, with a resolution of 1/4,294,967,296 usteps/cycle3 Start velocity range Trajectory Profile Generator Modes: Electronic Gear Ratio Range: Encoder Input Signals: Microstepping Waveform: # Steps Per Full Step: Microstep Lookup Rate: Phasing: # of Output Phases: PWM Frequency: PWM resolution: Max Incremental. Encoder Rate: Profile Cycle Rate : # of Limit Switch Inputs Per Axis Miscellaneous control lines: # of Position Capture Sources: Capture Trigger Latency: # of Host Commands: -32,768 to +32,767 steps/cycle with a resolution of 1/65,536 steps/cycle (used with trapezoidal and velocity profile modes only) S-curve (host commands final position, max velocity, max acceleration, and jerk) Trapezoidal (host commands final position, max velocity, starting velocity, and acceleration) Velocity contouring (host commands max velocity, starting velocity, acceleration) Electronic Gear (Encoder position is used as position command for corresponding axis). 32768:1 to 1:32768 (negative and positive direction) A, B, Index Sinusoidal 64 15 kHz 90 degrees (used with 2-phase stepper motors) 120 degrees (used with 3-phase stepper motors or AC Induction motors) 2 (all motor types) 97.6 kHz 8 bits 1.75 Mcounts/sec 540 uSec*. 2 (one for each direction of travel) Home switch input (one per axis) 2 (Index, Home signals) 160 nSec 80 *Exact cycle time is 542.72 uSec, 540 is an approximation Trajectory Profile Generation The commands to select these profile modes are The trajectory profile generator performs calculations to determine the target position, velocity and acceleration on a continuous basis. These calculations are performed taking into account the current profile mode, as well as the current profile parameters set by the host. Four trajectory profile modes are supported: SET_PRFL_S_CRV (to select the s-curve mode), SET_PRFL_TRAP (to select the trapezoidal mode) SET_PRFL_VEL (to select the velocity contouring mode) and SET_PRFL_GEAR (to select the electronic gear mod). Throughout this manual various command mnemonics will be shown to clarify chipset usage or provide specific examples. See the Host Communications section for a description of host command nomenclature. - S-curve point to point - Trapezoidal point to point - Velocity contouring - Electronic Gear 18 The profile mode may be programmed independently for each axis. For example axis #1 may be in trapezoidal point to point mode while axis #2 is in S-curve point to point. Use the following figure showing a typical S-curve velocity vs. time graph for reference in reading the next section: Generally, the axis should be at rest when switching profile modes. Under certain conditions however, switching into certain profile modes "on-the-fly" is allowed. See specific profile descriptions for details. Phase Phase Phase I. II. III. Phase IV. Phase Phase Phase V. VI. VII. S-curve Point to Point The following table summarizes the host specified profile parameters for the S-curve point to point profile mode: Profile Parameter Destination Position Maximum Velocity Representation & Range Units signed 32 bits -1,073,741,824 to 1,073,741,823 unsigned 32 bits* (1/216 scaling) usteps Max. Accel. unsigned 16 bits ** (1/216 scaling) 0 to 32,767 unsigned 32 bits *** (1/232 scaling) Jerk S-curve profile usteps/cycle The S-curve profile drives the axis at the specified jerk until the maximum acceleration is reached. (phase I). it will then drive the axis at jerk = 0 (constant acceleration) through phase II. It will then drive the axis at the negative of the specified jerk though phase III, such that the axis reaches the specified maximum velocity with acceleration = 0. This completes the acceleration phase. At the end of the acceleration phase of the move, the velocity will be constant, and the acceleration will be 0. At the appropriate time, the profile will then decelerate (phases V, VI and VII) symmetrically to the acceleration phase such that it arrives at the destination position with acceleration and velocity = 0. 0 to 1,073,741,823 usteps/cycle2 usteps/cycle3 0 to 2,147,483,647 * uses 1/216 scaling. Chipset expects a 32 bit number which has been scaled by a factor of 65,536 from units of usteps/cycle. For example to specify a velocity of 2.75 usteps/cycle, 2.75 is multiplied by 65,536 and the result is sent to the chipset as a 32 bit integer (180,224 dec. or 2c000 hex.). There are several conditions where the actual velocity graph of an Scurve motion will not contain all of the segments shown in the above figure. For example, if the max. acceleration is not reached before the "half-way" point to the max. velocity, then the actual velocity profile will not contain a phase II or a phase VI segment (they will have a duration of 0 cycles). Such a profile is shown below: ** uses 1/216 scaling. Chipset expects a 16 bit number which has been scaled by a factor of 65,536 from units of usteps/cycle2. For example to specify an acceleration of .175 usteps/cycle2, .175 is multiplied by 65,536 and the result is sent to the chipset as a 16 bit integer (11,469 dec. or 2ccd hex). Phase I. Phase III. Phase IV. Phase V. Phase VII. *** uses 1/232 scaling. Chipset expects a 32 bit number which has been scaled by a factor of 4,294,967,296 (232) from units of usteps/cycle3. For example to specify a jerk value of .0075 usteps/cycle3, .0075 is multiplied by 4,294,967,296 and the S-curve that doesn't reach max. acceleration result is sent to the chipset as a 32 bit integer (32,212,256 dec. or 1eb8520 hex). Another such condition is if the position is specified such that max. velocity is not reached. In this case there will be no phase IV, and there may also be no phase II and VI, depending on where the profile is "truncated". While the S-curve profile is in motion, the user is not allowed to change any of the profile parameters. The axis must be at rest before a new set of profile parameters can be executed. If parameters are changed during motion then a 'command error' 19 will occur, and all new parameters will be ignored except the position. See the section of this manual entitled "Command Error" for more information.. The following figure shows a velocity profile for a typical point to point trapezoidal move, along with a more complicated move involving on the fly changes to the maximum velocity and the destination position. Before switching to the S-curve point to point profile mode, the axis should be at a complete rest. Vel. When the axis is in the S-curve profile mode, the SET_MAX_ACC command should be used to load the max. acceleration value. The alternate acceleration loading command SET_ACC can not be used. Time Simple trapezoidal mode motion Trapezoidal Point to Point Vel. The following table summarizes the host specified profile parameters for the trapezoidal point to point profile mode: Profile Parameter Destination Position Maximum Velocity Representation & Range Starting Velocity unsigned 32 bits, (1/216 scaling) 0 to 1,073,741,823 unsigned 32 bits (1/216 scaling) Accel. change max velocity Time Units change destination position signed 32 bits -1,073,741,824 to 1,073,741,823 unsigned 32 bits (1/216 scaling) usteps Complex trapezoidal mode motion usteps/cycle 0 to 1,073,741,823 change destination position usteps/cycle Vel. usteps/cycle2 0 to1,073,741,823 starting velocity In the trapezoidal point to point profile mode the host specifies a destination position, a maximum velocity, a starting velocity, and an acceleration. The trajectory is executed by accelerating at the commanded acceleration, beginning at the starting velocity, to the maximum velocity where it coasts until decelerating such that the destination position is reached with the axis at rest (zero velocity). If it is not possible to reach the maximum velocity (because deceleration must begin) then the velocity profile will have no "coasting" phase. The acceleration rate is the same as the deceleration rate. change max velocity Time Trapezoidal Profile With Non-Zero Starting Velocity Velocity Contouring The following table summarizes the host specified profile parameters for the Velocity contouring profile mode: A new maximum velocity and destination position can be specified while the axis is in motion. When this occurs the axis will accelerate or decelerate toward the new destination position while attempting to satisfy the new maximum velocity condition. Profile Parameter Maximum Velocity Before switching to the Trapezoidal point to point profile mode, the axis should be at rest. Starting Velocity When in Trapezoidal point to point profile mode, to change the acceleration, the axis must come to a complete stop. After this has occurred, a new acceleration value can be loaded. If the acceleration parameter is changed during motion then a 'command error' will occur, and all updated parameters will be ignored except the position. See the section entitled 'Axis Status for more informaton' on command errors. Acceleration Representation & Range Units unsigned 32 bits (1/216 scaling) 0 to 1,073,741,823 unsigned 32 bits, (1/216 scaling) usteps/cycle usteps/cycle 0 to 1,073,741,823 signed 32 bits* (1/216 scaling) -1,073,741,824 to 1,073,741,823 usteps/cycle2 * negative numbers using 1/216 scaling are handled no differently than positive numbers. For example if an acceration value of -1.95 usteps/cycle2 is desired, -1.95 is The Starting Velocity can not be changed while the axis is in motion. 20 multipled by 65,536 and the result is sent to the chipset (127,795 dec. or fffe0ccd hex). In this way the output of the microstep generator will precisely track the input encoder position factored by a programmable gear ratio. This can be useful in many applications where continuous synchronization with an external mechanism is important. In this profile mode the host specifies two parameters, the commanded acceleration, and the maximum velocity. The trajectory is executed by continuously accelerating the axis at the commanded rate until the max. velocity is reached, or until a new acceleration command is given. The following figure shows the arrangement for encoders and motor drives in a typical electronic gearing application with the MC1241A The maximum velocity value must always be positive. Motion direction is controlled using the acceleration value. Positive acceleration values result in positive motion, and negative values result in negative motion. Master Encoder Motor The total number of geared axes supported per chipset is equal to the number of motor axes. For each motor axes the encoder input for the same axis is used as the master position command. In addition these master/slave combinations are fixed, with the encoder for axis 1 driving the axis 1 microstep generator, and the encoder for axis 2 driving the axis 2 microstep generator. The following figure shows a typical velocity profile using this mode. Example Velocity Contouring Mode change acceleration change max velocity Amplifier Only one of four axes shown There are no restrictions on changing the profile parameters on the fly. Note that the motion is not bounded by position however. It is the responsibility of the host to generate acceleration and max. velocity command values which result in safe motion, within acceptable position limits. Vel. MC1241A Time There are no restrictions on changing the gear ratio when the axis is in motion, although care should be taken to select ratios such that safe motion is maintained. There are also no restrictions on changing to this profile mode while the axes is in motion. change max velocity and acceleration There are no restrictions on switching the profile mode to velocity contouring while the axis is in motion. Trajectory Control The Starting Velocity can not be changed while the axis is in motion. Normally each of the above trajectory modes will execute the specified trajectory, within the specified parameter limits, until the profile conditions are satisfied. For example for the point-to-point profile modes this means that the profile will move the axis until the final destination position has been reached, at which point the axis will have a velocity of zero. Electronic Gear The following table summarizes the host specified profile parameters for the electronic gear profile mode: Profile Parameter Gear Ratio Representation & Range Units signed 32 bits* (1/216 scaling) -1,073,741,824 to +1,073,741,823 - Halting The Trajectory In some cases however it is necessary to halt the trajectory manually, for safety reasons, or simply to achieve a particular desired profile. This can be accomplished using one of two methods; abrupt stop, or smooth stop. * for example to specify a gear ratio of +1.5 to 1 the value 1.5*65,536 is sent to the chipset (98,304). Alternatively to set the gear ratio as -11.39 to 1 the value -11.39*65,536 is sent (746,455 dec. or fff49c29 hex.). Abrupt stops are accomplished using the STOP command. This command instantaneously stops the trajectory generator by setting the velocity of the axis to zero. This control mode is typically used during an emergency stop, when no deceleration phase is desired. In this profile mode, the host specifies one parameter, the gear ratio. The target position is generated by applying the specified gear ratio to the encoder position of the same axis, multiplying by the specified gear ratio and outputting the corresponding number of microsteps. Smooth stops are accomplished using the SMOOTH_STOP command. This command causes the trajectory to decelerate at a rate equal to the 21 specified acceleration rate, until a velocity of zero is reached. In addition the form of the deceleration is symmetric to the acceleration phase. For example if the profile mode is S-curve, and a SMOOTH_STOP command is given, the profile will decelerate in a manner exactly equal and opposite to the acceleration phase. Contouring profile modes only. They do not function when the profile mode is set to electronic gearing. The motion complete and in-motion bits indicate the state of the trajectory generator, not the actual motor. Even if the trajectory generator has completed a motion, the actual axis position may or may not be at rest depending on motor stability, and other system conditions. The STOP command functions in all profile modes; S-curve pointto-point, Trajectory point-to-point, Velocity Contouring, and Electronic Gear. The SMOOTH_STOP functions in S-curve point-to-point, Trajectory point-to-point, and Velocity Contouring profiling mode. It does not function in Electronic Gear mode. Parameter Loading & Updating Various profile & motor control parameters must be specified by the host for an axis to be controlled in the desired manner. To facilitate precisely synchronized motion, these parameters and related control commands are loaded into the chip using a double-buffered scheme. In this scheme, the parameters and action commands being loaded are not acted upon (copied from the double-buffered to the active registers) until an update signal is given. Caution should be exercised when using the STOP command due to the large and abrupt changes in motion that may occur. Motion Complete Status To simplify the programming of a complete motion system it is convenient to have the motion chipset indicate when a particular profile move has been completed. This update signal can consist of either a "manual" update command or one of several conditional breakpoints. Whichever update method is used, at the time the update occurs, all of the double buffered registers and commands will be copied to the active registers. Conversely, before the update occurs, loading the double-buffered registers or executing the double buffered commands will have no effect on the system behavior. This function is provided by two status bits in the chipset's status word (See the section of this manual entitled "Axis Status " for more information on the axis status word). These two bits are called the motion complete bit, and the in-motion bit. The double buffered registers are listed below. The motion complete bit is controlled interactively by the chipset and the host. After a motion has completed, the chipset sets the motion complete bit on. The host may then poll this bit to determine that motion is complete, or if desired, the host can program the chipset to automatically signal when the motion is complete (using an interrupt). In either case once the host has recognized that the motion has been completed the host clears the motion complete bit, enabling the bit to indicate the end of motion for the next move. Register Name destination position maximum velocity acceleration maximum acceleration jerk ratio buffered motor command The following list shows the conditions that will cause the motion complete bit to occur: - Command to set SET_POS SET_VEL SET_ACC SET_MAX_ACC SET_JERK SET_RATIO SET_BUF_MTR_CMD The double-buffered commands are: STOP, SMOOTH_STOP, and SYNCH_PRFL. Profile has reached the destination position (point-to-point profile modes only) Axis trajectory reaches a velocity of zero and the current velocity command is zero SMOOTH_STOP command is given and axis trajectory reaches a velocity of zero STOP command is given Limit switch condition occurs Manual Update There are two methods of manually updating the double-buffered parameters & commands, one for a single axis instantaneous update and one for a multiple-axis update. The in-motion bit is similar to the motion complete bit except that it continuously indicates the status of the axis without interaction with the host. In addition this bit is used exclusively for polled mode operations. It can not cause an interrupt to the host to be generated. The single axis instantaneous update, which is specified using the UPDATE command, forces the parameters for the current axis to be updated at the next cycle. The motion complete and the in-motion indicator bits function in the S-curve point-to-point, Trapezoidal point-to-point, and Velocity The multiple axis instantaneous update, which is specified using the MULTI_UPDATE command, causes multiple axes to be updated simultaneously. This can be useful when synchronized multi-axis profiling is desired. This command takes a 1 word argument which 22 consists of a bit mask, with 1 bit assigned to each axis. Executing this command has the same affect as instantaneously switching to each desired axes, and executing an UPDATE command. Motion Complete Breakpoint A breakpoint can be specified which will result in the parameters being updated when the previous motion has been completed (motion complete bit is set). When using this breakpoint no 32 bit compare value is required. Breakpoints External Breakpoint A breakpoint can be specified which will result in the parameters being updated when the home signal of the corresponding axis becomes active (low). When using this breakpoint no 32 bit compare value is required. This breakpoint is useful whenever it is desired that an external signal starts, stops, or otherwise modifies the profile movement. A breakpoint is a convenient way of programming a profile or other double-buffered parameter change upon some specific condition. There are two types of breakpoints, those that have a 32-bit comparitor value associated with them and those that do not. For those that have the comparitor, a 32-bit comparitor value is loaded into the breakpoint compare register first, and then one of the breakpoint conditions is specified. For those breakpoint modes without associated comparitor values only the breakpoint condition needs to be specified. Normally, whenever one of these conditions has been programmed and the condition occurs, the double-buffered parameters will automatically be shifted to the active registers. There is a mechanism to disable this "automatic update upon breakpoint" however. This is discussed in the next section. The double-buffered registers and commands will be updated upon satisfaction of the specified breakpoint condition. Here is a list of all of the available breakpoint conditions. The above breakpoint modes are particularly useful during multi-axis motion. This is because the next profile commands (set of hostspecified trajectory commands) can be pre-loaded and activated at the precise position or time required, with no delay incurred to send an update or load parameters command. Positive Target Position Breakpoint A 32 bit position breakpoint can be specified which will result in the parameters being updated when the current target position (the instantaneous desired axis position output from the profile generator) equals or exceeds the specified breakpoint value. This breakpoint is set using the SET_POS_BRK command. After a breakpoint condition has been satisfied it is no longer active. To set up another breakpoint condition, a new one must be explicitly set by the host. Negative Target Position Breakpoint A 32 bit position breakpoint can be specified which will result in the parameters being updated when the current target position (the instantaneous desired axis position output from the profile generator) equals or is less than the specified breakpoint value.This breakpoint is set using the SET_NEG_BRK command. The double-buffered registers that are shifted to the active registers do not change upon being shifted, only the active registers change. Except for the MULTI_AXIS command, parameter loading and updating is controlled individually for each axis. In addition each axis has a separate 32-bit breakpoint register, and can be set to various individual breakpoint conditions. Positive Actual Position Breakpoint A 32 bit position breakpoint can be specified which will result in the parameters being updated when the current actual position (the instantaneous position of the actual axis hardware) equals or exceeds the specified breakpoint value.This breakpoint is set using the SET_ACTL_POS_BRK command. External Breakpoints and Homing By connecting a home input sensor to the home signal input of the MC1241-series chipsets it is possible to cause the chipset to halt a motion at the moment it receives the home signal. This capability makes it ideal for performing a home sequence. The following host I/O sequence illustrates this: Negative Actual Position Breakpoint A 32 bit position breakpoint can be specified which will result in the parameters being updated when the current actual position (the instantaneous position of the actual axis hardware) equals or is less than the specified breakpoint value.This breakpoint is set using the SET_ACTL_NEG_BRK command. GET_HOME Time Breakpoint A 32 bit time breakpoint can be specified which will result in the parameters being updated when the # of cycles executed since chip set reset (the current chip set time) is equal to the time breakpoint value.The # of cycles continuously increases until it rolls over from 232 - 1 back to 0.The time breakpoint is set using SET_POS 12345 SET_VEL 23456 SET_ACC 345 UPDATE SET_EXT_BRK the SET_TIME_BRK command. 23 ; check to make sure axis not already at ; home. If so, then a 'reverse' move must ; be made to retract axis from home switch. ; This ‘reversing’ sequence is not ; indicated here for simplicity sake ; load home move parameters ; start home move ; initiate external breakpoint mode STOP ; load (but do not update) a stop command 2) This sequence will start a homing move which will stop as soon as the axis encounters the home switch. Upon entering an over-travel condition, the trajectory generator will automatically be halted, so that the motor does not travel further into the over travel region. To recover from an over-travel condition the corresponding status bits in the status word should be reset (see the section of this manual on axis status for details on resetting status word bits). Once this has been performed the host can command a trajectory move to bring the axis out of the over-travel region. As is the case for all of the breakpoint modes, the external breakpoint can not only be use to stop an ongoing move, but to start or otherwise modify a move as well. This flexibility makes it well suited for applications such as cut-on-the-fly where externally-initiated motions are required. The over-travel detector is 're-armed' when the axis exits the over travel condition. Disabling Automatic Profile Update Only one over-travel signal can be processed at a time. For example if the negative over travel switch becomes active, the corresponding status bits must be cleared, and the axis moved into the legal travel range before a positive over travel switch will be recognized. Normally, when a breakpoint condition has been satisfied, it causes the profile and other double-buffered parameters to be automatically updated. For certain types of profiles however, it may be desirable to still use the breakpoint mechanism (to allow it to generate a host interrupt for example), but not to have the profile update. Axis Timing Whether the profiles are automatically updated or not for a given axis is controlled by the commands SET_AUTO_UPDATE_ON and SET_AUTO_UPDATE_OFF. When auto update is set to on, the breakpoint/profile mechanism behaves as described above. When set to off, upon a breakpoint condition, no profile update will occur. When in this mode the only way to update the profile is to use the UPDATE command or the MULTI_UPDATE command. Each axis of the MC1241-series chipsets receives a "time slice" of the available computation power of the CP chip. The amount of time required for the chipset to perform one complete pass of calculations for all of the axes is known as the chipset cycle time. This chipset cycle time is important to the host processor because it determines the rate at which profile trajectories are updated. The cycle time is the same for all MC1241-series chipsets. The cycle time value is 540 uSec*. All velocities, accelerations, and jerk values are related to this cycle time via the various trajectory generator modes that generate axis motion. Travel Limit Switches The MC1241-series chipsets support motion travel limit switches that can be used to automatically recognize an "end of travel" condition. * exact cycle time is 542.72 uSec, 540 is an approximation. The following figure shows a schematic representation of an axis with travel-limit switches installed, indicating the "legal" motion area and the over-travel regions. negative limit switch negative over-travel region For example, to determine the velocity of a given axis in units of steps/second, we use the conversion ration 1 sec = 1,851 cycles (1,851 cycles/sec = 1 cycle every 540 uSec). Therefore if the desired maximum velocity to be provided to the chipset is (for example) 12,345 usteps/sec we convert to units of usteps/cycle by dividing by 1,851, giving a value of 6.669. The value we send to the chipset using the SET_VEL command (see host command section for details) would be 65,536 times this amount since the velocity parameter uses 1/2 16 positive limit switch scaling. Therefore we would send a value of 437,083 to the chipset. Legal travel region positive over-travel region As an additional example, to determine the acceleration of a given axis in units of usteps/second2, we again use the conversion ration 1 sec = 1,851 cycles, however we must take into account the conversion to cycles2 (not cycles). Therefore if the desired acceleration to be There are two primary services that the MC1241A provides in connection with the over-travel limit switch inputs: 1) provided to the chipset is (for example) 67,890 usteps/sec2 we convert to units of usteps/cycle2 by dividing by 1,8512 (or 3,426,201), giving a The host can be automatically notified that an axis has entered an over-travel condition, allowing the host to take appropriate special action to manage the over-travel condition. value of .0019815. The value we send to the chipset using the SET_ACC command (or SET_MAX_ACC command if we are in Scurve mode) would be 65,536 times this amount since this parameter 24 uses 1/216 scaling. Therefore we would send a value of 1298 (decimal) to the chipset. signal is then brought high to end the transfer of the first byte. To transfer the second (low) byte, ~HostSlct, ~HostRead, and ~HostCmd are again brought low and the data should be read from the data bus. All MC1241-series chips have the same cycle time (540 uSec), which is not adjustable by the host. Before any command write, data write or data read operations are performed, the user must check that the HostRdy signal indicates ready. After a command write, or after the second byte of each read or write, this signal will go busy. It will return to ready when the chipset can receive another I/O operation. Host Communications Electrical Interface For more specific electrical information on the host interface operations, see the pin descriptions and the timing diagram. The MC1241A communicates to the host processor via an 8-bit bidirectional data port. 5* additional signals are used to synchronize communication operations. The following table gives a brief description of the control signals used during host communication: Packet Format Signal ~HostSlct ~HostWrite ~HostRead HostCmd HostRdy All communications to/from the chip set take the form of packets. A packet is a sequence of transfers to/from the host resulting in a chip set action or data transfer. Packets can consist of a command with no data (Dataless Command), a command with associated data that is written to the chip set (Write Command) or a command with associated data that is read from the chip set (Read Command). Description Selects the host port for operations Writes a byte of data (or a command) to the chip set. A write operation can only occur when the ready/busy line indicates ready Reads a byte of data from the chip set. A read operation can only occur when the ready/busy line indicates ready Is asserted in combination with the HostWrite signal when a command is being written to the chip set. Indicates to the host that the host port is available for operations All commands with associated data (read or write) have either 1 or 2 words of data. See the host commands section for more information on the length of specific commands. If a read or a write command has 2 words of associated data (a 32 bit quantity) the high word is loaded/read first, and the low word is loaded/read second. *An additional signal, HostIntrpt is provided to the host. This signal is not used directly in communication operations, and is discussed in a separate section The following charts show the generic command packet sequence for a Dataless Command, a Write Command, and a Read Command. The hardware communication operation described in the previous section to accomplish each type of transfer is shown in the left column. Three types of hardware communication operations are possible between the host processor and the chip set; Command Write, Data Write and Data Read. Each of these operations transfers information to or from the chip set, and is coordinated using the 5 control signals listed above. Dataless Command Time A Command Write operation involves the transfer of a single byte command to the chip set. To perform a write command operation, the desired command is loaded on the 8 data pins and ~HostSlct and ~HostWrite are brought low, while HostCmd is brought high. Cmd Write: Data Write: Data Read: --> --> --> --> Cmd byte [pkt checksum] Write Command A Data Write operation involves the transfer of two bytes of data (1 word) to the chip set. To transfer the first byte (high byte), the desired data byte is loaded on the 8 data bits and ~HostSlct, ~HostWrite and HostCmd are brought low. The HostWrite signal is then brought high to end the transfer of the first byte. To transfer the second byte (low byte), the desired data byte is loaded on the 8 data bits and ~HostSlct, ~HostWrite and HostCmd are again brought low. Time Cmd Write: Data Write: Data Read: A Data Read operation involves the transfer of two bytes of data (1 word) from the chip set to the host. To transfer the first (high) byte, ~HostSlct, ~HostRead,and ~HostCmd signals should be brought low, and the data should be read from the 8 bit data bus. The HostRead 25 --> --> --> --> Cmd byte word 1 [word 2] [pkt checksum] Command Errors Read Command Time --> Cmd Write: Data Write: Data Read: --> --> If a command, or command sequence is sent to the chipset that is not valid at a given operating condition of the chipset, but is valid at other times, this command is said to cause a command error. -> Cmd byte When a command error occurs this condition is indicated by the 'command error' bit of the axis status word (See the section of this manual entitled "Axis Status" for more information on the axis status word). Word 1 [Word 2] [pkt checksum] [ ] Indicates an optional operation The following list indicates the command sequences that result in a command error: Packet Checksum The above charts show that at the end of each packet, a checksum word is available for reading. - Although host to chip set I/O operations are extremely reliable, for critical applications the checksum can provide a further reliability enhancement (particularly in very noisy electrical environments, or when the communication signals are routed over a media that may have data losses such as a serial link). Changing and updating the acceleration (SET_ACC, UPDATE) when in the trapezoidal profile mode and when the axis trajectory is still in motion. - Changing and updating either the velocity, max acceleration, or jerk (SET_VEL or SET_MAX_ACC or SET_JERK, and then UPDATE) when in the S-curve profiling mode and when the trajectory is in motion - Commanding a move in the same direction as a limit switch condition when in Trapezoidal or S-curve profile mode. For example if travelling in the positive direction and a limit switch is encountered, a further move in the positive direction will be ignored and a command error will be generated. This checksum consists of a 16-bit sum of all previous communications that have occurred for the associated command. The command byte is included in the low byte of the 1st checksum word (high byte set to 0). Data words are added as is to the checksum value. For example if a SET_VEL command (which takes two 16-bit words of data) was sent with a data value of fedcba98 (hex), the checksum would be: Once a command error occurs the command error bit is set, and the illegal profile changes are ignored. If additional parameters are also changed such as position or any filter values as part of the same UPDATE command then these parameters will not be rejected at the time of the UPDATE, and they will become the active values. 0011 (code for SET_VEL command) + fedc (high data word) + ba98 (low data word) ---------1b985 check sum = b985 (keep bottom 16 bits only) Axis Addressing Most chip set commands alter the parameters or the operating state of one axis at a time. In this way each axis can be controlled separately. To facilitate efficient communication for these types of commands, the chip set maintains the concept of a current axis number, which can be set explicitly by the host. After setting the current axis number, commands that are addressed to the current axis will automatically operate on this axis. The current axis number will stay the same until it is changed by one of the commands that alter the current axis number. Reading the checksum is optional. Recovering from an incorrect packet transfer (bad checksum) will depend on the nature of the packet. Read and Write operations can always be re-transmitted, while a command resulting in an action may or may not be re-tried, depending on the command and the state of the axis. Illegal Commands As an illustration of this, the following sequence sets the current axis to #2, updates some motion parameters, and switches to axis #1, and alters some other motion parameters. When the MC1241A receives a command that is illegal (see host command summary for listing of illegal commands), it will signal this condition by returning a checksum of 0, regardless of the illegal command value or the value of any subsequent data written to the host as part of the illegal command sequence. SET_2 SET_POS In this manner the host processor checksum can be used to detect communication problems as well as an illegal command sequence, resulting in a simplification of the host processor communication code. UPDATE 26 02345678 -> sets current axis to #2 -> loads current axis (#2) dest. position with value of 2345678 -> causes the loaded value to take effect (axis # 2) SET_1 SET_ACCEL 00001234 UPDATE -> sets current axis to #1 -> loads current axis (#1) with acceleration value 1234 -> causes the loaded value to take effect (axis # 1) Bits 0-7 indicate various status flags that can also generate host interrupts (see next section for details). These flags are set by the chipset, and must be reset by the host (They will not be cleared by the chipset). Bits 0-7 of the status word operate using a set/reset mechanism. These flags are set by the chipset, and must be reset by the host. If they are not reset by the host they will remain active indefinitely. Axis Status The MC1241A supports a status word for each axis, which contains various information about the state of the axis. Miscellaneous Mode Status Word The status word is a 16-bit register which can be queried using the command GET_STATUS. It contains the following information (Bit encoding is 0 = LSB, 15 = MSB): Bit # 0 1 2 3 4 5 6 7 8 9 10 11 12,13 14,15 There is another status word available that indicates the current status of various mode settings or conditions. Description Motion complete flag. This bit is set (1) when the axis trajectory has completed. This flag is only valid for the Scurve and trapezoidal, and velocity contouring profile modes. Wrap-around condition flag. This bit is set (1) when the axis has reached the end of its travel range,and has wrapped to the other end of the travel range. Specifically, when travelling in a positive direction past the position +1,073,741,823, the axis will wrap to position 1,073,741,824, and vice-versa. Breakpoint reached flag. This bit is set (1) when one of the breakpoint conditions has occurred. Index pulse received flag. This bit is set (1) when an index pulse has been received. Motion error flag. This bit is set (1) when the position error is exceeded (see filter section for more information). This bit can only be reset when the axis is no longer in a motion error condition Positive limit switch flag. This bit is set (1) when the positive limit switch goes active. Negative limit switch flag. This bit is set (1) when the negative limit switch goes active. Command error flag. This bit is set (1) when a command error has occurred. motor on/off status (1 indicates motor is on, 0 indicates motor is off). axis on/off status (1 indicates on, 0 indicates off). In-motion flag. This bit continuously indicates whether or not the axis trajectory is in motion. This bit is set (1) when the axis is in motion, and cleared (0) when the axis trajectory is not in motion. reserved (may contain 0 or 1) current axis # (13 bit = high bit, 12 bit = low bit). Therefore axis encoding is as follows: Bit 13 Bit12 Axis 0 0 1 0 1 2 reserved (may contain 0 or 1) The miscellaneous mode status word is a 16-bit register which can be queried using the command GET_MODE. It contains the following information (Bit encoding is 0 = LSB, 15 = MSB): Bit # 0-6 7 8-9 10 11,12 13-15 Description Used internally by chipset. Contains no host-useable information. Stop on motion error mode flag. This bit indicates the state of the stop on motion error mode, set by the commands SET_AUTO_STOP_ON and SET_AUTO_STOP_OFF. A 1 indicates auto stop is on. Used internally by chipset. Contains no host-useable information. Auto update flag. This bit indicates the state of the auto update mode, set using the commands SET_AUTO_UPDATE_ON and SET_AUTO_UPDATE_OFF. A 1 indicates that auto update is disabled. Trajectory generator mode. This bit indicates the mode of the trajectory generator, set using the commands SET_PRFL_S_CRV, SET_PRFL_TRAP, SET_PRFL_VEL, SET_PRFL_GEAR. The encoding is as follows: Bit 12 Bit11 Profile Mode 0 0 trapezoidal 0 1 velocity contouring 1 0 s-curve 1 1 electronic gear Phase #. These bits indicate the current phase # of the Scurve profile (only valid if the current profile mode is Scurve). A 0 indicates that the profile has not started yet, and phases 1-7 indicate the phase #'s corresponding to the phases described in the S-curve profiling mode. The 3-bit phase # word is encoded bit 15 MSB, and bit 13 LSB. Host Interrupts In many situations, during axis motion or at other times, it is useful to have the chip set signal the host that a special condition has occurred. This is generally more convenient and efficient than having the host poll Bits 8-10 and 12-13 indicate continuous status information, and do not need to be reset by the host. 27 the chip set for various possible conditions. This chip set-initiated signal is known as a host interrupt. Several chip set conditions may occur that can result in the generation of a host interrupt. Whether these conditions in fact interrupt the host is controllable for each condition and for each axis. The mechanism used to control each condition is a mask register. SET_INTRPT_MASK Sets the interrupt conditions mask GET_INTRPT Returns the status of the interrupting axis (including the interrupting axis #). The current axis # is not altered by this command Changes the current axis # to the interrupting axis. This is a 'time saver' command which performs the dual operations of getting the interrupting axis # and switching to that axis in one command. Clears particular conditions for the interrupting axis. The current axis # is not altered by this command. SET_I The interrupt conditions correspond to bits 0-7 and 11 of the status register (the axis event flags), described in the previous section. These conditions are summarized below: Motion Complete Wrap-around condition Break Point Reached Position Capture Received Motion Error Negative Limit Switch Positive Limit Switch Command Error Occurs when the profile is complete Occurs when the axis position wraps. Occurs when a breakpoint condition has been satisfied. Occurs when the encoder index pulse or home pulse has been captured Occurs when the maximum position error set for a particular axis has been exceeded Occurs when the negative over-travel limit switch is active Occurs when the positive over travel limit switch is active Occurs when a host communication sequence causes a command error condition RST_INTRPT To facilitate determining the nature of the interrupt, the status register holds the axis #, allowing the interrupting axis # to be determined. The following represents a typical sequence of interrupt conditions and host responses. Assume for the purposes of this example that an axis (not the current axis) has hit a "hard stop" causing an essentially instantaneous motion error, as well as a positive limit switch trip. Also assume that the interrupt mask for this axis was set so that either motion errors or limit switch trips will cause an interrupt Event motion Error & limit switch trip generates interrupt interrupting axis status returned by chipset, current axis set to interrupting axis. When one of these interrupt conditions occur for a particular axis, the host interrupt line is made active. At this point the host can respond to the interrupt (although the current I/O operation should be completed), but it is not required to do so When the host has completed processing the interrupt, it sends a command that clears the interrupt conditions for a particular axis, the RST_INTRPT command. chipset clears motion error bit and disables host interrupt line Because limit switch interrupt is still active chipset immediately generates interrupt for limit switch interrupting axis status returned by chipset, current axis set to interrupting axis. This command includes a "clearing mask" as an argument, which allows one interrupt to be cleared at a time. Bits cleared by the RST_INTRPT command are the exact same bits as those cleared by non-interrupt commands such as RST_STATUS and CLR_STATUS. In each case the bits affected are the status word bits 0-7. Interrupts occur for a particular axis. If the user is currently programming parameters on axis #1 and an interrupt occurs on axis #2, it is the host's responsibility to change axis number to 2 if this is the appropriate response to an interrupt on that axis. If more than one axis interrupt condition becomes active at exactly the same time, then the axis with the lowest number will generate the interrupt first. chipset clears limit switch bit and disables host interrupt line Host action host sends SET_I command host detects motion error & limit switch flags are set, recovers from motion error first. host sends: RST_INTRPT 00EF, clearing motion error bit host sends SET_I command host detects that neg. limit switch trip flag is set, performs recovery for limit switch trip. host sends RST_INTRPT 00DF, clearing pos. limit switch bit - At the end of this sequence, all status bits are clear, the interrupt line is inactive, and no interrupts are pending. The following host commands are used in managing interrupts: (See Host Command reference for complete information) Note that it is not required to process multiple interrupts separately (as is shown in the example). It is perfectly valid to process 2 or more interrupt conditions at the same time, and to then send a RST_INTRPT command with a mask that clears multiple bits at the same time. 28 The RST_INTRPT and GET_I commands are only effective when there is an interrupt present. If no interrupt is present than alternative 'polled-mode' commands such as RST_STATUS or GET_STATUS should be used. High Speed Position Capture Encoder Position Feedback Two separate trigger signals are available, although there is only one capture register. The trigger signal source is selected by the host and can be either the index signal, or the home signal. Selection of the index input or the home input as the trigger source is made using the SET_CAPT_INDEX and SET_CAPT_HOME commands. Each axis of the MC1241A supports a high speed encoder position capture register that allows the current 32-bit axis location to be saved based on an external trigger signal. The MC1241A-series of chipsets support direct input of incremental encoder signals. Four position input and control signals are supported: - A quadrature channel - B quadrature channel - Index pulse - Home signal Position Capture Readback After a triggering signal has caused a position capture in the MC1241A the stored position may be read by the host processor. The axis status word indicates whether or not a capture has occurred. The command GET_CAPT is used to retrieve the position stored at the time of the home signal trigger. The A and B signals are used to continuously maintain the position of the motor, and the index and home signals are used as trigger inputs to a high-speed position capture mechanism. Each quadrature channel consists of a square wave offset 90 deg. from the other. Positive motion consists of the A channel leading the B channel by 90 deg., and negative motion consists of the A channel lagging the B channel by 90 deg. For each full phase of one channel, four resolved quadrature counts will occur, resulting in a 4 to 1 resolution enhancement over the basic channel resolution. The captured position is equal to the axis position at the moment the trigger pulse was encountered (including other required signal states defined above). Note that the capture register is located in hardware. Its accuracy is therefore not affected by the velocity of the axis. The position captured by the high-speed position capture register is the actual axis position of the motor encoder, not the trajectory generator position. The index pulse is typically located on the encoder and will be active once per revolution. The chip set recognizes that an index trigger has occurred (i.e. when the 32-bit index location is captured) when the index signal, as well as the A and B signals transition low. To read a sequence of positions the capture value must be read by the host processor before another position capture can occur. For example if a trigger occurs, and a second trigger occurs before the capture position was read using the GET_CAPT command, no capture will occur from the second triggering signal. The home signal is typically connected to a position reference sensor, or to any other general purpose synchronizing signal. The home signal is recognized when it alone transitions low. The state of the A and B signals does not affect home signal trigger recognition. Stall Detection Encoder Filtering The MC1241A chipset supports two primary operations in connection with encoder feedback: To enhance reliability of the received encoder information the MC1241A provides digital filtering of the quadrature data lines (A and B quadrature count) as well as the index and home signals. - readback of current axis position - automatic stall detection. For all of these signals a valid high or low condition is recognized only when the condition has been maintained for 3 clock cycles of 160 nSec each (total required duration of 480 nSec) Readback of the current encoder position is accomplished using the GET_ACTL_POS command. This command allows the user to confirm that the stepper axis has achieved a particular location. The GET_ACTL_POS command can be used at any time, whether the axis is in motion or not. For example if a brief spurious noise signal on one of the lines occurs for 300 nSec, then this noise will be rejected until a valid state change lasting over 480nSec occurs. Automatic stall detection allows the chipset to detect when the step motor has lost steps during a motion. This typically occurs when the motor encounters an obstruction, or otherwise exceeds its rated torque specification. 29 Automatic stall detection operates continuously once it is initiated. The current desired position (target position) is compared with the actual position (from the encoder) and if the difference between these two values exceeds a specified limit a stall condition is detected. If the automatic motor stop mode is not set than only the motion error status bit is set. Recovering From A Motion Error To initiate automatic stall detection the host must specify the number of encoder counts per output micro step. This is accomplished using the command SET_STEP_RATIO. The following equation shows how this value should be set for various values of encoder count resolution. To recover from a motion error which results in the microstep output being halted, the following sequence should be performed: Ratio = (Ncounts/Npulses)*256. where: Ratio is the ratio value specified to the SET_STEP_RATIO command Ncounts is the number of encoder counts per motor 1) Determine cause of motion error and correct problem (this may require human intervention). 2) Re-enable motor output using the MTR_ON command After the above sequence the axis will be at rest, and the position error between the target position and the actual encoder position will be set to zero. rotation. Npulses is the number of output micro steps per motor rotation. This value 12,800 for a 1.8 degree step motor and 3,200 for a 7.2 degree step motor Resetting the position error is useful not only for motion error recovery but also when the coordinate system is changed. Several commands reset the position error to zero. These commands are SET_ACTL_POS, which sets the actual as well as the target position to a particular value, and SYNCH_PRFL, which sets the actual position equal to the target position. The SYNCH_PRFL command will not take affect until an UPDATE command is given. For example if a step motor with 1.8 degree full step size is used with an encoder which has 4,000 counts per motor rotation, the ratio specified in the SET_STEP_RATIO command would be (4,000/12,800)*256, or 80. Although the MC1241A supports stall detection with encoders that have a different number of counts then pulses, the ratio provided with the SET_STEP_RATIO command must be an exact integer. For example in the above example an encoder with 4,000 counts per rotation which gives a ratio value of 80 is acceptable however an encoder with 4,096 which gives a ratio value of 81.92 is not acceptable. Microstepping In addition to trajectory generation the MC1241A chipset provides direct internal generation of microstepping signals for 2-phase as well as 3phase stepper motors. The following diagram shows an overview of the control flow of the microstepping scheme: Position Error The difference between the desired position, also called the target position, and the actual encoder position is known as the position error, or the actual position error. Motor Output (PWM or DAC16) Motor command register (SET_MTR_CMD) The position error is continuously maintained by the chipset and can be read by the host at any time. To read the position error the command GET_ACTL_POS_ERR is used. Phase A command Phase B command To perform the stall detection function the position error is continuously compared with the maximum allowed position error, which is set using the command SET_POS_ERR. To read this value back the command GET_POS_ERR is used. The units of the maximum position error is encoder counts. To Amp. Trajectory Generator If the maximum position error value is exceeded (stall is detected), then the axis is said to be in a "motion error" condition. When this occurs the motion error bit in the axis status word is set, and further pulse generation may be halted, depending on the state of the automatic motor shutdown mode (see SET_AUTO_STOP_ON and SET_AUTO_STOP_OFF host command descriptions). The microstepping portion of the chipset generates a sinusoidal waveform with 64 distinct output values per full step (one full step = a quarter electrical cycle). The output frequency of the microstepping signals are controlled by the trajectory generator. The amplitude of the microstepping signals are controlled using a register that can be set by the host processor known 30 as the motor command register. Adjustment of this register by the host allows different motor power levels during (for example) motion, and at rest. For 3-phase stepper motors or AC Induction motors, the phase C waveform must be constructed externally using the expression C = (A+B). Typically this is performed by the motor amplifier itself. See the following section of this manual entitled "Motor Output" for more information. Two microstepping waveforms are provided, one appropriate for traditional 2-phase stepper motors with 90 deg. of separation between phases, and one appropriate for 3-phase stepper motors and AC Induction motors with 120 deg. separation between phases. For more information on AC Induction Motor Control see the section entitled AC Induction Motor Control. Motor Command Control The MC1241A provides the ability to set the motor command (power output) level of the stepper motor. This is often useful to optimize the motor torque, power consumption, and heat generation of the motor while it is at rest, or in various states of motion. Microstepping Waveforms The motor output level is controlled by the motor command register. This register can be set using one of two commands; SET_MTR_CMD and SET_BUF_MTR_CMD. These commands are identical except that SET_BUF_MTR_CMD is double buffered, and requires an UPDATE or a breakpoint to occur before it takes effect. This feature can be used to advantage when it is desired that the motor power changes be synchronized with other profile changes such as at the start or the end of a move. To specify 2-phase motor waveforms use the command SET_PHASE_2, and to specify 3-phase motor waveforms use the command SET_PHASE_3. Regardless of the waveform selected or the motor output signal format (PWM or DAC16), 2 output signals per axis will be provided by the chipset. The following chart shows this. Waveform Motor Output Mode 2-phase 2-phase 3-phase 3-phase PWM DAC16 PWM DAC16 # of Output signals & Name 2 (A, B) 2 (A, B) 2 (A, B) 2 (A, B) Changing the power level does not affect the microstepping output phasing or the frequency of the output waveform, it simply adjusts the magnitude of the waveform. AC Induction Motor Control For specific pin assignments of the PWM and DAC16 motor output signals see the section of this manual entitled 'Pin Descriptions'. The MC1241A chipset can be used as the basis of a variable speed 3phase AC Induction motor controller. In this mode the chipset is set for a 3-phase waveform, and is operated as if it were a stepper motor. The position of the motor is not precisely maintained, however the velocity of the AC Induction motor can typically be controlled to within 10 - 20 percent. The diagram below shows the phase A, B signals for a 2-phase stepper motor, and the phase A, B signals for a 3-phase stepper motor or AC Induction motor. Such a controller can be used for spindles, and other motors where velocity control, not positioning is required. 2-Phase Stepper Phase A Phase B When running an AC Induction motor using variable speed control care should be taken that the output drive signal should never have a frequency of 0. Even if the motor is not rotating the drive frequency should have at least some rotational frequency. This is because a relative difference in the frequency of the drive signals and the motor rotor (called the slip frequency) is required to avoid magnetic field saturation at rest, a potentially damaging condition. 90 Deg Microsteps 64 128 192 256 320 Using the MC1241A up to two AC Induction motors can be controlled, and using the MC1141A one can be controlled. The output drive configuration is the same as for 3-phase steppers shown in the 'Motor Output Configuration' section below. 3-Phase Stepper Phase A Phase B Phase C The MC1241A chipset does not provide 'Flux Vector Control' of AC Induction Motors, only variable speed control. Therefore the MC1241A should not be used in AC Induction applications involving precision positioning. 120 Deg 31 Command Summary: DAC16 Decoding The following table summarizes the commands that are used in conjunction with microstepping signal generation: Command Function SET_PHASE_3 Sets the commutation waveform for 3phase brushless motors. SET_PHASE_2 Sets the commutation waveform for 2phase brushless motors. GET_PHASE_INFO Returns type of waveform selected. SET_MTR_CMD Sets the motor command register, used to control the motor output amplitude. SET_BUF_MTR_CMD Sets the buffered motor command register. Functions identically to SET_MTR_CMD except that an UPDATE is required for it take effect. The digital values output by the chipset to the DAC encode the desired voltages as a 16-bit digital word. The minimum voltage is output as a digital word value of 0, a voltage of 0 Volts is output as a digital word of 32,768 (dec.), and the maximum positive voltage is output as a digital word value of 65,535 (dec.). To load each of the four (MC1241A) or two (MC1141A) DACs, the DAC control pins in combination with the chipset's 16-bit data bus are used. To load a particular DAC, The DAC address (1 of 4) is output on the signals DAC16Addr0-1, the 16 bits of DAC data are output on pins Data0-11 (high 12 bits), as well as DACLow0-3 (low 4 bits), I/OAddr0-3 and DACSlct are high, and I/OWrite is low. For more information on the DAC signal timing & conditions, see the Pin Descriptions and timing diagrams section of this manual. DACs with lower resolution than 16 bits can also be used. To connect to a DAC with less resolution, the high order bits of the 16-bit data word should be used. For example, to connect to an 8-bit DAC, bits Data4Data11 should be used. The low order 8 bits are written to by the chipset, but ignored by the DAC circuitry. Motor Output The MC1241A series of chipsets support two motor output methods, PWM and DAC. The motor output method is host-selectable. The selected method affects all axes (motor output mode is not individually programmable for each axis). The host commands to select these output modes are SET_OUTPUT_PWM (to select PWM mode), and SET_OUTPUT_DAC16 (to select 16 bit DAC mode). PWM Decoding The PWM output mode also outputs a sinusoidal desired voltage waveform for each phase, however the method by which these signals encode the voltage differ substantially from the DAC16 digital word. The PWM output mode uses a magnitude signal and a sign signal. The magnitude signal encodes the absolute value of the output sinusoid and the sign signal encodes the polarity of the output, positive or negative. The following diagram shows the magnitude and sign signals for a single output phase. Motor Output Signal Interpretation The diagram below shows typical waveforms for a single output phase of the MC1241A chipset. Each phase has a similar waveform, although the phase of the B channel output is shifted relative to the A channel output by 90 or 120 degrees (depending on the waveform selected). PWM Magnitude (low pass filtered) + motor command +5 V 0V 0 - motor command PWM Sign +5 V The waveform is centered around an output value of 0. The magnitude of the overall generated waveform is controlled by the motor command register (SET_MTR_CMD or SET_BUF_MTR_CMD cmds). 0V In this diagram the PWM magnitude signal has been filtered to convert it from a digital variable duty cycle waveform to an analog signal. For example if the chipset is connected to a DAC with an output range of -10 Volts to + 10 Volts and the chipset is set to a motor command value of 32,767 (which is the maximum allowed value) than as the motor rotates through a full electrical cycle, a sinusoidal waveform centered at 0 volts will be output with a minimum voltage of - 10, and a maximum voltage of +10. Before filtering this signal contains a pulse-width encoded representation of the 'analog' desired voltage. In this encoding the duty cycle of the waveform determines the desired voltage. The PWM cycle has a frequency of 97.6 kHz, with a resolution of 8 bits, or 1/256. The following chart shows the encoding. 32 Several single-chip amplifiers are available which are compatible with these input signals. These amplifiers require an analog reference input (low-passed PMWMag signal from chipset) as well as a sign bit (PWMSign signal from chipset). The amplifier in-turn performs current control typically using a fixed-off time PWM drive scheme (See application notes section of this document for an example of such a circuit) 0/256 1 (min. value) 0 1 128/256 (50 % value) 0 The diagram below shows this amplifier scheme: 255/256 1 (max. value) 0 Amplifier An output pulse width of 0 parts per 256 represents the minimum voltage, an output pulse width of 128 per 256 (50 %) represents a voltage of 50 % total scale and a pulse width of 256 per 256 represents the maximum positive voltage. PWM Mag. A Low Pass Filter PWM Sign A Motor MC1241A PWM Mag. B PWM Sign B Low Pass Filter Motor Drive Configurations Below is shown a typical amplifier configuration for a 2-phase stepper motor using either the PWM or DAC output mode. Current Control H-Bridge Relative to the DAC output method the PWM output mode when used with this amplifier scheme has the advantage of high performance with a minimum of external parts. This amplifier scheme is shown below for a single motor axis (two phases). 2-Phase Motor Output Connection Scheme Amplifiers Axis #1 phase A 3-Phase Drive Configuration Mtr #1 Axis #1 Phase B Below is shown a typical amplifier configuration using the MC1241A in DAC mode for a 3-phase stepper or for an AC Induction motor with 3 phases. MC1241A Axis #2 phase A Current Control H-Bridge Mtr #2 3-Phase Motor Output Connection Scheme Axis #2 Phase B Amplifiers Using the DAC output mode the digital motor output word for each phase is typically converted into a DC signal with a value between -10 to +10 volts. This signal can then be input into an off-the-shelf DCServo type amplifier (one amplifier for each phase) or into any other linear or switching amplifier that performs current control and provides a bipolar, two-lead output. Axis #1 phase A DAC 1A Axis #1 C=-(A+B) DAC 1B Axis #1 Phase B Mtr #1 Axis #1 Phase C MC1241 Axis #2 phase A DAC 2A Axis #2 C=-(A+B) In this scheme each amplifier drives one phase of the stepper motor, with the chipset generating the required sinusoidal waveforms in each phase to perform smooth, accurate motion. DAC 2B Axis #2 Phase B Mtr #2 Axis #2 Phase C When using DAC output mode the digital word provided by the chipset must first be converted into a voltage using an external DAC. Two DAC channels are required per axis.The third phase is constructed externally using the expression C = -(A+B). This is usually accomplished with an Op-amp circuit. If the chipset's PWM output mode is used the PWM magnitude and sign signals are typically connected to an H-bridge-type device. For maximum performance current control should be performed by the amplifier to minimize the coil current distortion due to inductance and back-EMF. Although there are several methods that can be used to achieve current control with the PWM output mode, a common method is to pass the PWM magnitude signal through a low pass filter, thereby creating an analog reference signal which can be directly compared with the current through the coil. 33 Command Summary Command Mnemonic Axis Control SET_1 SET_2 SET_I Profile Generation SET_PRFL_S_CRV SET_PRFL_TRAP SET_PRFL_VEL SET_PRFL_GEAR SET_POS SET_VEL SET_ACC SET_MAX_ACC SET_JERK SET_RATIO SET_START_VEL STOP SMOOTH_STOP SYNCH_PRFL GET_POS GET_VEL GET_ACC GET_MAX_ACC GET_JERK GET_RATIO GET_START_VEL GET_TRGT_POS GET_TRGT_VEL Parameter Update SET_TIME_BRK SET_POS_BRK SET_NEG_BRK SET_ACTL_POS_BRK SET_ACTL_NEG_BRK SET_MTN_CMPLT_BRK SET_EXT_BRK SET_BRK_OFF SET_BRK_PNT UPDATE MULTI_UPDATE SET_AUTO_UPDATE_ON SET_AUTO_UPDATE_OFF GET_BRK_PNT Interrupt Processing SET_INTRPT_MASK GET_INTRPT RST_INTRPT GET_INTRPT_MASK Code (hex) Available on Axes acted on # data words /direction Double Buffered 01 02 08 all axes all axes all axes set by cmd. set by cmd. interrupting axis 1/read 1/read 1/read no no no Set current axis # to 1 Set current axis # to 2 Set current axis # to the interrupting axis 0b 09 0a 0c 10 11 12 15 13 14 6a 46 4e 47 4a 4b 4c 4f 58 59 6b 1d 1e all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis 0 0 0 0 2/write 2/write 2/write 1/write 2/write 2/write 2/write 0 0 0 2/read 2/read 2/read 1/read 2/read 2/read 2/read 2/read 2/read no no no no yes yes yes yes yes yes no yes yes yes - Set profile mode to S-curve Set profile mode to trapezoidal point to point Set profile mode to velocity-contouring Set profile mode to electronic gear Set command position Set command velocity Set command acceleration Set max acceleration (S-curve profile only) Set command jerk Set command electronic gear ratio Set starting velocity Abruptly stop current axis motion Smoothly stop current axis motion Set actual position to target position Get command position Get command velocity Get command acceleration Get max. acceleration (S-curve profile only) Get command jerk Get command electronic gear rate Get starting velocity Get current target position Get current target velocity 17 18 19 1b 1c 35 5e 6d 16 1a 5b 5c 5d 57 all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis set by mask current axis current axis current axis 0 0 0 0 0 0 0 0 2/write 0 1/write 0 0 2/read no no no no no no no no no no no - Set breakpoint mode to time Set breakpoint mode to pos. target position Set breakpoint mode to neg. target position Set breakpoint mode to pos. actual position Set breakpoint mode to neg. actual position Set breakpoint mode to motion complete Set breakpoint mode to external Set breakpoint mode off Set breakpoint comparison value Immediate parameter update Multiple axis immediate parameter update Set automatic profile update on Set automatic profile update off Get breakpoint comparison value 2f 30 32 56 all axes all axes all axes all axes current axis interrupting axis interrupting axis current axis 1/write 1/read 1/write 1/read no no - Set interrupt mask Get status of interrupting axis Reset interrupting events Get interrupt mask 34 Description Command Mnemonic Status/Mode CLR_STATUS RST_STATUS GET_STATUS GET_MODE Encoder GET_ACTL_POS SET_CAPT_INDEX SET_CAPT_HOME GET_CAPT SET_STEP_RATIO GET_STEP_RATIO SET_AUTO_STOP_ON SET_AUTO_STOP_OFF SET_POS_ERR GET_POS_ERR GET_ACTL_POS_ERR Motor Control SET_OUTPUT_PWM SET_OUTPUT_DAC16 MTR_ON MTR_OFF SET_MTR_CMD GET_MTR_CMD SET_BUF_MTR_CMD GET_BUF_MTR_CMD GET_OUTPUT_MODE Miscellaneous SET_ACTL_POS SET_LMT_SENSE GET_LMT_SWTCH LMTS_ON LMTS_OFF GET_HOME RESET GET_VRSN GET_TIME Microstepping SET_PHASE_2 SET_PHASE_3 GET_PHASE_INFO Code (hex) Available on Axes acted on # data words /direction Double Buffered 33 34 31 48 all axes all axes all axes all axes current axis current axis current axis current axis 0 1/write 1/read 1/read no no - Reset status of current axis Reset events for current axis Get axis status word Get axis mode word 37 64 65 36 68 6f 45 44 29 55 60 all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes all axes current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis current axis 2/read 0 0 2/read 1/write 1/read 0 0 1/write 1/read 1/read no no no no no no - Get current actual axis location Set index signal as position capture trigger Set home signal as position capture trigger Get current axis position capture location Set number of encoder counts per step Get number of encoder counts per step Set auto stop on motion error mode on Set auto stop on motion error mode off Set maximum position error limit Get maximum position error limit Get actual position error 3c 3b 43 42 62 3a 77 69 6e all axes all axes all axes all axes all axes all axes all axes all axes all axes global global current axis current axis current axis current axis current axis current axis global 0 0 0 0 1/write 1/read 1/write 1/read 1/read no no no no no yes - Set motor output mode to PWM Set motor output mode to 16-bit DAC Enable profile generator Disable profile generator Write direct value to motor output Read motor output command Write double buffered motor cmd output Get double buffered motor command value Get current output mode 4d 66 67 70 71 05 39 6c 3e all axes all axes all axes all axes all axes all axes all axes all axes all axes current axis global global global global global global global global 2/write 1/write 1/read 0 0 1/read 0 1/read 2/read no no no no no - Set axis position Set limit switch bit sense Get state of limit switches Set limit switch sensing on Set limit switch sensing off Get state of home switches Reset chipset Get chipset software version information Get current chip set time (# cycles) 74 73 7f all axes all axes all axes current axis current axis current axis 0 0 1/read no no - Set waveform to 2-phase Set waveform to 3-phase Get commutation flags set by host 35 Description The following hex code commands are reserved for future use, or are currently used during manufacturing/test. They return a valid checksum, although they should not be used during normal chipset operations. The hex command codes are: 49, 4e Command Reference Each command consists of a single byte, with a command code value as described in the "encoding" description for each command. Data is transmitted to/from the chip set in 16-bit words. All data is encoded "high to low" i.e. each 16-bit word is encoded high byte first, low byte second, and two word data values are encoded high word first, low word second. The following hex code commands are illegal, and will return a checksum of 0. They should not be used during normal chipset operations. The hex command codes are: 00, 03, 04, 22, 80 through ff Unless otherwise noted, all numerical values presented in this command summary are in decimal. Signed data is represented in two’s complement format. In the case of 32-bit quantities, the entire 32-bit number is two's complemented. For example to transmit the decimal number 1,234,567, which has a hexadecimal representation of 12d687, the high word is sent first (12 hex) and then the low word is sent (d687 hex). Negative numbers are treated in the same way. For example to transmit the decimal number -746,455 , which has a hexadecimal value of fff49c29, then the high word is transmitted first (fff4 hex.) followed by the low word (9c29 hex.). Axis Control SET_1 Data/direction: Encoding: Axis acted on: Available on: Double buffered: Some chipset quantities such as position are provided with ‘unity scaling’, meaning that the value provided is used by the chipset without internal scaling. Other chipset quantities are scaled by various constants to allow a more useful operating range. The non-unity scaling constants that are used by the chipset are either 1/216 or 1/232 . Set current axis to #1 1/read 01 (hex) set by command all axes No SET_1 changes the current axis number to 1. All commands that operate on the current axis will be affected by this command. The status of axis #1 is returned. See GET_STATUS command for the status word format. If 1/216 scaling is used then the chipset expects a number which has been scaled by a factor of 65,536 from the ‘user’ units. For example to specify a velocity (SET_VEL command) of 2.75 usteps/cycle time, 2.75 is multiplied by 65,536 and the result is sent to the chipset as a 32 bit integer (180,224 dec. or 2c000 hex.). 1/216 scaling is used with 16 bit SET_2 Data/direction: Encoding: Axis acted on: Available on: Double buffered: as well as 32 bit quantities. The size of the data word does not affect how the scaling is performed. If 1/232 scaling is indicated the chipset expects a number which has been scaled by a factor of 4,294,967,296. For example to specify a jerk value (SET_JERK command) of .0075 usteps/cycle time3, .0075 is Set current axis to #2 1/read 02 (hex) set by command all axes No SET_2 changes the current axis number to 2. All commands that operate on the current axis will be affected by this command. The status of the axis #2 is returned. See GET_STATUS command for the status word format. multiplied by 4,294,967,296 and the result is sent to the chipset as a 32 bit integer (32,212,256 dec. or 1eb8520 hex). All transmissions to/from the chip set are checksummed. The checksum is a 16-bit quantity that can be read at the end of each command transmission. The checksum value consists of the 16-bit sum of all 16-bit transmissions to or from the chip set, including the command byte which occupies the low byte of the first 16-bit transmission word. For example if a SET_VEL command (which takes two 16-bit words of data) was sent with a data value of fedcba98 (hex), the checksum would be: SET_I Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set current axis to interrupting axis 1/read 08 (hex) interrupting axis all axes No SET_I changes the current axis number to the interrupting axis, which is the axis that has caused the host interrupt to become active. All commands that operate on the current axis will be affected by this command. The status of the interrupting axis is returned. See GET_STATUS command for the status word format. 0011 (code for SET_VEL command) + fedc (high data word) + ba98 (low data word) ---------1b985 check sum = b985 (keep bottom 16 bits only) 36 Profile Generation SET_PRFL_S_CRV Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_PRFL_VEL Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set profile mode to S-curve point to point none 0b (hex) current axis all axes No SET_PRFL_VEL sets the trajectory profile mode to velocity contouring. In this mode the host specifies the command acceleration (SET_ACC cmd), the starting velocity (SET_START_VEL cmd), and the maximum velocity (SET_VEL cmd). Once in this mode, the trajectory profile generator will drive the axis at the specified acceleration while not exceeding the maximum velocity. The acceleration and the maximum velocity may be changed on the fly. The starting velocity may not. The axis will stay in this profile mode until another profile mode is explicitly set. There are no limitations on changing the profile mode to velocity contouring while the axis is in motion. SET_PRFL_S_CRV sets the trajectory profile mode to S-curve point to point. In this mode, the host specifies the destination position (SET_POS cmd), the maximum velocity (SET_VEL cmd) the maximum acceleration (SET_MAX_ACC cmd), and the jerk (SET_JERK cmd). Once in this mode, the trajectory profile generator will drive the axis to the destination position at the specified jerk while not exceeding the maximum velocity and max. acceleration. The axis will stay in this profile mode until another profile mode is explicitly set. There are no host-specified limits on the position in this mode. It is the responsibility of the host to specify profile parameters that maintain the axis within safe position limits. While in this profile mode, no parameters should be changed while the axis is in motion. Before setting the current profile mode to S-curve point to point, the axis should be completely at rest. SET_PRFL_TRAP Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set profile mode to velocity contouring. none 0a (hex) current axis all axes No SET_PRFL_GEAR Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set profile mode to trapezoidal point to point none 09 (hex) current axis all axes No Set profile mode to electronic gear none 0c (hex) current axis all axes No SET_PRFL_GEAR, sets the trajectory profile mode to electronic gear. In this mode the host specifies the gear ratio (SET_RATIO cmd). Once in this mode the trajectory profile generator will drive the current (slave) axis to the position specified by the master axis factored by the specified gear ratio. The gear ratio may be changed on the fly. The axis will stay in this profile mode until another profile mode is explicitly set. SET_PRFL_TRAP sets the trajectory profile mode to trapezoidal point to point. In this mode, the host specifies the destination position (SET_POS cmd), the maximum velocity (SET_VEL cmd), the starting velocity (SET_START_VEL cmd), and the acceleration (SET_ACC cmd). Once in this mode, the trajectory profile generator will drive the axis to the destination position at the specified acceleration while not exceeding the maximum velocity. Position and velocity may be changed on the fly when in this profile mode; acceleration and starting velocity may not. The axis will stay in this profile mode until another profile mode is explicitly set. This command will only function properly when an encoder is attached. There are no host-specified limits to axis motion in this mode. It is the responsibility of the host to specify a gear ratio that maintains the axis within safe motion limits. SET_POS Data/direction Encoding: Axis acted on: Available on: Double buffered: Before setting the current profile mode to trapezoidal point to point, the axis should be completely at rest. While in this mode, the acceleration should not be changed until the axis has come to a stop. Set command position 2/write 10 (hex) current axis all axes yes SET_POS sets the final position used during the S-curve and trapezoidal trajectory profile generator modes. The position is specified as a signed 32-bit number with units of usteps. The range is -1,073,741,824 to 1,073,741,823. The loaded position is not utilized until a parameter update occurs. 37 SET_VEL Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set command velocity 2/write 11 (hex) current axis all axes yes SET_JERK Data written: Data read: Encoding: Axis acted on: Available on: Double buffered: SET_VEL sets the maximum velocity magnitude used during the Scurve, trapezoidal, and velocity contouring profile modes. The velocity is specified as an unsigned 32-bit number with units of usteps/cycle. The data word scaling is 1/216. The range is 0 to +1,073,741,823. The SET_JERK sets the command jerk used during the S-curve profile generation mode. The jerk is specified as an unsigned 32-bit number with units of usteps/cycle3. The scaling is 1/232. The range is 0 to loaded velocity is not utilized until a parameter update occurs. SET_ACC Data/direction: Encoding: Axis acted on: Available on: Double buffered: 2,147,483,647. The loaded jerk is not utilized until a parameter update occurs. Set command acceleration 2/write 12 (hex) current axis all axes yes SET_RATIO Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_ACC sets the command acceleration. When in trapezoidal pointto-point mode, the acceleration is specified as an unsigned 32-bit number with units of usteps/cycle2, represented using 1/216 scaling. Set command gear ratio 2/write 14 (hex) current axis all axes yes SET_RATIO sets the electronic gear ratio used by the trajectory profile generator. It is used when the profile mode is set to electronic gear. The gear ratio is specified as a signed 32-bit number with 1/216 scaling. The The range is 0 to +1,073,741,823. When in the velocity contouring mode, the acceleration is specified as a signed 32-bit number with units of usteps/cycle2, represented in 1/216 format.The range is - range is -1,073,741,824 to +1,073,741,823. The specified ratio value is defined as the number of microsteps per encoder count with a positive number indicating motion in the same direction. For example a value of +8000 hex (1/2) will result in 1 microstep in the positive direction for each two encoder counts in the positive direction, and a value of FFFE0000 hex (-2) will result in 2 microsteps in the negative direction for each encoder count in the positive direction. The loaded ratio is not utilized until a parameter update occurs. 1,073,741,824 to +1,073,741,823. The loaded acceleration is not utilized until a parameter update occurs. This command is used when the profile mode is set to trapezoidal point-to-point or velocity contouring. SET_MAX_ACC Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set command jerk 2 words none 13 (hex) current axis all axes yes This command will only function properly when an encoder is attached. Set maximum acceleration 1/write 15 (hex) current axis all axes yes SET_START_VEL Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_MAX_ACC sets the maximum acceleration. The acceleration is specified as an unsigned 16-bit number with units of usteps/cycle2 represented using 1/216 scaling. The range is 0 to +1,073,741,823. The loaded max. acceleration is not utilized until a parameter update occurs. Set starting velocity 2/write 6a (hex) current axis all axes no SET_START_VEL sets the minimum allowed velocity. This command is used during the trapezoidal and velocity contouring profile modes, and is useful in conjunction with systems that may be induced to oscillate if operated at too low a speed. The starting velocity is specified as an unsigned 32-bit number with units of usteps/cycle. The data word scaling is 1/216. The range is 0 to +1,073,741,823. This command is used when the profile mode is set to S-curve point to point. The starting velocity must always be smaller than the maximum velocity set using the SET_VEL command. This command is not used with the S-curve and electronic gear profile modes. 38 The starting velocity parameter is not double buffered. It takes affect immediately, not after an UPDATE command. STOP Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_POS Data/direction: Encoding: Axis acted on: Available on: Double buffered: Abruptly stop current axis motion none 46 (hex) current axis all axes yes GET_POS returns the destination position set using the SET_POS command. It returns the double-buffered value (set directly by the host), which may or may not correspond to the active value, depending on whether the profile parameters have been updated. The returned position is a signed 32-bit number with units of usteps. STOP, also known as CLR_PRFL in earlier chipset versions, stops the current axis by setting the target velocity to zero. This function will not be performed until a parameter update occurs. After the update occurs the axis trajectory generator will stop and the motion complete bit will be set. This command is useful for stopping the axis abruptly. SMOOTH_STOP Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_VEL Data/direction: Encoding: Axis acted on: Available on: Double buffered: Smoothly stop current axis motion none 4e (hex) current axis all axes yes usteps/cycle. GET_ACC Data/direction: Encoding: Axis acted on: Available on: Double buffered: This command does not function when the profile mode is set to Electronic Gear. Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get command velocity 2/read 4b (hex) current axis all axes - GET_VEL returns the maximum velocity set using the SET_VEL command. It returns the double-buffered value (set directly by the host), which may or may not correspond to the active value, depending on whether the profile parameters have been updated. The returned velocity is an unsigned 32-bit number in 1/216 format with units of SMOOTH_STOP stops the current axis by setting the desired velocity to zero, resulting in a controlled deceleration of the axis eventually to a velocity of 0. The deceleration profile will mirror the acceleration profile for the current profile mode. For example if the SMOOTH_STOP command is given during an s-curve profile the deceleration profile may have up to three phases, depending on the # of phases during the acceleration profile, and if the SMOOTH_STOP command is given during a trapezoidal profile or a velocity mode profile the deceleration will be linear, with a value equal to the acceleration parameter. SYNCH_PRFL Get command position 2/read 4a (hex) current axis all axes - Get command acceleration 2/read 4c (hex) current axis all axes - GET_ACC returns the acceleration value set using the SET_ACC command. It returns the double-buffered value (set directly by the host), which may or may not correspond to the active value, depending on whether the profile parameters have been updated. The returned position is either an unsigned 32-bit number in 1/216 format with units Set target position equal to the actual position none 47 (hex) current axis all axes yes of usteps/cycle2, or a signed 32 bit number in 1/216 format with units of usteps/cycle2. This command is used when the profile mode is set to trapezoidal point-to-point or velocity contouring. SYNCH_PRFL sets the trajectory profile generator target position (in microsteps) equal to the actual axis position (in encoder counts), clearing the following error. This command is available for all profile types. This function will not be performed until a parameter update occurs. The SYNCH_PRFL command does not set the target velocity to zero. If it is desired that the axis not move after a SYNCH_PRFL command then a STOP command, in addition to the SYNCH_PRFL command should be used. 39 GET_MAX_ACC Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get maximum acceleration 1/read 4f (hex) current axis all axes - GET_TRGT_POS Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_MAX_ACC returns the max. acceleration value set using the SET_MAX_ACC command. It returns the double-buffered value (set directly by the host), which may or may not correspond to the active value, depending on whether the profile parameters have been updated. The returned acceleration is an unsigned 16-bit number in 1/216 format with units of usteps/cycle2. Return target position 2/read 1d (hex) current axis all axes - GET_TRGT_POS returns the current desired position value being generated by the trajectory profile generator. This value represents the target position for the axis at the current cycle time, i.e. the position being output by the trajectory profile generator at the time of the command. This command operates for all profile modes. The value returned is a 32-bit signed number with units of usteps. The range is 1,073,741,824 to 1,073,741,823. This command is used when the profile mode is set to S-curve point to point. GET_JERK Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_TRGT_VEL Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get command jerk 2/read 58 (hex) current axis all axes - GET_TRGT_VEL returns the current desired velocity value being generated by the trajectory profile generator. This value represents the target velocity for the axis at the current cycle time, i.e. the velocity being output by the trajectory profile generator at the time of the command. This command operates for all profile modes. The value returned is a 32 bit signed number with units of usteps/cycle, represented in 1/216 format. The range is -1,073,741,824 to GET_JERK returns the jerk value set using the SET_JERK command. It returns the double-buffered value (set directly by the host), which may or may not correspond to the active value, depending on whether the profile parameters have been updated. The returned jerk is an unsigned 32-bit number with 1/232 scaling with units of usteps/cycle3. GET_RATIO Data/direction: Encoding: Axis acted on: Available on: Double buffered: +1,073,741,823. Get command gear ratio 2/read 59 (hex) current axis all axes - Parameter Update SET_TIME_BRK Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_RATIO returns the gear ratio set using the SET_RATIO command. It returns the double-buffered value (set directly by the host), which may or may not correspond to the active value, depending on whether the profile parameters have been updated. The returned ratio is a signed 32-bit number in 1/216 format. GET_START_VEL Data/direction: Encoding: Axis acted on: Available on: Double buffered: Return target velocity 2/read 1e (hex) current axis all axes - Set break point mode to time based none 17 (hex) current axis all axes no SET_TIME_BRK sets the current breakpoint mode to time based. In this mode the value loaded into the breakpoint register (SET_BRK_PNT cmd) will represent the number of cycles since chip set power on. After the SET_TIME_BRK command is executed, at each loop the break point value will be compared against the current chip set time. If the values are equal all double-buffered parameters will be loaded in to the active registers. See GET_TIME cmd for information on the chip set time. After this breakpoint condition has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set. Get starting velocity 2/read 6b (hex) current axis all axes - GET_START_VEL returns the starting velocity set using the SET_START_VEL command. The returned starting velocity is an unsigned 32-bit number using 1/216 scaling with units of usteps/cycle. 40 SET_POS_BRK Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_ACTL_NEG_BRK Set break point mode to positive target position based none 18 (hex) current axis all axes no Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set break point mode to negative actual position based none 1c (hex) current axis all axes no SET_POS_BRK sets the current breakpoint mode to positive target position based. In this mode the value loaded into the breakpoint register (SET_BRK_PNT cmd) will represent the axis position in usteps. After the SET_POS_BRK command is executed, at each cycle the break point value will be compared against the current axis target position. If the target position has a value equal to or greater than the breakpoint register then all double-buffered parameters will be loaded in to the active registers. After this breakpoint condition has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set. SET_ACTL_NEG_BRK sets the current breakpoint mode to negative actual position based. In this mode the value loaded into the breakpoint register (SET_BRK_PNT cmd) will represent the axis position in usteps After the SET_ACTL_NEG_BRK command is executed, at each cycle the break point value will be compared against the current axis actual position. If the actual position has a value equal to or less than the breakpoint register then all double-buffered parameters will be loaded into the active registers. After this breakpoint condition has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set. SET_NEG_BRK SET_MTN_CMPLT_BRK Set break point mode to motion complete Data/direction: none Encoding: 35 (hex) Axis acted on: current axis Available on: all axes Double buffered: no Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set break point mode to negative target position based none 19 (hex) current axis all axes no SET_NEG_BRK sets the current breakpoint mode to negative target position based. In this mode the value loaded into the breakpoint register (SET_BRK_PNT cmd) will represent the axis position in usteps After the SET_NEG_BRK command is executed, at each cycle the break point value will be compared against the current axis target position. If the target position has a value equal to or less than the breakpoint register then all double-buffered parameters will be loaded into the active registers. After this breakpoint condition has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set. SET_MTN_CMPLT_BRK sets the current breakpoint mode to motion complete. In this mode the breakpoint condition is satisfied when the motion complete bit in the axis status word becomes active (axis motion is complete). This breakpoint mode is useful for immediately starting a new profile at the end of the current profile. Once the motion complete bit becomes active all double-buffered parameters will be loaded in to the active registers. After this breakpoint condition has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set. No 32-bit compare value is required to be loaded when using this breakpoint mode. SET_ACTL_POS_BRK Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set break point mode to positive actual position based none 1b (hex) current axis all axes no It is the responsibility of the host to ensure that the motion complete bit is not set when this breakpoint is initiated. SET_EXT_BRK Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_ACTL_POS_BRK sets the current breakpoint mode to positive actual position based. In this mode the value loaded into the breakpoint register (SET_BRK_PNT cmd) will represent the axis position in usteps. After the SET_ACTL_POS_BRK command is executed, at each cycle the break point value will be compared against the current axis actual position. If the actual position has a value equal to or greater than the breakpoint register then all double-buffered parameters will be loaded in to the active registers. After this breakpoint condition has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set.. Set break point mode to external none 5e (hex) current axis all axes no SET_EXT_BRK sets the current breakpoint mode to external. In this mode the breakpoint condition is satisfied when the home signal for the current axis becomes active (goes low). This breakpoint mode is useful for executing a profile change based on some external signal condition. Once the home signal becomes active all double-buffered parameters will be loaded in to the active registers. After this breakpoint condition 41 has been satisfied, the breakpoint mode is reset i.e. no additional breakpoints will occur until a new breakpoint condition is set. MULTI_UPDATE Data/direction: Encoding: Axis acted on: Available on: Double buffered: No 32-bit compare value is required to be loaded when using this breakpoint mode. SET_BRK_OFF Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set break point mode off none 6d (hex) current axis all axes no MULTI_UPDATE immediately updates the double-buffered parameters for 1 or more axis simultaneously. For each updated axis, the axis behaves as if a separate UPDATE command had been given for each axis. The associated data word contains a "positive-sense" bit mask for each axis. A one (1) in the axis bit position indicates the axis will be updated. A zero (0) indicates it will not. The following table shows this bit encoding: SET_BRK_OFF sets the breakpoint mode to "off". Any breakpoint mode that has been set previously (SET_TIME_BRK, SET_POS_BRK, SET_NEG_BRK, SET_ACTL_POS_BRK or SET_ACTL_NEG_BRK) and is still active (the breakpoint condition has not occurred), is disabled with this command. After this command has been executed no additional breakpoints will occur until a new breakpoint condition is set. SET_BRK_PNT Data/direction: Encoding: Axis acted on: Available on: Double buffered: Bit # 0 1 2-15 Set break point comparison value 2/write 16 (hex) current axis all axes no Axis # updated 1 2 unused, must be set to 0 SET_AUTO_UPDATE_ON Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_BRK_PNT sets the breakpoint comparison value. Its contents are interpreted based on the type of breakpoint set; time based (SET_TIME_BRK cmd) or position based (SET_POS_BRK cmd, SET_NEG_BRK cmd, SET_POS_ACTL_BRK cmd, and SET_NEG_ACTL_BRK cmd). When set to time-based the loaded value is compared with the current chip set time at each cycle, and the value loaded is a 32-bit number with units of cycles. When set to positionbased the loaded value is compared with the current axis target or actual position at each cycle, and the value loaded is a 32-bit number with units of usteps. UPDATE Data/direction: Encoding: Axis acted on: Available on: Double buffered: Immediately update parameters for multiple axis 1/write 5b (hex) set by data word all axes no Set automatic profile update on none 5c (hex) current all axes no SET_AUTO_UPDATE_ON sets the automatic profile update mechanism on. After this command is sent, a satisfied breakpoint condition will result in all of the double-buffered parameters automatically being transferred to the active registers. Once set to this mode, the axis will stay in this mode until explicitly commanded out using the SET_AUTO_UPDATE_OFF command. SET_AUTO_UPDATE_OFF Data/direction: Encoding: Axis acted on: Available on: Double buffered: Immediately update parameters none 1a (hex) current axis all axes no Set automatic profile update off none 5d (hex) current all axes no SET_AUTO_UPDATE_OFF sets the automatic profile update mechanism off. After this command is sent, a satisfied breakpoint condition will not result in the double-buffered parameters automatically being transferred to the active registers. Once set to this mode, the axis will stay in this mode until explicitly commanded out using the SET_AUTO_UPDATE_ON command. UPDATE immediately updates all double buffered parameters. When in this mode, the only way that profile parameters can be updated is through the UPDATE or the MULTI_UPDATE commands. 42 GET_BRK_PNT Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get break point comparison value 2/read 57 (hex) current axis all axes no GET_INTRPT Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_BRK_PNT returns the breakpoint comparison value set using the SET_BRK_PNT command. The returned value is a 32-bit number with units of either cycles or usteps (depending on the current breakpoint mode). GET_INTRPT returns the status of the axis that generated a host interrupt. The current axis number will not be changed after executing this command. See GET_STATUS for a definition of the returned status word. If this command is executed when no interrupt condition is present, the status of the current axis will be returned. Interrupt Processing SET_INTRPT_MASK Data/direction: Encoding: Axis acted on: Available on: Double buffered: If this command is executed when no interrupt condition is present, the command will return the status of the current axis (same as GET_STATUS command). Set host interrupt mask 1/write 2f (hex) current axis all axes no RST_INTRPT Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_INTRPT_MASK sets the interrupt mask so that interrupt events can be individually masked off. When a non-masked interrupt occurs in any axis, the interrupt signal to the host is activated (HostIntrpt pin on I/O chip). The host can choose to ignore or respond to the interrupt. Once an interrupt has been generated, no new interrupts will be generated until a RST_INTRPT command is given, after which the interrupt signal to the host will be cleared, and a new interrupt (on any axis) can be generated. The associated data word is encoded as a field of bits, with each bit representing a possible interrupting condition. A 1 value in the mask bit will cause the corresponding event to generate an interrupt, while a 0 will stop the corresponding event from interrupting the host. The bit encoding is as follows: Bit # 0 1 2 3 4 5 6 7 8-15 Return status of the interrupting axis 1/read 30 (hex) interrupting axis all axes - Reset interrupting condition events 1/write 32 (hex) interrupting axis all axes no RST_INTRPT resets (clears) the interrupt condition bits for the axis that caused a host interrupt by masking the interrupting axis status word with the specified data word. In addition, the host interrupt signal (HostIntrpt pin on I/O chip) is de-activated.The data word is encoded as a field of bits, with each bit representing a possible interrupting condition. For each status word event bit a 1 value in the specified word will cause the status bit to remain unchanged, while a 0 will reset the corresponding event. The bit encoding is as follows: Bit # 0 1 2 3 4 5 6 7 8-15 Event Motion complete position wrap-around update breakpoint reached position capture received motion error positive limit switch negative limit switch command error not used, must be set to 0 Event Motion complete position wrap-around breakpoint reached position capture received motion error positive limit switch negative limit switch command error not used, may be set to 0 or 1 If this command is executed when no interrupt condition is present, the command will have no effect. 43 GET_INTRPT_MASK Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get host interrupt mask 1/read 56 (hex) current axis all axes no GET_STATUS Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_INTRPT_MASK returns the interrupt mask set by the SET_INTRPT_MASK command. The returned value is a bit-encoded mask, described in the SET_INTRPT_MASK command. GET_STATUS returns the status of the current axis.The bit encoding of the returned word is as follows: Bit # 0 1 2 3 Status/Mode CLR_STATUS Data/direction: Encoding: Axis acted on: Available on: Double buffered: Clear all event bit conditions none 33 (hex) current axis all axes no 4 5 6 7 8 9 10 11 12,13 14,15 CLR_STATUS resets (clears) all of the event bit conditions for the axis (bits 0-7 of the status word). The host interrupt line is not affected by this command. This command is useful for clearing all event bits during initialization, or during on-line usage if the interrupt line and associated commands are not being used. For a detailed description of the status word event bits, see the GET_STATUS command. This command does not affect the status of the host interrupt line, only the status event-bits themselves. To reset the host interrupt line, a RST_INTRPT command must be sent. RST_STATUS Data/direction: Encoding: Axis acted on: Available on: Double buffered: Event motion complete (1 indicates complete) position wrap-around (1 indicates wrap) update breakpoint reached (1 indicates reached) position capture received (1 indicates capture has occurred) motion error (1 indicates motion error) positive limit switch (1 indicates limit switch trip) negative limit switch (1 indicates limit switch trip) command error (1 indicates command error) motor on/off status (1 indicates on) axis on/off status (1 indicates on) In-motion bit (1 indicates axis is in motion) reserved (may be 0 or 1) current axis # (13 bit = high bit, 12 bit = low bit) reserved (may be 0 or 1) Bits 0-7 are set by the chipset, and must be reset by the host (using CLR_STATUS, RST_STATUS, or RST_INTRPT commands). Bits 8, 9, 10, 12, and 13 are continuously maintained by the chipset and are not set or reset by the host. Reset specific event bit conditions 1/write 34 (hex) current axis all axes no GET_MODE Data/direction: Encoding: Axis acted on: Available on: Double buffered: RST_STATUS resets (clears) the condition event bits for the current axis, using a data word mask. The data word is encoded as a field of bits, with each bit representing a possible condition event. For each status word event bit a 1 value in the specified data word will cause the status bit to remain unchanged, while a 0 will reset the corresponding event. The bit encoding is as follows: Bit # 0 1 2 3 4 5 6 7 8-15 Get axis status word 1/read 31 (hex) current axis all axes - Get axis mode word 1/read 48 (hex) current axis all axes - GET_MODE returns the mode word for the axis.The bit encoding of the returned word is as follows: Bit # 0-6 7 Event Motion complete position wrap-around breakpoint reached position capture received motion error positive limit switch negative limit switch command error not used, may be set to 0 or 1 8 9 10 44 Event Contains no host-useable information. Stop on motion error mode flag. 1 indicates auto stop is on. Internal use only. Contains no host-useable data Contains no host-useable information Auto update flag. 1 indicates auto update is disabled. 11,12 13-15 Trajectory profile mode, encoded as follows: Bit 12 Bit 11 Profile Mode 0 0 trapezoidal 0 1 velocity contouring 1 0 s-curve 1 1 electronic gear Phase # (S-curve profile only). 3-bit word encodes phase #. Bit 15 is MSB, bit 13 is LSB. GET_CAPT Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_CAPT returns the current value of the high-speed position capture register, as well as resets the capture hardware so that subsequent positions may be captured. The value returned is a 32 bit signed number with units of encoder counts. Encoder GET_ACTL_POS Data/direction: Encoding: Axis acted on: Available on: Double buffered: This command will only function properly when an encoder is attached. Return actual axis position 2/read 37 (hex) current axis all axes - SET_STEP_RATIO Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_ACTL_POS returns the current encoder position of the current axis. The value read is up to date to within a cycle time.The value returned is a 32 bit signed number with units of encoder counts. SET_CAPT_INDEX Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set position capture trigger source to the index signal none 64 (hex) current axis all axes no encoder counts per motor rotation, and Nmicrosteps is the number of output microsteps per motor rotation (12,800 for a 1.8 degree stepper, 3,200 for a 7.2 degree stepper). Using this equation the resultant ratio must be an exact integer. GET_STEP_RATIO Data/direction: Encoding: Axis acted on: Available on: Double buffered: This command will only function properly when an encoder is attached. Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set number of encoder counts per ustep none 68 (hex) current axis all axes no SET_STEP_RATIO sets the ratio of encoder counts to output microsteps for the current axis used in conjunction with automatic stall detection. The specified ratio is a 16-bit unsigned number with a range of 0 to 32,767. The formula that should be used to set this value is: Ratio = (Ncounts/Nmicrosteps)*256. Where Ncounts is the number of SET_CAPT_INDEX sets the high-speed position register trigger source for the current axis to the index signal. When the index is used as the trigger source, it is gated by the A and B quadrature signals (see Pin Descriptions Section of this manual for details). SET_CAPT_HOME Return high speed capture register 2/read 36 (hex) current axis all axes - Get number of encoder counts per ustep none 6f (hex) current axis all axes - GET_STEP_RATIO returns the ratio of encoder counts to output microsteps set using the SET_STEP_RATIO command. The returned value is a 16-bit unsigned number. Set position capture trigger source to the home signal none 65 (hex) current axis all axes no SET_AUTO_STOP_ON Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_CAPT_HOME sets the high-speed position register trigger source to the home signal. This command will only function properly when an encoder is attached. Enable automatic motor shutdown none 45 (hex) current axis all axes no SET_AUTO_STOP_ON enables automatic profile generation shutdown upon motion error. In this mode profile generation will be disabled (equivalent to MTR_OFF cmd) when a motion error occurs (see 45 SET_POS_ERR cmd for more info.). The profile generator can be reenabled using the MTR_ON cmd. SET_AUTO_STOP_OFF Data/direction: Encoding: Axis acted on: Available on: Double buffered: step ratio parameters (set using SET_STEP_RATIO command). The returned value is a signed 16-bit number with units of encoder counts. The range is -32,768 to +32,767. Disables automatic motor shutdown none 44 (hex) current axis all axes no Motor SET_OUTPUT_PWM Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_AUTO_STOP_OFF disables automatic profile generator shutdown upon motion error. In this mode the profile generator will not be disabled when a motion error occurs. SET_POS_ERR Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_OUTPUT_PWM sets the motor output mode to PWM. PWM mode outputs the motor output value on 2 output signals (sign and magnitude) for each enabled axis. This command affects the output mode for all axes. Set position error limit 1/write 29 (hex) current axis all axes no SET_OUTPUT_DAC16 Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_POS_ERR sets the position error limit for the automatic stall detection facility. The error is specified as an unsigned 16-bit number with units of encoder counts The range is 0 to 32,767. At each chipset cycle the magnitude of the position error calculated by the stall detector is compared with the specified position error limit. If the actual position error exceeds the specified value, the motion error status bit is set. In addition, if the axis has been set for automatic motor stop upon motion error, the axis profile generation will be disabled. The loaded maximum position error is utilized immediately. No update is required for this command to take effect. GET_POS_ERR Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set motor output mode to 16-bit DAC none 3b (hex) global (all axes) all axes no SET_OUTPUT_DAC16 sets the motor output mode to 16-bit DAC. This motor output mode uses a 16-bit data bus, along with various control signals to load a DAC value for each enabled axis. This command affects the output mode for all axes. MTR_ON Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get maximum position error 1/read 55 (hex) current axis all axes - Enable profile generation none 43 (hex) current axis all axes no MTR_ON enables the profile generator . When the profile generator is enabled, phased sine-wave signals are generated by the trajectory generator and output on the motor output signal lines. When it is disabled the sine-wave position is 'frozen' and no motion can occur until it is enabled. GET_POS_ERR returns the maximum position error value set using the SET_POS_ERR command. The returned maximum position error value is an un signed 16-bit number with units of encoder counts. GET_ACTL_POS_ERR Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set motor output mode to PWM none 3c (hex) global (all axes) all axes no After a MTR_ON command the pulse generator will be inactive until a trajectory move is made by the host. Return current position error 1/read 60 (hex) current axis all axes - GET_ACTL_POS_ERR returns the current instantaneous position error of the axis. The returned value represents the difference between the actual position and the target position after the target motion, which has units of microsteps has been converted into encoder counts using the 46 MTR_OFF Data/direction: Encoding: Axis acted on: Available on: Double buffered: Disable profile generation none 42 (hex) current axis all axes no SET_BUF_MTR_CMD Data/direction: Encoding: Axis acted on: Available on: Double buffered: MTR_OFF disables profile generation. When profile generation is disabled the sine-wave position is 'frozen' and no motion can occur until it is enabled. When the profile generator is enabled, phased sine-wave signals are generated by the trajectory generator and output on the motor output signal lines. SET_BUF_MTR_CMD loads the motor command register with the specified value. It is identical to the SET_MTR_CMD except that it requires an UPDATE command for the specified value to take effect. Unless the motor command value is explicitly changed using the SET_MTR_CMD or SET_BUF_MTR_CMD commands, after a MTR_OFF command the motor will hold position SET_MTR_CMD Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_BUF_MTR_CMD Data/direction: Encoding: Axis acted on: Available on: Double buffered: Write motor command value 1/write 62 (hex) current axis all axes no Get double-buffered motor output value 1/read 69 (hex) current axis all axes - GET_BUF_MTR_CMD returns the value set using the SET_BUF_MTR_CMD. The returned value is a 16 bit integer. GET_OUTPUT_MODE Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_MTR_CMD loads the motor command register with the specified value. This register controls the amplitude of the microstepping signals that are sent to the motor. The specified motor command is a 16-bit signed number with range -32,767 to +32,767. Regardless of the motor output mode (PWM or DAC16), a value of -32,767 represents the largest negative direction motor level , a value of 0 represents no motor (0) output level, and a value of 32,767 represents the largest positive motor level. GET_MTR_CMD Data/direction: Encoding: Axis acted on: Available on: Double buffered: Write double-buffered value to motor output 1/write 77 (hex) current axis all axes yes Get current motor output mode 1/read 6e (hex) global (all axes) all axes - GET_OUTPUT_MODE returns the current motor output mode set using the SET_OUTPUT_PWM and SET_OUTPUT_DAC16 commands. The returned 16 bit word contains the motor output mode. The encoding is as follows: Get motor command value 1/read 69 (hex) current axis all axes - Returned Word Value 0 1 2 GET_MTR_CMD returns the value of the motor command register. This value will be equal to the value set after a SET_MTR_CMD command, or after a SET_BUF_MTR_CMD with a subsequent UPDATE command. The returned value is a 16 bit integer. Output Mode PWM not used DAC16 Miscellaneous SET_ACTL_POS Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set actual axis position 2/write 4d (hex) current axis all axes no SET_ACTL_POS sets the current actual position (in encoder counts) as well as the current target position (in microsteps) to the specified value. The desired position is specified as a signed 32 bit number with an allowed range of -1,073,741,824 to 1,073,741,823. 47 This command causes the actual position error to be set to 0. LMTS_ON Data/direction: Encoding: Axis acted on: Available on: Double buffered: The loaded position is utilized immediately. No UPDATE is required for the command to take effect. SET_LMT_SENSE Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set limit switch bit sense 1/write 66 (hex) global (all axes) all axes - LMTS_ON turns the limit switch sensing mechanism on. LMTS_ON reenables limit switch sensing whenever it has been disabled using the LMTS_OFF command. LMTS_OFF Data/direction: Encoding: Axis acted on: Available on: Double buffered: SET_LMT_SENSE sets the interpretation of the limit switch input bits. This command provides added flexibility in interfacing to various switch/sensor components. The signal level interpretation for the positive and negative switch inputs are bit-programmable. A 0 in the corresponding bit of the sense word indicates that the input will be active high. A 1 in the sense word indicates that the input will be active low. The sense word is encoded as follows: Bit # 0 1 2 3 4-15 This command only disables the automatic setting of the negative and positive limit switch bits in the status word. It does not affect the status of these bits if they have already been set, nor does it affect the GET_LMT_SWTCH command. GET_HOME Data/direction: Encoding: Axis acted on: Available on: Double buffered: The above bits are encoded as shown for the MC1241A. For the MC1141A axis 2 is not used. Get state of over-travel limit switches 1/read 67 (hex) global (all axes) all axes - Get state of home signal inputs 1/read 05 (hex) global (all axes) all axes - GET_HOME returns the value of the home signal inputs for all valid axes. The returned word is encoded as follows: Bit # 0 1 2-15 GET_LMT_SWTCH returns the value of the limit switch input signals for all valid axis. The returned word is encoded as follows: Bit # 0 1 2 3 4-15 Set limit switch sensing off none 71 (hex) global (all axes) all axes - LMTS_OFF turns the limit switch sensing mechanism off. LMTS_OFF is used whenever it is desired that limit switch sensing not be active. Description Axis 1 positive limit switch (0 = active high) Axis 1 negative limit switch (0 = active high) Axis 2 positive limit switch (0 = active high) Axis 2 negative limit switch (0 = active high) not used (must set to 0) GET_LMT_SWTCH Data/direction: Encoding: Axis acted on: Available on: Double buffered: Set limit switch sensing on none 70 (hex) global (all axes) all axes - Description Axis 1 positive limit switch (1 = high) Axis 1 negative limit switch (1 = high) Axis 2 positive limit switch (1 = high) Axis 2 negative limit switch (1 = high) not used (set to 0) Description Axis 1 home signal (1 = high) Axis 2 home signal (1 = high) not used (set to 0) The above bits are encoded as shown for the MC1241A. For the MC1141A Axis 2 will always be set to 0. RESET Data/direction: Encoding: Axis acted on: Available on: Double buffered: The above bits are encoded as shown for the MC1241A. For the MC1141A Axis 2 will always be set to 0. The values returned by this command are not affected by the SET_LMT_SENSE command. Reset chip set none 39 (hex) global (all axes) all axes No RESET resets the entire chip set. This command performs the same sequence as a hardware reset. At the end of this operation the chip set will be in the default or powerup condition, defined as follows: 48 8-10 Condition all actual axis positions all capture registers all event conditions host interrupt (HostIntrpt) signal all interrupt masks all profile modes all filter modes all profile parameter values all filter gains all integration limits all max. position error values all brkpnt comparison values auto update all axes status' all motor status' all auto stop modes limit switch sensing limit switch sense register output mode all motor output values current axis number cycle time all waveforms all initial phase offsets all # counts per comm. cycle all phase init methods all commutation modes all prescalars all phase advance gains Hall sense register all phase init durations Initial Value 0 0 cleared not active 0 trapezoidal PID 0 0 32767 32767 0 enabled (on) enabled (on) enabled (on) enabled (on) enabled (on) 0 (all active high) PWM 0 1 4 - MC1241A 2 - MC1141A 3-phase ffff (hex) 0 algorithmic encoder-based disabled 0 0 (all active high) 0 11-13 14-15 For example, the returned version code for the MC1401 (version 1.0 software) is 5908 (hex), the returned version code for the MC1201-P (version 1.0 software) is 4928, and the returned version code for the MC1241 (version 1.3 software) is 4a0b GET_TIME Data/direction: Encoding: Axis acted on: Available on: Double buffered: Microstepping SET_PHASE_2 Data/direction: Encoding: Axis acted on: Available on: Double buffered: 5-7 Set waveform mode to 2-phase none 74 (hex) global all no SET_PHASE_2 sets the current microstepping waveform to 2-phase. With this waveform the microstepping output signals have a phase separation of 90 degrees, and can be used with standard 2-phase stepper motors. 2-Phase mode is the standard waveform mode for most stepper motors. Return chipset software information 1read 6c (hex) global (all axes) all axes - SET_PHASE_3 Data/direction: Encoding: Axis acted on: Available on: Double buffered: GET_VRSN returns various information on the chipset part number and software version. The encoding is as follows: Bit # 0-2 3-4 Return current chip set time. 2/read 3e (hex) global (all axes) all axes - GET_TIME returns the current system time, expressed as the number of cycles since chip set power on.The chip set clock starts at 0 after a power on or reset and will count indefinitely, wrapping from a value of 4,294,967,295 to 0. The returned value is a 32 bit number with units of cycle times. After a reset (software or hardware) the chipset requires at least 2 milliseconds before it can accept another host I/O command GET_VRSN Data/direction: Encoding: Axis acted on: Available on: Double buffered: part number code 0 = 00 (MC1400-series), 1 = 01 (MC1401-series), 2 = 31 (MC1241-series) , 3 = 41 (MC1241-series), 4 = 51 (MC1451-series) # axes supported (0 = 1) generation # (1) Interpretation minor software version major software version. Major software versions 2 and above indicate 'A' versions parts "dash" version # (no dash = 0, -P = 1 Set waveform to 3-phase none 73 (hex) global all no SET_PHASE_3 sets the current microstepping waveform to 3-phase. With this waveform the microstepping output signals have a phase separation of 120 degrees, and can be used with 3-phase stepper motors or 3-phase AC Induction motors. 49 GET_PHASE_INFO Data/direction: Encoding: Axis acted on: Available on: Double buffered: Get microstepping flags set by host. 1/read 7f (hex) current axis all - GET_PHASE_INFO returns the state of various microstepping-related flags maintained by the chipset. The returned word is a 16-bit word encoded as follows: Bit # 0- 2 3 4-15 Interpretation used internally by chipset Waveform (0 = 3-phase, 1 = 2-phase) used internally by chipset 50 NOTES 51 Application Notes Interfacing MC1241A to ISA bus. A complete, ready-to-use ISA (PC/AT) bus interface circuit has been provided to illustrate MC1241A host interfacing, as well as to make it easier for the customer to build an MC1241-based system. The interface between the PMD MC1241A chip set and the ISA (PCAT) Bus is shown on the following page. Comments on Schematic This interface uses a 22V10 PAL and a 74LS245 to buffer the data lines.This interface assumes a base address is assigned in the address space of A9-A0. 300-400 hex These addresses are generally available for prototyping and other system-specific uses without interfering with system assignments. This interface occupies 16 addresses from XX0 to XXF hex though it does not use all the addresses. Two select lines are provided allowing the base address to be set to 340,350,370 and 390 hex for the select lines S1,S0 equal to 0,1,2,and 3 respectively.The address assignments used are as follows, where BADR is the base address, 340 hex for example: Address 340h 342h 344h 348h use read-write data write command read status (HostRdy) [D7 only] write reset [Data= don't care] The base address (BADR) is decoded in ADRDEC. It is nanded with SA2:SA3, BADR+0, (B+0) to form -HSEL to select the I/O chip. B+0 nanded with IOR* forms -HRD, host read, directly. The 22V10 tail-bites the write pulse since the setup time is greater than necessary on the bus some of the bus duration is used to generate data hold time at the I/O chip. -HWR, host write is set the first clock after B+0 and IOW* is recognized. The next clock sets TOG and clears -HWR. TOG remains set holding -HWR clear until IOW* is unasserted on the bus indicating the end of the bus cycle. B+4 and IOR* out enables HRDY to SD7 so the status of HRDY may be tested. SD7 is used since the sign bit of a byte may be easily tested. The rest of the data bits are left floating and should be ignored. B+8 and IOW* generate a reset pulse which will init the interface by clearing the two write registers and outputs a reset pulse, -RS, for the CP chip. The reset instruction is OR'd with RESET on the bus to initialize the PMD chip set when the PC is reset. 52 53 PWM Motor Interface Comments on Schematic The following schematic shows a typical interface circuit between the MC1241A and an amplifier which accepts an analog curent command and a separate sign bit. The A3952 from Allegro Microsystems is an integrated H-bridge package with internal current loop control which provides all TTL and power-level circuitry to form a complete amplifier-on-a-chip. The only other components needed are capacitors and resistors. The analog current command input to the amplifier chip is constructed by low pass filtering the digital magnitude output signal from the chipset. The sign bit is connected directly from the MC1241A chipset to the amplifier. The amplifier performs the current control by continuously compariing the analog input signal from the chipset (current command) to the measured current and turing on or off the H-bridge drivers accordingly to maintain the actual current close to the desired current. Some of the resistor and capacitor values for the circuit may need to be adjusted depending on the partricular values for the motor resistance and inductance. In particular the value shown for R7 (.175 Ohm) may change if a maximum current of less than 2 Amps is desired. Other values which may be adjusted are R1 and C1. These adjust the overall PWM frequency (off-time duration) as well as the blanking intervale. See the Allegro application notes for more information. 54 55 16-Bit Serial DAC Interface The following schematic shows an interface circuit between the MC1241A and a dual 16-bit serial DAC Comments on Schematic The 16 data bits and the two address bits from the CP chip are latched in the two 74HC821 latches when the CP writes to address F hex, in the address bits A0-A3. Three 74HC373 latches could also be used. If this is a write to the DAC, DACSlct will be asserted during this CPU cycle. The assertion of DACSlct will be latched by the fed-back and-or gate, and the next clock will set the DACWR latch. The second clock will set the second shift flop which will clear the DACL latch. Since this latch has been cleared the third clock will clear DACWR providing a two clock DACWR level. The fourth clock will clear the second shift flop returning the system to its original state waiting for the next DACSlct. When the DACWR flop is set the 16 bit shift register implemented by the 2 74FCT299's are parallel loaded with the 16 bits of data for the DAC. The 4 bit counter, 74FCT161, is also parallel loaded to 0, and the counter is enabled by clearing the ENP flop, which is contained in half of the 74HCT109. The counter will not start counting nor the shift register start shifting until the clock after the DACWR flop clears since the load overrides the count enable. When the DACWR flop is cleared the shift register will start shifting and the counter will count the shifts. After 15 shifts CNT15 from the counter will go high and the next clock will set the DACLAT flop and clear ENP flop. This will stop the shift after 16 shifts and assert L1 through L4 depending on the address stored in the latch. The 16th clock also was counted causing the counter to roll over to 0 and CNT15 to go low. The next clock will therefore clear the DACLAT flop causing the DAC latch signal L1 through L4 to terminate and the 16 bits of data to be latched in the addressed DAC. The control logic is now back in its original state waiting for the next write to the DACs by the CP. 56 57 NOTES 58 NOTES 59 Internal Block Diagram Incremental Encoder Index Home 1/a Motor Output B A 1/a 1/a PWM sign PWM dir. 1/a DAC address 2 1/phase 16 PWM, DAC signal generator (2-4 channels) Microstepping Generator (2) Quadrature decoder counter (2) Trajectory profile generator Index capture register (2) System Registers (2) Host I/O controller 5 Control 8 Host command 1/a 1 Data host interrupt PosLimit Host I/O 1/a NegLimit Over-travel Inputs Technical Specifications 2 axes with internal microstepping generation (MC1241A) 1 axis with internal microstepping generation (MC1141A) Open loop (uses trajectory generator, microstep generator) Operating Modes: -1,073,741,824 to 1,073,741,823 counts Position Range: -16,384 to 16,383 usteps/cycle with a resolution of 1/65,536 usteps/cycle Velocity Range: S-curve profile: -1/2 to 1/2 usteps/cycle^2 with a resolution of 1/65,536 usteps/cycle^2 Acceleration Range: All other profiles: -16,384 to 16,383 usteps/cycle^2 with a resolution of 1/65,536 usteps/cycle^2 -1/2 to 1/2 usteps/cycle^3, with a resolution of 1/4,294,967,296 usteps/cycle^3 Jerk Range: Trajectory Profile Generator Modes: S-curve (host commands final position, maximum velocity, maximum acceleration, and jerk) Trapezoidal (host commands final position, maximum velocity, and acceleration) Velocity contouring (host commands maximum velocity, acceleration) Electronic Gear (Encoder position used as position command for corresponding stepper axis). 32768:1 to 1:32768 (negative and positive direction) Electronic Gear Ratio Range: Sinusoidal Microstepping Waveform: 64 # Steps Per Full Step: 15 kHz Microstep lookup rate: 90 degrees (used with 2-phase steppers) Phasing: 120 degrees (used with 3-phase steppers & AC Induction Motors) 2 # of Output Phases: 8 bits PWM Resolution: 97.6 kHz PWM Frequency: Incremental Encoder Input Signals: A, B, Index 1.75 mCounts/sec Maximum Encoder Rate: 540 uSec/cycle Profile Cycle Rate 2 (one for each direction of travel) # of Limit Switches Per Axis: Hardware Position Capture Latency: 160 nSec Hardware Position Capture Triggers: Index signal (quadrature A and B must be low) Home signal 80 # of Host Commands: Available Configurations: Ordering Information Chipset p/n: MC1 41A 2 - 2 axis 1 - 1 axis Custom chipset versions also available. Call PMD Chipset Developer's Kit p/n: DK1241A* *(Supports MC1241A and MC1141A) Performance Motion Devices, Inc. 12 Waltham St. Lexington, MA 02421 tel: 781.674.9860 fax: 781.674.9861 www.pmdcorp.com