CANTalon nominal output voltage functionality

Does anyone know how exactly the “nominal output voltage” is implemented on the Talon SRX?

There are two possibilities: that any output below the nominal output is “bumped up” to the nominal output (resulting in a small nonlinearity near 0 where the response is flat), or that the output linearly scales from the nominal output to the peak output.

I prefer the latter implementation, but cannot tell for certain which is used from the documentation.

From the Software Reference Manual (PDF warning):

If the Closed-Loop is calculating a motor-output that is too “weak”, the robot application
can use these signals to promote the motor-output to a minimum limit.
With this the
robot application can ensure the motor-output is large enough to drive the mechanism.
Typically this is accomplished with Integral gain, however this method may be a simpler
alternative as there is no risk of Integral wind-up.

This sounds like the former implementation from your post. The assumption behind this feature seems to be that, if the output signal is below the “nominal output” level, producing an output signal above that level would be bad, and more likely to be unstable. It would also have the effect of greater output linearity overall, even if it is less linear when each side of the curve is evaluated independently. In truth, if there is a big difference between the two methods of enforcing a minimum output, you might want to consider why you are using such a high nominal output voltage.*

Having said that, don’t do anything that would create an unreasonable risk of property damage or personal injury should my interpretation prove incorrect. I have not verified that this is actually the case.

*Addendum: It is possible that there are legitimate reasons, but trying to avoid them would make things easier.

Correct, any output that is >0 in magnitude but less than the nominal output is promoted to the nominal value (in the direction of the original output). The usual use-case for a feature like this is overcoming static friction (stiction) in a mechanism, where very small outputs may make your motor buzz but are insufficient to reliably create actual movement. This makes your control loop more like “bang bang” than PIDF at very low speeds, but this is usually okay because you can stop without much overshoot in such situations (and it beats the alternative of having to wind up an integral).

I understand the use-case, but when I implement this myself I usually just scale linearly from the “minimum output that overcomes static friction” rather than having a band where the output is constant at that value. That is, I prefer that the response graph look like this:

http://i.imgur.com/9oHVzrL.png

rather than this:

http://i.imgur.com/J0G5rMZ.png

It probably makes little difference on the whole, but I wonder what the motivation for doing in the latter way, as opposed to the former, is?

Well the second one preserves the slope of 1 outside the small region around the 0 input. This means that an input of 0.5 for example still retains the output of 0.5, whereas the first one outputs 0.6 or so.

Yes, but why is this necessarily desirable? Once you account for frictional losses (these do not vanish one you break static friction), it seems likely to me that the former solution ends up with a response that is closer to linear than the latter.