{"id":24625,"date":"2026-08-12T08:52:08","date_gmt":"2026-08-12T08:52:08","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24625"},"modified":"2026-08-12T09:05:04","modified_gmt":"2026-08-12T09:05:04","slug":"bearing-limiting-speed-verification-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/es\/bearing-limiting-speed-verification-calculator\/","title":{"rendered":"Bearing Limiting Speed Verification Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Bearing Limiting Speed Verification Calculator<\/strong> is a practical engineering tool designed to verify whether a bearing can operate safely at a specified rotational speed. By entering key parameters such as bearing type, limiting speed, operating speed, lubrication conditions, and relevant correction factors, users can quickly evaluate high-speed operating suitability. The <strong>Bearing Limiting Speed Verification Calculator<\/strong> helps engineers and designers identify potential overspeed risks, reduce excessive heat and wear, improve lubrication performance, and support reliable bearing selection. It is suitable for motors, machine tool spindles, gearboxes, pumps, industrial machinery, and other high-speed rotating equipment. This calculator provides a fast and convenient way to support bearing speed verification and improve the safety, efficiency, and reliability of mechanical systems.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Bearing Limiting Speed Verification Calculator | nd<sub>m<\/sub> Factor<\/title>\n  <style>\n    \/* Scoped styles: avoid impacting WordPress page styles outside this calculator. *\/\n    #bearingCalcWidget {\n      --bg-primary: #ffffff;\n      --bg-secondary: #f8fafc;\n      --bg-card: #ffffff;\n      --bg-input: #f1f5f9;\n      --border: #e2e8f0;\n      --border-focus: #3b82f6;\n      --text-primary: #1e293b;\n      --text-secondary: #475569;\n      --text-muted: #94a3b8;\n      --accent: #2563eb;\n      --accent-hover: #1d4ed8;\n      --safe: #16a34a;\n      --safe-bg: rgba(22, 163, 74, 0.08);\n      --warning: #ca8a04;\n      --warning-bg: rgba(202, 138, 4, 0.08);\n      --danger: #dc2626;\n      --danger-bg: rgba(220, 38, 38, 0.08);\n      --radius: 10px;\n      --shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 4px 16px rgba(0, 0, 0, 0.04);\n      --font-sans: \"Segoe UI\", system-ui, -apple-system, sans-serif;\n      --font-mono: \"Cascadia Code\", \"Consolas\", monospace;\n\n      max-width: 1000px;\n      margin: 0 auto;\n      padding: 1.5rem 1rem;\n\n      font-family: var(--font-sans);\n      background: transparent;\n      color: var(--text-primary);\n      line-height: 1.6;\n    }\n\n    #bearingCalcWidget .card {\n      background: var(--bg-card);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      overflow: hidden;\n    }\n\n    #bearingCalcWidget .card-header {\n      padding: 1rem 1.25rem;\n      background: var(--bg-secondary);\n      border-bottom: 1px solid var(--border);\n      display: flex;\n      align-items: center;\n      gap: 0.6rem;\n    }\n\n    #bearingCalcWidget .card-header svg { flex-shrink: 0; color: var(--accent); }\n\n    #bearingCalcWidget .card-header h2 {\n      font-size: 0.95rem;\n      font-weight: 600;\n      letter-spacing: 0.02em;\n    }\n\n    #bearingCalcWidget .card-body { padding: 1.25rem; }\n    #bearingCalcWidget .field-group { margin-bottom: 1.25rem; }\n\n    #bearingCalcWidget .field-label {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      margin-bottom: 0.4rem;\n    }\n\n    #bearingCalcWidget .field-label label {\n      font-size: 0.85rem;\n      font-weight: 500;\n      color: var(--text-secondary);\n    }\n\n    #bearingCalcWidget .field-label .formula {\n      font-family: var(--font-mono);\n      font-size: 0.72rem;\n      color: var(--text-muted);\n    }\n\n    #bearingCalcWidget .input-row {\n      display: flex;\n      gap: 0.75rem;\n      align-items: center;\n    }\n\n    #bearingCalcWidget input[type=\"number\"],\n    #bearingCalcWidget select {\n      flex: 1;\n      background: var(--bg-input);\n      border: 1px solid var(--border);\n      border-radius: 6px;\n      color: var(--text-primary);\n      font-size: 0.95rem;\n      padding: 0.55rem 0.75rem;\n      outline: none;\n      transition: border-color 0.15s;\n      min-width: 0;\n    }\n\n    #bearingCalcWidget input[type=\"number\"]:focus,\n    #bearingCalcWidget select:focus {\n      border-color: var(--border-focus);\n      box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);\n    }\n\n    #bearingCalcWidget select { cursor: pointer; }\n\n    #bearingCalcWidget input[type=\"range\"] {\n      flex: 2;\n      -webkit-appearance: none;\n      appearance: none;\n      height: 6px;\n      background: var(--border);\n      border-radius: 3px;\n      outline: none;\n      cursor: pointer;\n    }\n\n    #bearingCalcWidget input[type=\"range\"]::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      width: 18px;\n      height: 18px;\n      border-radius: 50%;\n      background: var(--accent);\n      border: 2px solid #fff;\n      box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);\n      cursor: pointer;\n    }\n\n    #bearingCalcWidget input[type=\"range\"]::-moz-range-thumb {\n      width: 18px;\n      height: 18px;\n      border-radius: 50%;\n      background: var(--accent);\n      border: 2px solid #fff;\n      box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);\n      cursor: pointer;\n    }\n\n    #bearingCalcWidget .unit {\n      font-size: 0.8rem;\n      color: var(--text-muted);\n      white-space: nowrap;\n      min-width: 2.5rem;\n    }\n\n    #bearingCalcWidget .section-divider {\n      border: none;\n      border-top: 1px solid var(--border);\n      margin: 1.25rem 0;\n    }\n\n    #bearingCalcWidget .section-title {\n      font-size: 0.75rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n      color: var(--text-muted);\n      margin-bottom: 1rem;\n    }\n\n    #bearingCalcWidget .calc-btn-wrap {\n      display: flex;\n      justify-content: center;\n      margin-top: 1.5rem;\n      padding-top: 0.5rem;\n    }\n\n    #bearingCalcWidget .calc-btn {\n      min-width: 220px;\n      padding: 0.85rem 3rem;\n      font-size: 1.1rem;\n      font-weight: 600;\n      color: #fff;\n      background: var(--accent);\n      border: none;\n      border-radius: 8px;\n      cursor: pointer;\n      transition: background 0.15s, transform 0.1s;\n    }\n\n    #bearingCalcWidget .calc-btn:hover { background: var(--accent-hover); }\n    #bearingCalcWidget .calc-btn:active { transform: scale(0.98); }\n\n    #bearingCalcWidget .results-section {\n      display: none;\n      margin-top: 1.5rem;\n      padding-top: 1.5rem;\n      border-top: 1px solid var(--border);\n    }\n\n    #bearingCalcWidget .results-section.visible { display: block; }\n\n    #bearingCalcWidget .results-header {\n      display: flex;\n      align-items: center;\n      gap: 0.6rem;\n      margin-bottom: 1.25rem;\n    }\n\n    #bearingCalcWidget .results-header svg { color: var(--accent); flex-shrink: 0; }\n    #bearingCalcWidget .results-header h2 { font-size: 0.95rem; font-weight: 600; }\n\n    #bearingCalcWidget .status-card {\n      border-radius: var(--radius);\n      padding: 1.5rem;\n      text-align: center;\n      margin-bottom: 1.25rem;\n      transition: background 0.3s, border-color 0.3s;\n    }\n\n    #bearingCalcWidget .status-card.safe {\n      background: var(--safe-bg);\n      border: 1px solid rgba(22, 163, 74, 0.3);\n    }\n\n    #bearingCalcWidget .status-card.warning {\n      background: var(--warning-bg);\n      border: 1px solid rgba(202, 138, 4, 0.3);\n    }\n\n    #bearingCalcWidget .status-card.danger {\n      background: var(--danger-bg);\n      border: 1px solid rgba(220, 38, 38, 0.3);\n    }\n\n    #bearingCalcWidget .status-icon {\n      width: 56px;\n      height: 56px;\n      border-radius: 50%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      margin: 0 auto 0.75rem;\n      font-size: 1.75rem;\n    }\n\n    #bearingCalcWidget .status-card.safe .status-icon { background: rgba(22, 163, 74, 0.15); }\n    #bearingCalcWidget .status-card.warning .status-icon { background: rgba(202, 138, 4, 0.15); }\n    #bearingCalcWidget .status-card.danger .status-icon { background: rgba(220, 38, 38, 0.15); }\n\n    #bearingCalcWidget .status-label {\n      font-size: 1.25rem;\n      font-weight: 700;\n      letter-spacing: 0.04em;\n      text-transform: uppercase;\n    }\n\n    #bearingCalcWidget .status-card.safe .status-label { color: var(--safe); }\n    #bearingCalcWidget .status-card.warning .status-label { color: var(--warning); }\n    #bearingCalcWidget .status-card.danger .status-label { color: var(--danger); }\n\n    #bearingCalcWidget .status-desc {\n      font-size: 0.85rem;\n      color: var(--text-secondary);\n      margin-top: 0.4rem;\n      max-width: 560px;\n      margin-inline: auto;\n    }\n\n    #bearingCalcWidget .gauge-wrap { margin: 1.25rem 0; }\n\n    #bearingCalcWidget .gauge-labels {\n      display: flex;\n      justify-content: space-between;\n      font-size: 0.7rem;\n      color: var(--text-muted);\n      margin-bottom: 0.35rem;\n    }\n\n    #bearingCalcWidget .gauge-track {\n      position: relative;\n      height: 14px;\n      background: var(--bg-input);\n      border-radius: 7px;\n      overflow: hidden;\n      border: 1px solid var(--border);\n    }\n\n    #bearingCalcWidget .gauge-zones {\n      position: absolute;\n      inset: 0;\n      display: flex;\n    }\n\n    #bearingCalcWidget .gauge-zones span:nth-child(1) { flex: 80; background: rgba(22, 163, 74, 0.2); }\n    #bearingCalcWidget .gauge-zones span:nth-child(2) { flex: 20; background: rgba(202, 138, 4, 0.2); }\n    #bearingCalcWidget .gauge-zones span:nth-child(3) { flex: 20; background: rgba(220, 38, 38, 0.2); }\n\n    #bearingCalcWidget .gauge-marker {\n      position: absolute;\n      top: -3px;\n      width: 4px;\n      height: 20px;\n      background: var(--accent);\n      border-radius: 2px;\n      box-shadow: 0 0 4px rgba(37, 99, 235, 0.5);\n      transform: translateX(-50%);\n      transition: left 0.25s ease;\n    }\n\n    #bearingCalcWidget .gauge-value {\n      text-align: center;\n      font-family: var(--font-mono);\n      font-size: 1.1rem;\n      font-weight: 600;\n      margin-top: 0.5rem;\n      color: var(--text-primary);\n    }\n\n    #bearingCalcWidget .metrics-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 0.75rem;\n    }\n\n    @media (max-width: 600px) {\n      #bearingCalcWidget .metrics-grid { grid-template-columns: 1fr; }\n    }\n\n    #bearingCalcWidget .metric {\n      background: var(--bg-secondary);\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      padding: 0.85rem 1rem;\n    }\n\n    #bearingCalcWidget .metric.full-width { grid-column: 1 \/ -1; }\n\n    #bearingCalcWidget .metric-name {\n      font-size: 0.72rem;\n      text-transform: uppercase;\n      letter-spacing: 0.06em;\n      color: var(--text-muted);\n      margin-bottom: 0.25rem;\n    }\n\n    #bearingCalcWidget .metric-value {\n      font-family: var(--font-mono);\n      font-size: 1.15rem;\n      font-weight: 600;\n      color: var(--text-primary);\n    }\n\n    #bearingCalcWidget .metric-value.highlight { color: var(--accent); }\n\n    #bearingCalcWidget .metric-sub {\n      font-size: 0.75rem;\n      color: var(--text-muted);\n      margin-top: 0.15rem;\n    }\n\n    #bearingCalcWidget .metric-sub.pass { color: var(--safe); }\n    #bearingCalcWidget .metric-sub.fail { color: var(--danger); }\n    #bearingCalcWidget .metric-sub.caution { color: var(--warning); }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"bearingCalcWidget\" class=\"wrapper\">\n    <div class=\"card\">\n      <div class=\"card-header\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n          <path d=\"M12 20V10M18 20V4M6 20v-4\"\/>\n        <\/svg>\n        <h2>Input Parameters<\/h2>\n      <\/div>\n      <div class=\"card-body\">\n        <div class=\"section-title\">Bearing Geometry<\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"boreD\">Bore Diameter <em>d<\/em><\/label>\n            <span class=\"formula\">mm<\/span>\n          <\/div>\n          <div class=\"input-row\">\n            <input type=\"range\" id=\"boreDSlider\" min=\"10\" max=\"200\" step=\"1\" value=\"50\">\n            <input type=\"number\" id=\"boreD\" min=\"1\" max=\"1000\" step=\"0.1\" value=\"50\">\n            <span class=\"unit\">mm<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"outerD\">Outer Diameter <em>D<\/em><\/label>\n            <span class=\"formula\">mm<\/span>\n          <\/div>\n          <div class=\"input-row\">\n            <input type=\"range\" id=\"outerDSlider\" min=\"20\" max=\"400\" step=\"1\" value=\"110\">\n            <input type=\"number\" id=\"outerD\" min=\"1\" max=\"2000\" step=\"0.1\" value=\"110\">\n            <span class=\"unit\">mm<\/span>\n          <\/div>\n        <\/div>\n\n        <hr class=\"section-divider\">\n        <div class=\"section-title\">Operating Conditions<\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"speed\">Operating Speed <em>n<\/em><\/label>\n            <span class=\"formula\">RPM<\/span>\n          <\/div>\n          <div class=\"input-row\">\n            <input type=\"range\" id=\"speedSlider\" min=\"100\" max=\"20000\" step=\"50\" value=\"3000\">\n            <input type=\"number\" id=\"speed\" min=\"1\" max=\"100000\" step=\"1\" value=\"3000\">\n            <span class=\"unit\">RPM<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"nLimit\">Catalog Limiting Speed <em>n<\/em><sub>limit<\/sub><\/label>\n            <span class=\"formula\">from manufacturer<\/span>\n          <\/div>\n          <div class=\"input-row\">\n            <input type=\"range\" id=\"nLimitSlider\" min=\"500\" max=\"30000\" step=\"100\" value=\"8000\">\n            <input type=\"number\" id=\"nLimit\" min=\"1\" max=\"100000\" step=\"1\" value=\"8000\">\n            <span class=\"unit\">RPM<\/span>\n          <\/div>\n        <\/div>\n\n        <hr class=\"section-divider\">\n        <div class=\"section-title\">Bearing Type &amp; Lubrication<\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"bearingType\">Bearing Type<\/label>\n          <\/div>\n          <select id=\"bearingType\">\n            <option value=\"500000\">Deep Groove Ball Bearing (nd<sub>m<\/sub> ref \u2248 500,000)<\/option>\n            <option value=\"700000\">Angular Contact Ball Bearing (nd<sub>m<\/sub> ref \u2248 700,000)<\/option>\n            <option value=\"450000\">Cylindrical Roller Bearing (nd<sub>m<\/sub> ref \u2248 450,000)<\/option>\n            <option value=\"300000\">Tapered Roller Bearing (nd<sub>m<\/sub> ref \u2248 300,000)<\/option>\n            <option value=\"250000\">Spherical Roller Bearing (nd<sub>m<\/sub> ref \u2248 250,000)<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"lubrication\">Lubrication Type<\/label>\n          <\/div>\n          <select id=\"lubrication\">\n            <option value=\"1.0\">Grease (baseline reference)<\/option>\n            <option value=\"1.25\">Oil Bath \/ Circulating Oil (+25% limit)<\/option>\n          <\/select>\n        <\/div>\n\n        <hr class=\"section-divider\">\n        <div class=\"section-title\">Adjustment Factors<\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"f1\">Load Factor <em>f<\/em><sub>1<\/sub><\/label>\n          <\/div>\n          <select id=\"f1\">\n            <option value=\"1.0\">Light Load \u2014 f<sub>1<\/sub> = 1.00<\/option>\n            <option value=\"0.85\">Medium Load \u2014 f<sub>1<\/sub> = 0.85<\/option>\n            <option value=\"0.70\">Heavy Load \u2014 f<sub>1<\/sub> = 0.70<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"field-group\">\n          <div class=\"field-label\">\n            <label for=\"f2\">Cooling \/ Operating Factor <em>f<\/em><sub>2<\/sub><\/label>\n          <\/div>\n          <select id=\"f2\">\n            <option value=\"1.0\">Standard Conditions \u2014 f<sub>2<\/sub> = 1.00<\/option>\n            <option value=\"1.15\">Forced Cooling \/ Enhanced Dissipation \u2014 f<sub>2<\/sub> = 1.15<\/option>\n            <option value=\"0.85\">Poor Heat Dissipation \u2014 f<sub>2<\/sub> = 0.85<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"calc-btn-wrap\">\n          <button type=\"button\" class=\"calc-btn\" id=\"calcBtn\">Calculate<\/button>\n        <\/div>\n\n        <!-- Results \u2014 shown only after Calculate is clicked -->\n        <div class=\"results-section\" id=\"resultsSection\">\n          <div class=\"results-header\">\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n              <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\n              <path d=\"M12 6v6l4 2\"\/>\n            <\/svg>\n            <h2>Verification Results<\/h2>\n          <\/div>\n\n          <div id=\"statusCard\" class=\"status-card safe\">\n            <div class=\"status-icon\" id=\"statusIcon\">\u2713<\/div>\n            <div class=\"status-label\" id=\"statusLabel\">SAFE<\/div>\n            <div class=\"status-desc\" id=\"statusDesc\"><\/div>\n          <\/div>\n\n          <div class=\"gauge-wrap\">\n            <div class=\"gauge-labels\">\n              <span>0%<\/span>\n              <span>80%<\/span>\n              <span>100%<\/span>\n              <span>120%<\/span>\n            <\/div>\n            <div class=\"gauge-track\">\n              <div class=\"gauge-zones\">\n                <span><\/span><span><\/span><span><\/span>\n              <\/div>\n              <div class=\"gauge-marker\" id=\"gaugeMarker\" style=\"left: 0%\"><\/div>\n            <\/div>\n            <div class=\"gauge-value\" id=\"gaugeValue\">U<sub>speed<\/sub> = \u2014<\/div>\n          <\/div>\n\n          <div class=\"metrics-grid\">\n            <div class=\"metric\">\n              <div class=\"metric-name\">Mean Diameter d<sub>m<\/sub><\/div>\n              <div class=\"metric-value\" id=\"resDm\">\u2014<\/div>\n              <div class=\"metric-sub\">(d + D) \/ 2<\/div>\n            <\/div>\n\n            <div class=\"metric\">\n              <div class=\"metric-name\">Speed Factor nd<sub>m<\/sub><\/div>\n              <div class=\"metric-value highlight\" id=\"resNdm\">\u2014<\/div>\n              <div class=\"metric-sub\">n \u00d7 d<sub>m<\/sub> (mm\u00b7RPM)<\/div>\n            <\/div>\n\n            <div class=\"metric\">\n              <div class=\"metric-name\">Permissible Speed n<sub>max<\/sub><\/div>\n              <div class=\"metric-value\" id=\"resNmax\">\u2014<\/div>\n              <div class=\"metric-sub\">n<sub>limit<\/sub> \u00d7 f<sub>1<\/sub> \u00d7 f<sub>2<\/sub><\/div>\n            <\/div>\n\n            <div class=\"metric\">\n              <div class=\"metric-name\">Speed Utilization U<sub>speed<\/sub><\/div>\n              <div class=\"metric-value\" id=\"resUtil\">\u2014<\/div>\n              <div class=\"metric-sub\">(n \/ n<sub>max<\/sub>) \u00d7 100%<\/div>\n            <\/div>\n\n            <div class=\"metric full-width\">\n              <div class=\"metric-name\">nd<sub>m<\/sub> Reference Check (Grease Baseline)<\/div>\n              <div class=\"metric-value\" id=\"resNdmCheck\">\u2014<\/div>\n              <div class=\"metric-sub\" id=\"resNdmStatus\">\u2014<\/div>\n            <\/div>\n\n            <div class=\"metric\">\n              <div class=\"metric-name\">Effective nd<sub>m<\/sub> Limit<\/div>\n              <div class=\"metric-value\" id=\"resNdmLimit\">\u2014<\/div>\n              <div class=\"metric-sub\">Type ref \u00d7 f<sub>lub<\/sub><\/div>\n            <\/div>\n\n            <div class=\"metric\">\n              <div class=\"metric-name\">nd<sub>m<\/sub> Utilization<\/div>\n              <div class=\"metric-value\" id=\"resNdmUtil\">\u2014<\/div>\n              <div class=\"metric-sub\" id=\"resNdmUtilSub\">\u2014<\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n    const fields = {\n      boreD:       document.getElementById('boreD'),\n      outerD:      document.getElementById('outerD'),\n      speed:       document.getElementById('speed'),\n      nLimit:      document.getElementById('nLimit'),\n      bearingType: document.getElementById('bearingType'),\n      lubrication: document.getElementById('lubrication'),\n      f1:          document.getElementById('f1'),\n      f2:          document.getElementById('f2'),\n    };\n\n    const sliders = {\n      boreD:  document.getElementById('boreDSlider'),\n      outerD: document.getElementById('outerDSlider'),\n      speed:  document.getElementById('speedSlider'),\n      nLimit: document.getElementById('nLimitSlider'),\n    };\n\n    const outputs = {\n      resultsSection: document.getElementById('resultsSection'),\n      statusCard:     document.getElementById('statusCard'),\n      statusIcon:     document.getElementById('statusIcon'),\n      statusLabel:    document.getElementById('statusLabel'),\n      statusDesc:     document.getElementById('statusDesc'),\n      gaugeMarker:    document.getElementById('gaugeMarker'),\n      gaugeValue:     document.getElementById('gaugeValue'),\n      resDm:          document.getElementById('resDm'),\n      resNdm:         document.getElementById('resNdm'),\n      resNmax:        document.getElementById('resNmax'),\n      resUtil:        document.getElementById('resUtil'),\n      resNdmCheck:    document.getElementById('resNdmCheck'),\n      resNdmStatus:   document.getElementById('resNdmStatus'),\n      resNdmLimit:    document.getElementById('resNdmLimit'),\n      resNdmUtil:     document.getElementById('resNdmUtil'),\n      resNdmUtilSub:  document.getElementById('resNdmUtilSub'),\n    };\n\n    function fmt(num, decimals = 0) {\n      return num.toLocaleString('en-US', {\n        minimumFractionDigits: decimals,\n        maximumFractionDigits: decimals,\n      });\n    }\n\n    function fmtPct(num) {\n      return num.toLocaleString('en-US', {\n        minimumFractionDigits: 1,\n        maximumFractionDigits: 1,\n      }) + '%';\n    }\n\n    \/* Sync slider \u2194 number input (no auto-calculate) *\/\n    function bindSliderPair(slider, input) {\n      slider.addEventListener('input', () => {\n        input.value = slider.value;\n      });\n      input.addEventListener('input', () => {\n        const val = parseFloat(input.value);\n        if (!isNaN(val)) {\n          const clamped = Math.min(Math.max(val, parseFloat(slider.min)), parseFloat(slider.max));\n          slider.value = clamped;\n        }\n      });\n    }\n\n    bindSliderPair(sliders.boreD, fields.boreD);\n    bindSliderPair(sliders.outerD, fields.outerD);\n    bindSliderPair(sliders.speed, fields.speed);\n    bindSliderPair(sliders.nLimit, fields.nLimit);\n\n    function calculate() {\n      const d  = parseFloat(fields.boreD.value)  || 0;\n      const D  = parseFloat(fields.outerD.value) || 0;\n      const n  = parseFloat(fields.speed.value)  || 0;\n      const nLimit = parseFloat(fields.nLimit.value) || 0;\n      const ndmRef = parseFloat(fields.bearingType.value) || 500000;\n      const fLub   = parseFloat(fields.lubrication.value) || 1.0;\n      const f1     = parseFloat(fields.f1.value) || 1.0;\n      const f2     = parseFloat(fields.f2.value) || 1.0;\n\n      outputs.resultsSection.classList.add('visible');\n\n      if (D <= d || d <= 0 || n <= 0 || nLimit <= 0) {\n        setInvalidState();\n        return;\n      }\n\n      const dm   = (d + D) \/ 2;\n      const ndm  = n * dm;\n      const nMax = nLimit * f1 * f2;\n      const uSpeed = (n \/ nMax) * 100;\n      const ndmLimitEffective = ndmRef * fLub;\n      const ndmUtil = (ndm \/ ndmLimitEffective) * 100;\n\n      outputs.resDm.textContent   = fmt(dm, 2) + ' mm';\n      outputs.resNdm.textContent  = fmt(ndm, 0) + ' mm\u00b7RPM';\n      outputs.resNmax.textContent = fmt(nMax, 0) + ' RPM';\n      outputs.resUtil.textContent = fmtPct(uSpeed);\n\n      outputs.resNdmLimit.textContent = fmt(ndmLimitEffective, 0);\n      outputs.resNdmUtil.textContent  = fmtPct(ndmUtil);\n      outputs.resNdmCheck.textContent = fmt(ndm, 0) + ' vs ' + fmt(ndmLimitEffective, 0);\n\n      if (ndmUtil <= 80) {\n        outputs.resNdmStatus.textContent = 'Within reference limit \u2014 kinematically suitable.';\n        outputs.resNdmStatus.className = 'metric-sub pass';\n      } else if (ndmUtil <= 100) {\n        outputs.resNdmStatus.textContent = 'Approaching reference limit \u2014 verify lubrication and cooling.';\n        outputs.resNdmStatus.className = 'metric-sub caution';\n      } else {\n        outputs.resNdmStatus.textContent = 'Exceeds reference nd_m limit \u2014 reconsider bearing type or speed.';\n        outputs.resNdmStatus.className = 'metric-sub fail';\n      }\n\n      if (ndmUtil <= 80) {\n        outputs.resNdmUtilSub.textContent = 'Kinematic margin OK';\n        outputs.resNdmUtilSub.className = 'metric-sub pass';\n      } else if (ndmUtil <= 100) {\n        outputs.resNdmUtilSub.textContent = 'Near kinematic limit';\n        outputs.resNdmUtilSub.className = 'metric-sub caution';\n      } else {\n        outputs.resNdmUtilSub.textContent = 'Above kinematic limit';\n        outputs.resNdmUtilSub.className = 'metric-sub fail';\n      }\n\n      let status, icon, label, desc;\n\n      if (uSpeed <= 80) {\n        status = 'safe';\n        icon   = '\u2713';\n        label  = 'SAFE';\n        desc   = 'Operating speed is within normal margin (\u2264 80% of permissible maximum). Standard lubrication and maintenance apply.';\n      } else if (uSpeed <= 100) {\n        status = 'warning';\n        icon   = '\u26a0';\n        label  = 'WARNING';\n        desc   = 'Speed is between 80% and 100% of n_max. Requires enhanced lubrication, precision alignment, and temperature monitoring.';\n      } else {\n        status = 'danger';\n        icon   = '\u2715';\n        label  = 'DANGER';\n        desc   = 'Operating speed exceeds permissible limits! High risk of overheating, lubricant breakdown, and premature bearing failure.';\n      }\n\n      outputs.statusCard.className = 'status-card ' + status;\n      outputs.statusIcon.textContent = icon;\n      outputs.statusLabel.textContent = label;\n      outputs.statusDesc.textContent = desc;\n\n      const gaugePct = Math.min(Math.max(uSpeed, 0), 120);\n      outputs.gaugeMarker.style.left = (gaugePct \/ 120) * 100 + '%';\n      outputs.gaugeValue.innerHTML = 'U<sub>speed<\/sub> = ' + fmtPct(uSpeed);\n    }\n\n    function setInvalidState() {\n      outputs.resDm.textContent = '\u2014';\n      outputs.resNdm.textContent = '\u2014';\n      outputs.resNmax.textContent = '\u2014';\n      outputs.resUtil.textContent = '\u2014';\n      outputs.resNdmCheck.textContent = 'Invalid input';\n      outputs.resNdmStatus.textContent = 'Outer diameter must exceed bore diameter.';\n      outputs.resNdmStatus.className = 'metric-sub fail';\n      outputs.resNdmLimit.textContent = '\u2014';\n      outputs.resNdmUtil.textContent = '\u2014';\n      outputs.resNdmUtilSub.textContent = '\u2014';\n\n      outputs.statusCard.className = 'status-card danger';\n      outputs.statusIcon.textContent = '\u2715';\n      outputs.statusLabel.textContent = 'INVALID';\n      outputs.statusDesc.textContent = 'Please check input values. Outer diameter D must be greater than bore diameter d.';\n      outputs.gaugeMarker.style.left = '0%';\n      outputs.gaugeValue.innerHTML = 'U<sub>speed<\/sub> = \u2014';\n    }\n\n    document.getElementById('calcBtn').addEventListener('click', calculate);\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Bearing Limiting Speed Verification Calculator is a practical engineering tool designed to verify whether a bearing can operate safely at a specified rotational speed&#8230;.<\/p>","protected":false},"author":2,"featured_media":24626,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8567,8573,8575,8574],"class_list":["post-24625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bearing-calculator","tag-bearing-speed","tag-limiting-speed","tag-speed-verification","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Bearing-Limiting-Speed-Verification-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/comments?post=24625"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24625\/revisions"}],"predecessor-version":[{"id":24628,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24625\/revisions\/24628"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media\/24626"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media?parent=24625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/categories?post=24625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/tags?post=24625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}