Turbo Firmware Update Listing


V1.939 Updates (March, 2002)


1.       Added support for DSP56311 CPU (Option 5Ex).

2.       Added new status bit at X:$000006 bit 21 that is set to 1 to indicate that CPU is DSP56311 type (X:$000006 bit 21 also set to 1 in this case).

3.       Moved location of main serial-port communications buffer from $001Exx to $0036xx.  Moved location of host-bus port communications buffer from $001Fxx to $0037xx.  Moved location of synchronous M-variable buffer from $0036xx and $0037xx to $001Exx and $001Fxx.  Changes necessary to support DSP56311 (Option 5Ex) properly.

4.       Increased maximum value of Ixx71 Commutation Cycle Size variable from 8,388,607 to 16,777,215.

5.       Changed range of Ixx75 Phase Position Offset variable from –8,388,608 – +8,388,607 to 0 – 16,777,215.  If a negative value of Ixx75 is specified, it is stored as (Ixx71 + Ixx75), which provides the same effect (the proper value of Ixx71 must already be specified for the motor).

6.       Added new variable I12 to better support on-the-fly changes in vector feedrate during lookahead.

7.       Added new variable I30 to support automatic “wrapping” of compensation tables (the last entry in the table “wraps” to become the correction at zero position as well).  Existing documentation incorrectly reported that this was done always in earlier firmware versions, but correction at zero position was always zero, regardless of last entry.

8.       Added support for “hardware 1/T” using D-revision or newer PMAC2-style “DSPGATE1” Servo ICs.  In new conversion table method ($C with mode bit set), the IC computes the timer-based fractional count value in hardware; the conversion table simply combines it with the whole-count value.  This permits use of the alternate timer mode for sub-count capture and compare.

9.       Computational efficiency of dual-ported RAM data reporting buffers was improved.

10.   Computational efficiency of commutation calculations was improved about 20%.

11.   Permitted “foreign” characters (ASCII value > 127) to be accepted in comments (after semi-colon) without causing an error to be reported.

12.   Modified timing of multiplexer port interface signals to ACC-34 boards so they will work properly with Option 5Ex 160MHz CPUs.

13.   Fixed problem with BREQ “buffer request” interrupt on ISA/PCI bus.


V1.938 Updates (June, 2001)


  1. Corrected operation of the UNDEFINE command so it only clears axis definitions in the addressed coordinate system.
  2. Corrected operation of DPRAM binary rotary buffer download through USB interface.
  3. Increased commanded velocity saturation value for jog-to-position and RAPID-mode moves from 256M/Ix08 counts/second to 768M/Ix08 counts/second, consistent with other types of moves.
  4. Improved noise immunity in conversion-table algorithms for ACC-51 high-resolution analog-encoder interpolators to decrease chance of “quadrant” errors due to high noise on analog lines.
  5. Corrected VME mailbox communications so that responses of more than 15 characters can be read properly.
  6. Implemented support for ACC-57E Yaskawa/Mitsubishi absolute encoder interface board in Ixx10 and Ixx95 variables.  See ACC-57E manual for details.
  7. Implemented support for “I-button” real-time clock/calendar chip on new “Flex” CPU design.
  8. Limited number of commands that can possibly be pulled off individual port in one background cycle to 8 to prevent possibility of trapping the background cycle with very high-speed communications.
  9. Corrected problem with DEFINE UBUF when background PLCs are enabled.
  10. Added support for on-board IEC-1131 ladder/sequential-function-chart programs.


V1.937 Updates (November, 2000)


1.       Changed I5061 to I5076 A/D de-multiplexing pointer variables to contain the full address of the A/D register, not just the offset from $078800.  The old default value of 0 still selects $078800, but $078800 must be added to existing non-zero values to maintain compatibility.

2.       Automatically sets I58 to 1, enabling DPRAM ASCII communications, at power-up/reset, if any DPRAM IC is detected.

3.       Fixed operation of J! command so that commanded position is always rounded to nearest integer number of counts, regardless of the size of the following error.

4.       Fixed glitch at the center 1/8-millionth section of long compensation tables (> ½-million counts long).

5.       Fixed operation of background variable read buffer in multi-user mode.

6.       Added foreground “in-position” check in servo interrupt, enabled by I13=1.  Added foreground in-position motor status bit – bit 13 of Y:$0000C0, etc.

7.       Permitted disabling of automatic command parsing on Option 9T auxiliary serial port by setting I43 to 1, permitting custom parsing algorithms to be written for serial input of data that is not in PMAC command format.

8.       Permitted loading of binary rotary motion program commands from DPRAM to internal buffer as a foreground real-time interrupt task instead of a background task with I45=1.

9.       Permitted disabling of A/D de-multiplexing with I5080=0.

10.   Implemented alternate rotary-axis rollover mode in which the sign of the specified destination value also specifies the direction to turn to that point.  Setting Ixx27 to a negative value enables this mode.

11.   Implemented |I|T integrated current limiting function as alternate to existing I2T integrated current limiting.  In |I|T, the magnitude of the current itself, not the square of the current, is integrated and compared to the Ixx58 limit.  Setting the Ixx57 continuous current magnitude value to a negative number enables this alternate mode.  This more accurately tracks the thermal behavior of a constant voltage-drop device such as an IGBT, whereas I2T is better for constant-resistance devices such as MOSFETs and motor windings.

12.   Implemented automatic clearing of direct current-loop registers to improve direct-PWM control of permanent-magnet brush motors.  This mode is enabled by setting Ixx96 to 1 when Ixx01 bit 0 = 1 (enabling commutation) and Ixx82 > 0 (enabling current loop).

13.   Implemented ABR command, permitting fastest possible abort of currently executing program, and start or restart of a motion program.

14.   Implemented “time remaining in move” register and MOVETIME query command, to support functions initiated at a fixed time before the end of a commanded move.

15.   Implemented SETPHASE command (on-line and buffered) to copy Ixx75 phase value into phase position register.  Useful for correcting the phase position at a known point (e.g. the index pulse) after an initial rough phasing (e.g. from Hall commutation sensors).

16.   Implemented LOCK and UNLOCK commands (on-line and buffered) to control up to 8 process locking bits that can prevent possible conflict of foreground and background tasks attempting to manipulate the same register.

17.   Implemented on-line I{constant}=@I{constant} command, permitting the value of one I-variable to be set to the address of another I-variable.  The main purpose of this command is to be able to set an address I-variable (e.g. Ixx03, Ixx04, Ixx05, Isx93) to the address of a conversion-table entry without having to look up the address of that entry.

18.   Added capability for UMAC Turbo CPUs to generate their own servo and phase clock signals when expected clock source is not found.  Keeps watchdog timer from tripping so that new clock source can be established.  Bit 3 of X:$000006 set if CPU is generating its own clocks.

19.   Resolution of (previously undocumented) real-time clock register L:$000017 changed from 1/256 second to 1/1024 second.

20.   Turbo PMACs with extended user data memory options (5x1 or 5x3) have default user buffer of 65,536 words.

21.   I52 CPU clock speed multiplier parameter range extended to 14 to support CPU speeds of up to 150 MHz.

22.   Resolution of (previously undocumented) real-time interrupt cycle time registers X:$00000B (latest time) and Y:$00000B (maximum time) changed to 2 CPU clock cycles.

23.   Added background cycle time registers X:$000022 (latest time) and Y:$000022 (maximum time) with resolution of 2 CPU clock cycles.

24.   Internal-use global status bits “Servo Active” (X:$000006 bit 21) and “RTI Active” (X:$000006 bit 23) removed.

25.   Implemented anti-windup protection for current-loop integrators.  If calculated output is more than 9/8 of saturated output, integrator value is reduced to that which would produce 9/8 of saturation.

26.   Corrected operation of cutter compensation for compensated inside corner immediately following inside-corner introduction of compensation.

27.   Extended I68n5/I69n5 and I7mn5 encoder variables to support de-multiplexing of hall commutation states from Yaskawa encoder third channel (“B” or newer revision of DSPGATE1/2 Servo/MACRO IC required).

28.   Corrected operation of LIST BLCOMP DEF and LIST TCOMP DEF commands.

29.   Corrected algorithm in compiled PLCs for taking INT of a quotient.

30.   Corrected deadband gain algorithm for true deadband (Ixx64=-8) with small motor scale factor (Ixx08~1).  With pulse-and-direction output, the previous small remaining residual could cause dithering.

31.   Fixed action of BREQ (Buffer Request) interrupt and control-panel output when entering rotary motion program commands. This did not work properly in V1.935 and V1.936.

32.   Fixed operation of desired position limits on negative jog commands.

33.   Fixed operation of desired position limits when programming origin is changed with PSET or {axis}= commands. Desired position limits now stay referenced to motor zero position (home), not programming origin.

34.   Fixed operation of error-triggered move-until-trigger so that Ixx64 deadband gain parameter is no longer cleared on triggering.


V1.936 Updates (April 2000)


Note: After upgrading an older system to V1.936 and either getting the old configuration back from flash memory or reloading a configuration file, the user should issue an I20..24=* command to set up any MACRO ICs and DPRAM ICs properly.  If users had non-zero values in their old configuration for I20 and I21, these values should be entered into I40 and I41 respectively.  After this, SAVE the configuration and reset the board normally.


1.       Added support for UMAC Turbo systems.

2.       Added new variables I20 – I23 to specify base addresses of MACRO ICs 0 – 3 respectively, providing flexibility in MACRO ring configurations on UMAC Turbo.  These must be set properly to support automatic firmware functions using these ICs, including multiplexer port functions, display port, and I6800 – I6999.

3.       Moved old variables I20 (watchdog timer reset value) and I21 (I-variable lockout control) to their proper locations of I40 and I41.

4.       Default values of “address” I-variables made more system-specific to reflect what components such as Servo ICs and MACRO ICs are actually found by the processor.

5.       Added 3D cutter-radius compensation with new program commands CC3, NX{data}, NY{data}, NZ(data}, TR{data}, TX{data}, TY{data}, and TZ{data}.

6.       Added “altered destination” RAPID mode move on-line command !{axis}{data}… to be able to break into currently executing RAPID-mode move and change the move on the fly to a new destination, or execute a RAPID-mode move directly from an on-line command.

7.       Extended I49nn controller configuration status I-variables

8.       Made the communications ports independent with respect to opening of program buffers.  Only the port over which the OPEN command was issued can accept buffered program commands, LIST the open buffer, LEARN points into the open buffer, and CLOSE the buffer.  Other ports can be used simultaneously for on-line commands.

9.       Refined error reporting when CLOSEing a program buffer missing ENDIF and/or ENDWHILE.  Now reports ERR009 (program structure error), and only reports the error on CLOSEing this particular buffer.

10.   Extended Ixx91, Ixx95, and I8000 – I8191 to support parallel position reads in byte-wide sections from ACC-3E1 and ACC-14E boards.

11.   Corrected problem with hardware position capture over MACRO in V.1933,4,5.

12.   Corrected problem in DELETE GATHER command that could cause buffer management problems.

13.   Corrected problem in cutter compensation in sequencing with non-compensated moves (RAPID, DWELL, out-of-plane).

14.   Corrected problem in cutter compensation with CIRCLE mode lead-in moves.

15.   Corrected operation of Isx91 default program parameter after $$$ software reset, and in repeated execution of program.

16.   Corrected absolute phase position read of resolver-to-digital converter through MACRO station.

17.   Corrected PMATCH problem when linear set of axes X, Y, and Z, or U, V, and W were defined “out of order” (e.g. #1->X, #2->Z, #3->Y).

18.   Corrected operation of PMATCH when called from within a motion program (CMD “&nPMATCH”).


V1.935 Updates (February 2000)


1.       Corrected problem with executing P({expression})={expression} statement in motion program.

2.       Corrected problem in homing-search move with capture over MACRO ring when previous homing-search move was interrupted with a Kill command.

3.       On-line addressing commands # and & are now port-specific; they only affect the addressing of commands on the port they were sent to, no longer the other ports.

4.       The set of 8 motors whose data is reported on a <CTRL-P>, <CTRL-V>, <CTRL-F>, or <CTRL-V> command is now independent for each port, set by the new ##{constant} command given on that port, not by the global variable I59.

5.       I59, which now affects the Turbo PMAC(1) control-panel port selector only, can now be set from the control-panel port.

6.       New commands ADDRESS#P{constant} and ADDRESS&P{constant} permit variable setting of the addressed motor and coordinate system, respectively, from within a PLC program for CMD statements within that PLC program.

7.       Added registers that record instruction cycles spent in phase and servo interrupt tasks to help determine computational duty cycle status.

8.       Added cutter compensation move buffer, created with DEFINE CCBUFFER{constant} command, erased with DELETE CCBUFFER command, to permit out-of-plane moves while in cutter compensation.

9.       Added ERR019, which is reported when a command to change position value (HOME, HOMEZ, PSET) is attempted while moves are stored in the cutter compensation move buffer.

10.   If the same axis letter repeats in a single motion-program line, each occurrence is a new move command.  Formerly, the value(s) associated with the later occurrence overwrote the values associated with the earlier occurrence, and only a single move was executed.  For example, the program line TM1000 X10 X20 X30 now causes the execution of three consecutive X-axis moves, each one second long.  Formerly it caused execution of only a single move (X30), one second long.

11.   When entering SPLINE mode, the move time for the added introductory spline segment is now automatically set to the first move time declared with TM in SPLINE mode.  Formerly, this segment time was left at the previous value (or the Isx89 default if no value had previously been declared).

12.   Fixed problem with scaling of absolute phase position reads from MACRO Stations with Ixx91=$73nnnn or Ixx91=$74nnnn so they now match the scaling of ongoing feedback scaled in 1/32 count.  Implemented new Ixx91 settings of $71nnnn and $72nnnn to match scaling of ongoing feedback scaled in counts.

13.   Fixed internal stack error that occurred on abort and could cause overwriting of variables like Ixx68.


V1.934 Updates (September 1999)


1.       Fixed de-multiplexing of Opt 12/ACC-36 A/D converters with I5060 – I5096.

2.       When control-panel-port selector switch on Turbo PMAC(1) selects ‘0’, firmware no longer writes to indicator outputs, so they can be used as general-purpose outputs.

3.       Fixed operation of synchronous M-variable assignments when used in the lookahead buffer.

4.       Fixed operation of cutter-radius compensation when more than 8 DWELL commands execute between two compensated moves.

5.       Fixed operation of <CTRL-C> global coordinate-system status request command.

6.       Corrected time of DWELL commands when not in cutter-radius compensation.

7.       Fixed operation of HOMEZ command when issued through dual-ported RAM control panel.

8.       Fixed initial acceleration on resuming running after feed hold, jog away, and jog return.

9.       Fixed operation of DEFINE GATHER command without argument when gathering set up for dual-ported RAM.

10.   Corrected arctangent calculations for high-resolution encoder interpolation and “two-guess” phasing search.

11.   Fixed the blocking of interrupts around writing to M-variables in background routines to ensure no corruption when foreground and background routines write to M-variables in the same word.

12.   Added capability to stop on desired position limit if Bit 15 of Ixx24 is set to 1.  Positive desired position limit is (Ixx13 – Ixx41); negative desired position limit is (Ixx13 + Ixx41).  If Bit 14 of Ixx24 is also set to 1, program will not stop, but motor will saturate at the limit value.

13.   Added “auto-detect” capability for Servo ICs and MACRO ICs.  I65, I66, I67, and I69, which user formerly set to tell Turbo which ICs were present, are no longer used.  I4900 and I4901 now report which ICs are present and which type.

14.   I19 now specifies which Servo IC or MACRO IC is the source of the servo and phase clock signals for the system.

15.   Added six more hex digits (24 status bits) to the response for the ?? coordinate-system status-query command, for a total of 18.

16.   Improved operation of watchdog timer, so less likely to trip on heavy, but valid, CPU loading.  Now permit user to set required background period for watchdog timer with I20.

17.   MSDATE{node#} now returns 4-digit year value.

18.   Implemented special forward-kinematic and inverse-kinematic motion-program subroutine buffers for each coordinate system, created with new OPEN FORWARD and OPEN INVERSE commands.  New variable Isx50 set to 1 causes these buffers to be used.  New axis-definition command #{motor}->I causes Turbo PMAC to use inverse kinematic routine to convert from axis to motor coordinates.  Number of regular motion program buffers reduced from 256 to 224 to accommodate these new buffers.

19.   Added new run-time error codes 7 (arc radius smaller than tool radius), 8 (forward-kinematic equation error), and 9 (inverse-kinematic equation error).

20.   Added new on-line command EAVERSION to give more complete listing of firmware revision and type.

21.   Added new command IDC to force synchronization of PMAC’s RAM timer with Option 18B non-volatile timer.

22.   Password protection extended to compiled PLCs, user-written servo algorithms, user-written phase algorithms, forward-kinematic programs, and inverse-kinematic programs.

23.   Improved communications response time when multiple ports are used simultaneously.

24.   If all motors in a coordinate system are undefined while coordinate system is running a motion program, program will now stop with a run-time error

25.   New variable I21 now permits “lockout” of changes to classes of I-variables

26.   New variable I14 permits retention of structure of “temporary” buffers through power-down or reset so they do not have to be redefined.


V1.933 Updates (July 1999)


1.       Fixed operation of PR query command.

2.       Fixed operation of DWELL when Motor 1 not in coordinate system.

3.       Fixed blending to new jog command when in acceleration slope.

4.       Fixed operation of move-until-trigger with software position capture.

5.       Fixed operation of dual-ported RAM variable-write buffer.

6.       Made sure rotary buffer pointer always at beginning of buffer after DEFINE or CLEAR.

7.       Made data rounding in PLCC programs like that of PLC programs

8.       Fixed operation of single-line single-step mode (Isx53=1)

9.       Fixed calculations with intermediate values just slightly less than 1.0.

10.   Extended range of constant values accepted to 19 decimal digits.

11.   Extended range of values that can be displayed to 14 decimal digits.

12.   Implemented MACRO master-to-master communications with MACROASCII command.

13.   Changes of state of amplifier-enable flags on MACRO ring immediately put on ring instead of waiting for next background cycle.

14.   Cutter compensation refinements:
– Cutter compensation can now be maintained with multiple DWELLs between two compensated moves.
– If cutter compensation is active and Turbo PMAC cannot find the next move in the compensation plane, Turbo PMAC no longer removes the compensation at the end of the move; instead it ends the move at the proper point to start an outside corner.
– If cutter compensation direction is changed with compensation active, offset to new direction occurs at move boundary, not over the course of the next move (unless there is no intersection of compensated paths, in which case the change still occurs over the next move.
– 180o reversal with arc(s) can now be treated as inside corner, not always outside corner.
– Introduction and removal of compensation on inside corners changed slightly; compensated intersection point now offset from uncompensated intersection point perpendicular to fully compensated move only.