diff --git a/locales/en/messages.json b/locales/en/messages.json
index 5367334b..1e23186b 100644
--- a/locales/en/messages.json
+++ b/locales/en/messages.json
@@ -1750,6 +1750,9 @@
"message": "Is an additional pushing term (spring) based on stick input. FF helps the P-term push the craft for commanded stick moves.
The P-term pushes based on the difference between the commanded Setpoint (deg/sec) and the gyro reading of current rotational rate (deg/sec). FF pushes based on the commanded change of the sticks alone.
Higher values (gains) will result in a more sharp machine response to stick input.
Too high of values may result in some overshoot, increased motor heat, and motor saturation (where motors can not keep up with the desired rate of change).
Lower or zero (0) values will result in a slower and smoother response to stick inputs.",
"description": "Feedforward Term helpicon message on PID table titlebar"
},
+ "pidTuningMaxRateWarning": {
+ "message": " very high rates can result in desyncs from rapid decelerations."
+ },
"pidTuningRcRate": {
"message": "RC Rate"
},
diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js
index 1b7dc50a..1134f02c 100644
--- a/src/js/tabs/pid_tuning.js
+++ b/src/js/tabs/pid_tuning.js
@@ -2104,6 +2104,12 @@ TABS.pid_tuning.updateRatesLabels = function() {
{value: parseInt(maxAngularVelPitch), balloon: function() {drawBalloonLabel(stickContext, maxAngularVelPitch, curveWidth, rateScale * (maxAngularVel - parseInt(maxAngularVelPitch)), 'right', BALLOON_COLORS.pitch, balloonsDirty);}},
{value: parseInt(maxAngularVelYaw), balloon: function() {drawBalloonLabel(stickContext, maxAngularVelYaw, curveWidth, rateScale * (maxAngularVel - parseInt(maxAngularVelYaw)), 'right', BALLOON_COLORS.yaw, balloonsDirty);}}
];
+ // show warning message if any axis angular velocity exceeds 1800d/s
+ const MAX_RATE_WARNING = 1800;
+ const warningRates = (parseInt(maxAngularVelRoll) > MAX_RATE_WARNING || parseInt(maxAngularVelPitch) > MAX_RATE_WARNING
+ || parseInt(maxAngularVelYaw) > MAX_RATE_WARNING);
+ $('.maxRateWarning').toggle(warningRates);
+
// and sort them in descending order so the largest value is at the top always
balloons.sort(function(a,b) {return (b.value - a.value)});
diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html
index 170ce5e8..5d48a0dd 100644
--- a/src/tabs/pid_tuning.html
+++ b/src/tabs/pid_tuning.html
@@ -609,6 +609,9 @@