Speed Tables

In a DCC decoder, a speed table controls how the decoder maps throttle settings received via DCC (i.e., “speed steps”) to motor speed. This can be adjusted to a user’s preference, but adjustments will vary depending on the manufacturer of the decoder (and on the decoder model, in some cases).

At present, this page is somewhat Digitrax-centric, but will eventually be elaborated to talk about other models of decoders (at least, those I use).

Relationship of Throttle Setting to Motor Speed

The effect of the throttle control is to alter the speed of the motor in a model train. But unlike a DC power pack, with DCC exactly how this works can be adjusted by the user. One particular adjustment is to limit the top speed of the model, so that maximum throttle roughly equates to the maximum scale speed of the prototype, allowing for more realistic operation and better use of the controls (this also prevents visiting kids from sending your freight around a curve at 200 mph).

Throttle Control

In a DCC system, the position of the throttle knob, or the setting on a digital throttle, causes a value called the “speed step” to be sent to the decoder. A speed step is just a number, and what it means depends on how the decoder interprets it. The range of numbers sent depends on the design of the command station. Some older ones used numbers up to 14, newer ones use at least 28, and many use numbers up to 127 (called “128 step” operation).

The decoder will interpret the speed step and use it to control the motor speed by altering the average voltage applied to the motor via PWM. In a basic decoder, this allows for 28 different speeds, plus functions for “stop” (set throttle to zero normally) and “emergency stop” (set throttle to zero immediately ignoring any momentum features). There is also support for the older method with 14 steps, rarely used today. Per NMRA Recommended Practice 9.2.1 an Advanced Operations Instruction can be used in “128 step mode” to send speed steps up to 127 (step 1 is emergency stop, and step 0 is stop, so there are 126 speed steps in addition to the two “stop” commands).

Note that the number or other indicator that the throttle displays to the user does not necessarily directly reflect the speed step. For example, on a Digitrax throttle with a 0-99 scale, a setting of 99 will result in a throttle speed step of 127 being sent to the decoder. Also, just because the command station sends 128 steps, this doesn’t mean the decoder has 128 different voltages; particularly in some older or less-expensive decoders, a smaller number of different voltages could be used, and throttle changes ignored until they get to the next step with a new voltage. Digitrax, however, notes that their FX3 decoders use 255 motor speeds internally (having more than 127 only matters when BEMF is used) and microcontrollers used in decoders can support even more, providing further granularity for BEMF if desired. However, the control and programming in all cases use eight-bit (0-255) values, so this internal detail isn’t relevant to programming.

Motor Control

In the decoder, the speed step received must be converted to a voltage to be applied to the motor. To do this, the mode of operation (14, 28 or 128 step) must be known to the decoder. This is usually automatic, but if the command station uses the older 14-step method, the decoder will need to be specifically configured (via CV29) to support this.

How the speed step is converted to voltage can be done in several ways. By default, the highest speed step would allow full track voltage (minus a little loss in the decoder) through to the motor, for maximum speed. Lesser steps could be used linearly, meaning half throttle and a step of 63/128 or 14/28 or 7/14 would result in half-voltage (and thus half speed in the motor). It could also be a non-linear scale, such that changes in the throttle (speed step) at low speeds makes a smaller change in motor speed than changes at higher speeds, for a finer control over low-speed activities such as switching an industry siding.

For the remainder of this discussion I’m going to assume 128-step operation, but in general 28-step is the same except for the number of steps, so you can read “127” as meaning “28” if you use 28-step mode.

Effect of Track Voltage

Notice that a maximum throttle setting allows the full track voltage through to the motor. The obvious result of this is that the actual speed of the train will vary depending on the DCC command station (or booster) and its output voltage. If you set your trains to run at a certain speed on a system with a 12 Volt output, then take them to another layout with a 16V command station, they’re going to run about 1/3 faster. Conversely, trains set up on the 16V system and taken to a 12V system will run at no more than about 3/4 speed.

There really isn’t any general way to adjust for this. If you plan to run your trains in different environments, you may want to make your settings so that they’ll work correctly in the lowest-voltage system, and simply avoid full throttle positions when operating on a higher-voltage system. If you only expect to run them on your own layout, you can more precisely adjust them for its voltage.

Speed Controls

Most models will run far too fast at full voltage, so there are a couple of ways to reduce the top speed, and gain full use of the throttle for more realistic speeds. Two methods, one “required” and one optional, are outlined by the NMRA in RP 9.2.2, Configuration Variables.

Basic Speed Control

The basic method is provided by three CVs: Vstart (CV02), Vmid (CV05), and Vhigh (CV06). These, along with acceleration rate (CV03) and deceleration (aka braking) rate (CV04) are “required” features of a decoder. By setting Vhigh to a number between 1 and 255 you control the percent (N/255) of the available voltage after the DCC track power is converted to DC (i.e., a percentage of the “available rectified supply voltage” per the NMRA) provided to the motor at the maximum speed step. And by setting Vmid to something other than halfway between 1 and the value of Vhigh, you can expand (or contract) the number of steps used for lower speeds. For many people, this is all that is required for realistic operation.

So, if you know that on your layout, you only need about 3/4 the track voltage for a reasonable top speed, you could set Vhigh to 0.75 x 255 = 191, and set Vmid to half that (96) for a linear throttle, or to a lower number (like 50) if you want the speed steps closer together at low speed.

Note: these are “required” in RP 9.2.2, but since that’s a recommended practice that means they aren’t really required, and a manufacturer could omit them.

Speed Table

An alternative to the basic control method is to define the desired percentage of track voltage at more than three steps, using a “speed table”. This is very similar to the basic method, it just uses more CVs. The NMRA defined an optional set of 31 CVs to implement a 28-step speed table, including a “kick start” CV for low-speed starting and two trim CVs to scale the table.

The PWM generated by the decoder has a fixed number of possible values between 0 and maximum. This can, per the NMRA RP, be as low as 64 or as high as 255. Regardless of the number of voltage levels used by the decoder the table stores the numerator of a percentage figure in the same way as a basic table (i.e., the “N” of N/255, so a CV value of 64 equals 25% of maximum available power).

Since there are only 28 table entries (CV67 to CV94), a decoder supporting 128 speed steps needs to interpolate values for steps in between speed table entries. There is no requirement, and little need, for every step to have a table entry.

For example, Digitrax’s FX3 decoders (except for DZ121/DN121 models) implement the NMRA speed table. In 28-step mode, this is directly used for steps 1-28 (stop is obviously always zero and doesn’t need a CV). When operated in a 128-step system, the throttle must be advanced 4 or 5 speed steps before a new table entry is reached, but the decoder can simply divide the range of voltages between the two values into an implied set of 4 or 5 voltages, and use those.

The Kick Start CV (CV65) specifies the “amount of kick” applied to a stopped motor when the throttle is advanced to step one. This appears to be a one-time event, and the units of the kick aren’t defined by the NMRA (it’s possible this is a similar N/255 number, although most decoders seem to use 1 or 2 as the default, which seems rather low if that’s the case).

The last two CVs are Forward (CV66) and Reverse Trim (CV95). These are used as multipliers to modify the values from the table for forward and reverse directions (e.g., if you want a locomotive to run slower in reverse the Reverse Trim can be used to scale the table entries down). These are both N/128 values, so 128 (0x80) is 100%. If the CV is set to zero, trim is not used, and thus is effectively 100% also.

Manufacturer Support and Configuration

The following are manufacturer-specific notes regarding Speed Table use. There’s an interesting write-up on setting up speed tables on this page.


The FX and FX3 decoders implement speed tables for all modes of operation (except for the DN121/DZ121 decoders, which lack the processing required). Their “non-FX” decoders only support this feature in 14 and 28-step modes, not in 128-step.

I’ve seen several posts that suggest that on Digitrax CV02 (start voltage, part of the basic speed table CVs) is not enabled when speed tables are in use, and others that it is, but should be set to 0 to avoid problems. According to Digitrax (their “Decoders” manual, pg. 54), FX decoders (and presumably their FX3 also) enable CV02 even when a speed table is used (CV05 and CV06 are always ignored if the speed table is enabled) but it’s not clear how this differs from the use of the Kick Start CV. My assumption is that kick-start controls a momentary increase to start a stopped motor, but CV02 applies for as long as the throttle is in step 1; in short, it’s either additive to or a replacement for the first table entry, CV66. However, Digitrax rather oddly labels CV66 as the “Step 4 value” so I could be wrong about how the table is used (I suspect this is a typo).

I’ve also seen reports that Kick Start and the two Trim CVs are not implemented on all Digitrax decoders, but no detail on which lack them.


Lenz supports the Speed Table feature (at least on some decoders). Here is a write-up on configuring one.

There’s a comment on the linked page that Lenz does not support Vmid (CV06) in the basic table, and only supports Vhigh (CV05) on “load-compensated” decoders. However, the manual for the Silver Mini Plus clearly shows that all three basic table CVs are supported by it, as well as CVs 67 to 94 of the Speed Table (note that Kick Start and the two Trim CVs are not supported).


TCS reportedly implement the Speed Table CVs, except for the two Trim CVs (CV64 and CV95).