{"id":100069,"date":"2026-02-15T20:14:50","date_gmt":"2026-02-15T20:14:50","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100069"},"modified":"2026-02-15T20:14:50","modified_gmt":"2026-02-15T20:14:50","slug":"critical-speed","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/bn\/calculators\/critical-speed\/","title":{"rendered":"Spring Critical Speed (Surge Frequency) Calculator"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Spring Critical Speed Calculator\",\"alternateName\":[\"Surge Frequency Calculator\",\"Spring Resonance Calculator\",\"Coil Spring Frequency Calculator\"],\"description\":\"Free online engineering calculator for spring surge frequency of helical compression springs. Supports multiple materials including custom shear modulus and density.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/spring-critical-speed\/\",\"applicationCategory\":\"Engineering Calculator\",\"operatingSystem\":\"Any (Web Browser)\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"EUR\"},\"creator\":{\"@type\":\"Organization\",\"name\":\"Vibromera\",\"url\":\"https:\/\/vibromera.eu\/\"},\"datePublished\":\"2024-01-01\",\"dateModified\":\"2025-02-14\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true,\"featureList\":[\"Surge frequency in Hz and RPM\",\"Spring stiffness calculation\",\"Spring index check\",\"Multiple material presets\",\"Custom material support\",\"Metric and Imperial units\",\"Auto-calculation on input change\",\"URL parameter sharing\",\"Calculation history\"],\"keywords\":\"spring surge frequency, critical speed, helical spring, spring surging, coil spring vibration\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"What is spring surging?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Spring surging is a resonance phenomenon that occurs in helical compression springs when the excitation frequency matches the spring's natural frequency. At this point, a standing wave forms along the coils, causing some coils to compress while others expand. This creates localized stress concentrations, uneven load distribution, and can lead to premature fatigue failure, noise, and loss of spring function. Surging is especially critical in valve springs of internal combustion engines and other high-speed reciprocating applications.\"}},\n{\"@type\":\"Question\",\"name\":\"Why is surge frequency important?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Knowing the surge frequency is essential for designing reliable spring systems. If a spring operates at or near its surge frequency, the resulting resonance amplifies internal stresses far beyond the static design load, leading to fatigue cracking, coil clash, and unpredictable spring behavior. Engineers must ensure the operating frequency stays well below the surge frequency \u2014 typically the rule of thumb is that the lowest operating frequency should be no more than 1\/13th to 1\/15th of the spring's natural frequency.\"}},\n{\"@type\":\"Question\",\"name\":\"How to avoid spring surging?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Several design strategies can prevent spring surging: (1) Increase the wire diameter relative to coil diameter to raise the natural frequency. (2) Reduce the number of active coils, which directly increases surge frequency. (3) Use variable-pitch (progressive) springs that have no single resonant frequency. (4) Add internal or external friction dampers. (5) Choose materials with higher shear modulus. (6) Use nested (dual) springs with different natural frequencies. (7) Ensure the operating frequency is well below 1\/13th of the surge frequency.\"}},\n{\"@type\":\"Question\",\"name\":\"What is the rule of thumb for spring surge frequency?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The most widely used rule of thumb states that the spring's surge frequency should be at least 13 times higher than the operating frequency for valve springs, and at least 15\u201320 times for general industrial applications. This safety margin ensures that no harmonic of the operating frequency can excite the spring's natural frequency. Some conservative designs require the ratio to be 20:1 or higher, especially in safety-critical applications like aerospace or medical devices.\"}},\n{\"@type\":\"Question\",\"name\":\"How does the number of coils affect surge frequency?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The number of active coils has an inversely proportional effect on surge frequency \u2014 doubling the number of active coils cuts the surge frequency in half. This is because more coils increase the spring's effective mass and length while reducing its stiffness. For high-speed applications requiring high surge frequencies, designers minimize the number of active coils. However, fewer coils also means higher stress per coil, so a balance must be struck between surge frequency and allowable stress levels.\"}}\n]}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[\n{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/vibromera.eu\/\"},\n{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculators\",\"item\":\"https:\/\/vibromera.eu\/calculators\/\"},\n{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Spring Critical Speed Calculator\",\"item\":\"https:\/\/vibromera.eu\/calculators\/spring-critical-speed\/\"}\n]}\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&#038;family=JetBrains+Mono:wght@400;500;600&#038;family=Fraunces:opsz,wght@9..144,700;9..144,800&#038;display=swap\" rel=\"stylesheet\">\n\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/katex@0.16.11\/dist\/katex.min.css\">\n\n<style>\n:root {\n    --vc-bg: #f4f1ec;\n    --vc-surface: #ffffff;\n    --vc-surface-alt: #f8f6f2;\n    --vc-ink: #1a1a1a;\n    --vc-ink-secondary: #5a5650;\n    --vc-ink-muted: #8a857e;\n    --vc-accent: #c85a2a;\n    --vc-accent-hover: #b04d22;\n    --vc-accent-light: #fdf0ea;\n    --vc-blue: #2a5c8c;\n    --vc-blue-light: #eaf1f8;\n    --vc-green: #2a7a4b;\n    --vc-green-light: #eaf8ef;\n    --vc-yellow: #a67c00;\n    --vc-yellow-light: #fef9e8;\n    --vc-red: #b91c1c;\n    --vc-red-light: #fef2f2;\n    --vc-border: #d9d4cc;\n    --vc-border-light: #e8e4dd;\n    --vc-shadow: 0 1px 3px rgba(26,26,26,0.06), 0 4px 12px rgba(26,26,26,0.04);\n    --vc-shadow-lg: 0 4px 12px rgba(26,26,26,0.08), 0 16px 40px rgba(26,26,26,0.06);\n    --vc-radius: 8px;\n    --vc-radius-lg: 12px;\n    --vc-font: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    --vc-mono: 'JetBrains Mono', 'Consolas', 'Monaco', monospace;\n    --vc-display: 'Fraunces', Georgia, serif;\n}\n\n.vc-calculator {\n    font-family: var(--vc-font);\n    font-size: 15px;\n    line-height: 1.65;\n    color: var(--vc-ink);\n    max-width: 960px;\n    margin: 0 auto;\n    padding: 20px 16px 40px;\n    -webkit-font-smoothing: antialiased;\n}\n.vc-calculator *, .vc-calculator *::before, .vc-calculator *::after { box-sizing: border-box; }\n\n.vc-header { text-align: center; padding: 48px 24px 40px; position: relative; }\n.vc-header::after { content:''; position:absolute; bottom:0; left:50%; transform:translateX(-50%); width:80px; height:3px; background:var(--vc-accent); border-radius:2px; }\n.vc-header-eyebrow { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:var(--vc-accent); margin:0 0 12px; }\n.vc-header-title { font-family:var(--vc-display); font-size:clamp(24px,4vw,36px); font-weight:800; line-height:1.15; color:var(--vc-ink); margin:0 0 16px; letter-spacing:-0.02em; }\n.vc-header-subtitle { font-size:15px; color:var(--vc-ink-secondary); margin:0 auto 20px; max-width:600px; }\n.vc-badges { display:inline-flex; gap:8px; flex-wrap:wrap; justify-content:center; }\n.vc-badge { font-family:var(--vc-mono); font-size:11px; font-weight:500; padding:4px 10px; border-radius:4px; background:var(--vc-surface); border:1px solid var(--vc-border); color:var(--vc-ink-secondary); }\n\n.vc-card { background:var(--vc-surface); border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); box-shadow:var(--vc-shadow); overflow:hidden; margin-top:32px; }\n\n.vc-unit-bar { display:flex; border-bottom:1px solid var(--vc-border-light); background:var(--vc-surface-alt); }\n.vc-unit-btn { flex:1; padding:12px; border:none; background:transparent; font-family:var(--vc-font); font-size:13px; font-weight:600; color:var(--vc-ink-muted); cursor:pointer; transition:all 0.2s; position:relative; }\n.vc-unit-btn:hover { color:var(--vc-ink-secondary); background:rgba(200,90,42,0.04); }\n.vc-unit-btn.vc-active { color:var(--vc-accent); background:var(--vc-surface); }\n.vc-unit-btn.vc-active::after { content:''; position:absolute; bottom:-1px; left:16px; right:16px; height:2px; background:var(--vc-accent); border-radius:1px 1px 0 0; }\n\n.vc-form { padding:24px; }\n.vc-form-grid { display:grid; grid-template-columns:1fr 1fr; gap:18px; }\n@media(max-width:600px) { .vc-form-grid { grid-template-columns:1fr; } }\n.vc-field { display:flex; flex-direction:column; }\n.vc-field-full { grid-column: 1 \/ -1; }\n.vc-label { font-size:12px; font-weight:600; letter-spacing:0.04em; text-transform:uppercase; color:var(--vc-ink-secondary); margin-bottom:6px; }\n.vc-label-hint { font-weight:400; text-transform:none; letter-spacing:0; color:var(--vc-ink-muted); font-size:11px; }\n.vc-select, .vc-input { width:100%; padding:10px 12px; border:1.5px solid var(--vc-border); border-radius:6px; font-family:var(--vc-font); font-size:14px; color:var(--vc-ink); background:var(--vc-surface); transition:border-color 0.15s, box-shadow 0.15s; }\n.vc-select { padding-right:36px; appearance:none; -webkit-appearance:none; cursor:pointer; background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='none' stroke='%235a5650' stroke-width='2'%3E%3Cpath d='M4 6l4 4 4-4'\/%3E%3C\/svg%3E\"); background-repeat:no-repeat; background-position:right 10px center; }\n.vc-select:focus, .vc-input:focus { outline:none; border-color:var(--vc-accent); box-shadow:0 0 0 3px rgba(200,90,42,0.12); }\n.vc-select:hover, .vc-input:hover { border-color:var(--vc-ink-muted); }\n\n.vc-custom-fields { display:none; grid-template-columns:1fr 1fr; gap:18px; margin-top:18px; }\n.vc-custom-fields.vc-visible { display:grid; }\n@media(max-width:600px) { .vc-custom-fields { grid-template-columns:1fr; } }\n\n.vc-presets { display:flex; flex-wrap:wrap; gap:8px; margin-top:18px; padding-top:18px; border-top:1px solid var(--vc-border-light); }\n.vc-presets-label { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); width:100%; margin-bottom:2px; }\n.vc-preset-btn { padding:5px 12px; font-family:var(--vc-font); font-size:12px; font-weight:500; border:1px solid var(--vc-border); border-radius:6px; background:var(--vc-surface-alt); color:var(--vc-ink-secondary); cursor:pointer; transition:all 0.15s; }\n.vc-preset-btn:hover { border-color:var(--vc-accent); color:var(--vc-accent); background:var(--vc-accent-light); }\n\n.vc-results { border-top:1px solid var(--vc-border-light); background:var(--vc-surface-alt); padding:0; max-height:0; overflow:hidden; transition:max-height 0.5s cubic-bezier(0.4,0,0.2,1), padding 0.3s; }\n.vc-results.vc-visible { max-height:2000px; padding:24px; }\n.vc-results-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:18px; }\n.vc-results-title { font-family:var(--vc-display); font-size:20px; font-weight:700; color:var(--vc-ink); margin:0; }\n.vc-copy-btn { display:inline-flex; align-items:center; gap:5px; padding:6px 12px; border:1px solid var(--vc-border); border-radius:6px; background:var(--vc-surface); font-family:var(--vc-font); font-size:12px; font-weight:500; color:var(--vc-ink-secondary); cursor:pointer; transition:all 0.15s; }\n.vc-copy-btn:hover { border-color:var(--vc-accent); color:var(--vc-accent); }\n.vc-copy-btn.vc-copied { background:var(--vc-green-light); border-color:var(--vc-green); color:var(--vc-green); }\n\n.vc-result-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:20px; }\n@media(max-width:500px) { .vc-result-grid { grid-template-columns:1fr; } }\n.vc-rcard { background:var(--vc-surface); border:1px solid var(--vc-border-light); border-radius:var(--vc-radius); padding:16px; transition:transform 0.2s; }\n.vc-rcard:hover { transform:translateY(-1px); }\n.vc-rcard-primary { border-color:var(--vc-accent); border-width:2px; background:linear-gradient(135deg, #fdf6f2 0%, var(--vc-surface) 100%); grid-column:1 \/ -1; }\n.vc-rcard-label { font-family:var(--vc-mono); font-size:10px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); margin-bottom:4px; }\n.vc-rcard-value { font-family:var(--vc-mono); font-size:22px; font-weight:600; color:var(--vc-ink); line-height:1.2; }\n.vc-rcard-primary .vc-rcard-value { font-size:30px; color:var(--vc-accent); }\n.vc-rcard-unit { font-size:14px; font-weight:400; color:var(--vc-ink-secondary); }\n.vc-rcard-warning { margin-top:8px; padding:8px 12px; background:var(--vc-yellow-light); border:1px solid var(--vc-yellow); border-radius:4px; font-size:12px; color:var(--vc-yellow); font-weight:600; }\n\n.vc-section { margin-top:24px; border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); background:var(--vc-surface); box-shadow:var(--vc-shadow); overflow:hidden; }\n.vc-section-toggle { width:100%; display:flex; align-items:center; justify-content:space-between; padding:18px 24px; border:none; background:transparent; cursor:pointer; font-family:var(--vc-font); text-align:left; transition:background 0.15s; }\n.vc-section-toggle:hover { background:var(--vc-surface-alt); }\n.vc-section-toggle-text { display:flex; align-items:center; gap:10px; }\n.vc-section-icon { font-size:20px; line-height:1; }\n.vc-section-title { font-family:var(--vc-display); font-size:18px; font-weight:700; color:var(--vc-ink); margin:0; }\n.vc-section-chevron { width:20px; height:20px; color:var(--vc-ink-muted); transition:transform 0.3s; flex-shrink:0; }\n.vc-section.vc-open .vc-section-chevron { transform:rotate(180deg); }\n.vc-section-body { max-height:0; overflow:hidden; transition:max-height 0.4s cubic-bezier(0.4,0,0.2,1); }\n.vc-section.vc-open .vc-section-body { max-height:20000px; }\n.vc-section-inner { padding:0 24px 24px; border-top:1px solid var(--vc-border-light); }\n\n.vc-theory h3 { font-family:var(--vc-display); font-size:17px; font-weight:700; color:var(--vc-ink); margin:28px 0 10px; }\n.vc-theory h3:first-child { margin-top:20px; }\n.vc-theory p { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 10px; }\n.vc-theory ul, .vc-theory ol { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 12px 18px; padding:0; }\n.vc-theory li { margin-bottom:5px; }\n.vc-formula-box { background:var(--vc-surface-alt); border:2px solid var(--vc-border); border-radius:6px; padding:14px 20px; font-family:var(--vc-mono); font-size:16px; font-weight:500; text-align:center; margin:14px 0; color:var(--vc-ink); overflow-x:auto; }\n.vc-info-box { background:var(--vc-blue-light); border-left:3px solid var(--vc-blue); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-info-box p { margin:0; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-warning-box { background:var(--vc-yellow-light); border-left:3px solid var(--vc-yellow); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-example-box { background:var(--vc-surface-alt); border:1px solid var(--vc-border-light); border-radius:6px; padding:16px; margin:14px 0; }\n.vc-example-title { font-family:var(--vc-mono); font-size:13px; font-weight:600; color:var(--vc-accent); margin-bottom:8px; }\n.vc-table { width:100%; border-collapse:collapse; margin:14px 0; font-size:13px; }\n.vc-table th, .vc-table td { padding:10px 12px; border:1px solid var(--vc-border-light); text-align:left; }\n.vc-table th { background:var(--vc-surface-alt); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:0.05em; color:var(--vc-ink-secondary); }\n.vc-table tr:nth-child(even) { background:var(--vc-surface-alt); }\n@media(max-width:600px) { .vc-table { font-size:12px; } .vc-table th, .vc-table td { padding:8px; } }\n\n.vc-faq-list { display:flex; flex-direction:column; gap:8px; margin-top:20px; }\n.vc-faq-item { border:1px solid var(--vc-border-light); border-radius:6px; overflow:hidden; }\n.vc-faq-q { width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px; padding:14px 16px; border:none; background:var(--vc-surface-alt); cursor:pointer; font-family:var(--vc-font); font-size:15px; font-weight:600; color:var(--vc-ink); text-align:left; transition:background 0.15s; }\n.vc-faq-q:hover { background:#ede9e3; }\n.vc-faq-chevron { width:16px; height:16px; color:var(--vc-ink-muted); flex-shrink:0; transition:transform 0.25s; }\n.vc-faq-item.vc-open .vc-faq-chevron { transform:rotate(180deg); }\n.vc-faq-a { max-height:0; overflow:hidden; transition:max-height 0.35s; }\n.vc-faq-item.vc-open .vc-faq-a { max-height:1200px; }\n.vc-faq-a-inner { padding:14px 16px; border-top:1px solid var(--vc-border-light); font-size:14px; color:var(--vc-ink-secondary); }\n.vc-faq-a-inner p { margin:0 0 8px; }\n.vc-faq-a-inner p:last-child { margin-bottom:0; }\n.vc-faq-a-inner ul { margin:4px 0 8px 16px; padding:0; }\n.vc-faq-a-inner li { margin-bottom:3px; }\n\n.vc-related { display:flex; flex-wrap:wrap; gap:10px; margin-top:16px; }\n.vc-related-link { display:inline-block; padding:8px 16px; font-family:var(--vc-font); font-size:13px; font-weight:600; background:var(--vc-surface-alt); color:var(--vc-ink-secondary); border:1px solid var(--vc-border); border-radius:var(--vc-radius); text-decoration:none; transition:all 0.15s; }\n.vc-related-link:hover { border-color:var(--vc-accent); color:var(--vc-accent); background:var(--vc-accent-light); }\n\n.vc-promo { margin-top:24px; padding:20px; background:linear-gradient(135deg, var(--vc-accent-light), var(--vc-surface)); border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); display:flex; align-items:center; gap:16px; }\n.vc-promo-text { flex:1; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-promo-text strong { color:var(--vc-ink); }\n.vc-promo-link { padding:8px 20px; font-size:13px; font-weight:700; color:#fff; background:var(--vc-accent); border-radius:var(--vc-radius); text-decoration:none; white-space:nowrap; transition:background 0.15s; }\n.vc-promo-link:hover { background:var(--vc-accent-hover); }\n\n.vc-footer { text-align:center; padding:32px 16px; font-size:13px; color:var(--vc-ink-muted); }\n.vc-footer a { color:var(--vc-accent); text-decoration:none; }\n.vc-footer a:hover { text-decoration:underline; }\n.vc-footer-links { margin-top:8px; font-size:12px; }\n.vc-footer-links a { margin:0 8px; }\n\n@media print {\n    .vc-section-body { max-height:none!important; }\n    .vc-faq-a { max-height:none!important; }\n    .vc-results { max-height:none!important; padding:24px!important; }\n    .vc-copy-btn, .vc-section-chevron, .vc-faq-chevron, .vc-presets, .vc-promo { display:none!important; }\n}\n<\/style>\n\n<div class=\"vc-calculator\" id=\"vc-spring-critical\">\n\n<!-- Header -->\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool<\/p>\n    <h1 class=\"vc-header-title\">Spring Critical Speed Calculator<\/h1>\n    <p class=\"vc-header-subtitle\">Calculate the critical surge frequency of a helical compression spring \u2014 the resonant frequency at which standing waves form along the coils, causing surging.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">Helical Spring<\/span>\n        <span class=\"vc-badge\">Surge Frequency<\/span>\n        <span class=\"vc-badge\">4 Materials<\/span>\n    <\/div>\n<\/header>\n\n<!-- Calculator Card -->\n<div class=\"vc-card\">\n    <div class=\"vc-unit-bar\">\n        <button type=\"button\" class=\"vc-unit-btn vc-active\" data-system=\"metric\">Metric (mm)<\/button>\n        <button type=\"button\" class=\"vc-unit-btn\" data-system=\"imperial\">Imperial (in)<\/button>\n    <\/div>\n\n    <form class=\"vc-form\" id=\"vc-form\" autocomplete=\"off\">\n        <div class=\"vc-form-grid\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-wireD\">Wire Diameter (d) <span class=\"vc-label-hint\" id=\"vc-wireD-unit\">(mm)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-wireD\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 5\" value=\"5\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-coilD\">Mean Coil Diameter (D) <span class=\"vc-label-hint\" id=\"vc-coilD-unit\">(mm \u2014 (OD+ID)\/2)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-coilD\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 30\" value=\"30\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-nCoils\">Active Coils (n\u2090)<\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-nCoils\" inputmode=\"decimal\" step=\"any\" min=\"0.5\" placeholder=\"e.g. 7\" value=\"7\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-material\">Material<\/label>\n                <select class=\"vc-select\" id=\"vc-material\">\n                    <option value=\"steel\">Spring steel (G=79.3 GPa, \u03c1=7850 kg\/m\u00b3)<\/option>\n                    <option value=\"stainless\">Stainless steel (G=69 GPa, \u03c1=7900 kg\/m\u00b3)<\/option>\n                    <option value=\"music\">Music wire (G=81.7 GPa, \u03c1=7850 kg\/m\u00b3)<\/option>\n                    <option value=\"inconel\">Inconel (G=75.8 GPa, \u03c1=8440 kg\/m\u00b3)<\/option>\n                    <option value=\"custom\">Custom (enter G and \u03c1)<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- Custom material fields -->\n        <div class=\"vc-custom-fields\" id=\"vc-custom-fields\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-customG\">Shear Modulus G <span class=\"vc-label-hint\">(GPa)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-customG\" inputmode=\"decimal\" step=\"any\" min=\"0.1\" placeholder=\"e.g. 79.3\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-customRho\">Density \u03c1 <span class=\"vc-label-hint\">(kg\/m\u00b3)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-customRho\" inputmode=\"decimal\" step=\"any\" min=\"1\" placeholder=\"e.g. 7850\">\n            <\/div>\n        <\/div>\n\n        <!-- Presets -->\n        <div class=\"vc-presets\">\n            <div class=\"vc-presets-label\">Quick presets<\/div>\n            <button type=\"button\" class=\"vc-preset-btn\" data-d=\"4\" data-D=\"25\" data-n=\"6\" data-mat=\"steel\">Valve spring (d=4, D=25, n=6)<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-d=\"10\" data-D=\"60\" data-n=\"8\" data-mat=\"steel\">Heavy duty (d=10, D=60, n=8)<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-d=\"1.5\" data-D=\"10\" data-n=\"10\" data-mat=\"music\">Small spring (d=1.5, D=10, n=10)<\/button>\n        <\/div>\n    <\/form>\n\n    <!-- Results -->\n    <div class=\"vc-results\" id=\"vc-results\">\n        <div class=\"vc-results-head\">\n            <h2 class=\"vc-results-title\">Results<\/h2>\n            <button type=\"button\" class=\"vc-copy-btn\" id=\"vc-copy-btn\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg>\n                Copy\n            <\/button>\n        <\/div>\n        <div class=\"vc-result-grid\">\n            <div class=\"vc-rcard vc-rcard-primary\">\n                <div class=\"vc-rcard-label\">Surge Frequency<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-surge\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Surge Frequency (RPM)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-surgerpm\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Spring Stiffness (k)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-stiffness\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Spring Index (C = D\/d)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-index\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Loaded Frequency (both ends fixed)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-loaded\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Material<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-material\">\u2014<\/div>\n            <\/div>\n        <\/div>\n        <div id=\"vc-warnings\"><\/div>\n        <div class=\"vc-viz\" id=\"vc-viz\" style=\"text-align:center;margin:16px 0 8px\"><\/div>\n    <\/div>\n<\/div>\n\n<!-- Theory & Reference -->\n<div class=\"vc-section vc-open\" id=\"vc-sec-theory\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"true\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udcd8<\/span>\n            <span class=\"vc-section-title\">Theory &amp; Formulas<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner vc-theory\">\n            <h3>Surge Frequency<\/h3>\n            <p>The critical surge frequency of a helical compression spring (free-free boundary, fundamental mode):<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <ul>\n                <li><strong>d<\/strong> \u2014 wire diameter (m)<\/li>\n                <li><strong>D<\/strong> \u2014 mean coil diameter (m)<\/li>\n                <li><strong>n\u2090<\/strong> \u2014 number of active coils<\/li>\n                <li><strong>G<\/strong> \u2014 shear modulus of the wire material (Pa)<\/li>\n                <li><strong>\u03c1<\/strong> \u2014 wire material density (kg\/m\u00b3)<\/li>\n            <\/ul>\n\n            <h3>Spring Stiffness<\/h3>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n\n            <h3>Spring Index &amp; Loaded Frequency<\/h3>\n            <div class=\"vc-formula-box\" id=\"vc-katex-3\"><\/div>\n            <div class=\"vc-formula-box\" id=\"vc-katex-4\"><\/div>\n            <p>The spring index C should typically be between 3 and 15 for practical spring designs.<\/p>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 Spring Steel Compression Spring<\/div>\n                <p><strong>Given:<\/strong> d = 5 mm, D = 30 mm, n\u2090 = 7, Spring steel (G = 79.3 GPa, \u03c1 = 7850 kg\/m\u00b3)<\/p>\n                <p>\u221a(G \/ 2\u03c1) = \u221a(79.3\u00d710\u2079 \/ (2 \u00d7 7850)) = 2247.4<\/p>\n                <p>f_surge = 0.005 \/ (2\u03c0 \u00d7 7 \u00d7 0.030\u00b2) \u00d7 2247.4 = <strong>283.9 Hz<\/strong> (17,032 RPM)<\/p>\n                <p>k = 79.3\u00d710\u2079 \u00d7 0.005\u2074 \/ (8 \u00d7 0.030\u00b3 \u00d7 7) = <strong>32.8 N\/mm<\/strong><\/p>\n                <p>C = D\/d = 30\/5 = <strong>6.0<\/strong> (good, within 3\u201315 range)<\/p>\n                <p>f_loaded = 283.9 \/ 2 = <strong>142.0 Hz<\/strong><\/p>\n            <\/div>\n\n            <div class=\"vc-warning-box\">\n                <p style=\"margin:0;font-size:14px;color:var(--vc-ink-secondary);\"><strong>\u26a0\ufe0f Rule of thumb:<\/strong> The surge frequency should be at least 13\u00d7 the operating frequency for valve springs, and 15\u201320\u00d7 for general industrial applications.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Related Calculators -->\n<div class=\"vc-section\" id=\"vc-sec-related\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udd17<\/span>\n            <span class=\"vc-section-title\">Related Calculators<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-related\">\n                <a class=\"vc-related-link\" href=\"\/calculators\/natural-frequency\/\">Natural Frequency (Mass-Spring)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/spring-selection\/\">Spring Selection by Frequency<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/equivalent-spring-stiffness\/\">Equivalent Spring Stiffness<\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- FAQ -->\n<div class=\"vc-section\" id=\"vc-sec-faq\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\u2753<\/span>\n            <span class=\"vc-section-title\">Frequently Asked Questions<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-faq-list\" id=\"vc-faq-list\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Promo -->\n<div class=\"vc-promo\">\n    <div class=\"vc-promo-text\">\n        <strong>Vibromera \u2014 Vibration Diagnostics &amp; Balancing Equipment<\/strong><br>\n        Professional portable balancers, vibration analyzers, and condition monitoring systems used in 50+ countries. Diagnose spring resonance and balance rotating machinery on-site.\n    <\/div>\n    <a class=\"vc-promo-link\" href=\"https:\/\/vibromera.eu\/\" target=\"_blank\" rel=\"noopener\">Learn More<\/a>\n<\/div>\n\n<!-- Footer -->\n<footer class=\"vc-footer\">\n    <p>\u00a9 2024\u20132025 <a href=\"https:\/\/vibromera.eu\/\">Vibromera<\/a> \u2014 Engineering Calculators<\/p>\n    <p style=\"font-size:12px;margin-top:4px;\">Last updated: February 2025<\/p>\n    <div class=\"vc-footer-links\">\n        <a href=\"\/calculators\/engineering-calculators\/\">All 252 Calculators<\/a>\n        <a href=\"https:\/\/vibromera.eu\/contacts\/\">Contact<\/a>\n    <\/div>\n<\/footer>\n\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/katex@0.16.11\/dist\/katex.min.js\"><\/script>\n<script>\n(function() {\n    'use strict';\n\n    var SLUG = 'spring-critical-speed';\n    var unitSystem = 'metric';\n    var MM2IN = 25.4;\n    var NMM2LBFIN = 5.71015;\n\n    \/* Material database: G in Pa, rho in kg\/m\u00b3 *\/\n    var MATERIALS = {\n        steel:    { G: 79.3e9, rho: 7850, name: 'Spring steel' },\n        stainless:{ G: 69e9,   rho: 7900, name: 'Stainless steel' },\n        music:    { G: 81.7e9, rho: 7850, name: 'Music wire' },\n        inconel:  { G: 75.8e9, rho: 8440, name: 'Inconel' },\n        custom:   { G: 0,      rho: 0,    name: 'Custom' }\n    };\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(v) {\n        if (isNaN(v)) return '\u2014';\n        if (v === 0) return '0';\n        if (Math.abs(v) < 0.001) return v.toExponential(3);\n        if (Math.abs(v) < 1) return v.toFixed(4);\n        if (Math.abs(v) < 10) return v.toFixed(3);\n        if (Math.abs(v) < 100) return v.toFixed(2);\n        if (Math.abs(v) < 1000) return v.toFixed(1);\n        return Math.round(v).toLocaleString('en-US');\n    }\n\n    function getGRho() {\n        var sel = $('vc-material').value;\n        if (sel === 'custom') {\n            var Gval = parseFloat($('vc-customG').value);\n            var rhoVal = parseFloat($('vc-customRho').value);\n            if (!Gval || Gval <= 0 || !rhoVal || rhoVal <= 0) return null;\n            return { G: Gval * 1e9, rho: rhoVal, name: 'Custom (G=' + Gval + ' GPa, \u03c1=' + rhoVal + ' kg\/m\u00b3)' };\n        }\n        return MATERIALS[sel];\n    }\n\n    function toggleCustomFields() {\n        var cf = $('vc-custom-fields');\n        if ($('vc-material').value === 'custom') {\n            cf.classList.add('vc-visible');\n        } else {\n            cf.classList.remove('vc-visible');\n        }\n    }\n\n    \/* \u2500\u2500 CALCULATION \u2500\u2500 *\/\n    function calculate() {\n        var dVal = parseFloat($('vc-wireD').value);\n        var DVal = parseFloat($('vc-coilD').value);\n        var na = parseFloat($('vc-nCoils').value);\n\n        if (!dVal || dVal <= 0 || !DVal || DVal <= 0 || !na || na <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        var mat = getGRho();\n        if (!mat) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        \/* Convert to SI (meters) *\/\n        var d_m, D_m;\n        if (unitSystem === 'imperial') {\n            d_m = dVal * MM2IN \/ 1000;\n            D_m = DVal * MM2IN \/ 1000;\n        } else {\n            d_m = dVal \/ 1000;\n            D_m = DVal \/ 1000;\n        }\n\n        var Gpa = mat.G;\n        var rho = mat.rho;\n\n        \/* Surge frequency: f = (d \/ (2\u03c0 \u00d7 na \u00d7 D\u00b2)) \u00d7 \u221a(G \/ (2\u03c1)) *\/\n        var fSurge = (d_m \/ (2 * Math.PI * na * D_m * D_m)) * Math.sqrt(Gpa \/ (2 * rho));\n        var fSurgeRPM = fSurge * 60;\n\n        \/* Spring index C = D\/d *\/\n        var C = D_m \/ d_m;\n\n        \/* Spring stiffness k = G\u00d7d\u2074 \/ (8\u00d7D\u00b3\u00d7na) in N\/m, then convert to N\/mm *\/\n        var k_Nm = Gpa * Math.pow(d_m, 4) \/ (8 * Math.pow(D_m, 3) * na);\n        var k_Nmm = k_Nm \/ 1000;\n\n        \/* Fundamental loaded frequency (both ends fixed) *\/\n        var fLoaded = fSurge \/ 2;\n\n        \/* Display values *\/\n        var kDisp, kUnit;\n        if (unitSystem === 'imperial') {\n            kDisp = k_Nmm * NMM2LBFIN;\n            kUnit = 'lbf\/in';\n        } else {\n            kDisp = k_Nmm;\n            kUnit = 'N\/mm';\n        }\n\n        $('vc-r-surge').innerHTML = fmt(fSurge) + ' <span class=\"vc-rcard-unit\">Hz<\/span>';\n        $('vc-r-surgerpm').innerHTML = fmt(fSurgeRPM) + ' <span class=\"vc-rcard-unit\">RPM<\/span>';\n        $('vc-r-stiffness').innerHTML = fmt(kDisp) + ' <span class=\"vc-rcard-unit\">' + kUnit + '<\/span>';\n        $('vc-r-index').innerHTML = fmt(C);\n        $('vc-r-loaded').innerHTML = fmt(fLoaded) + ' <span class=\"vc-rcard-unit\">Hz<\/span>';\n        $('vc-r-material').innerHTML = '<span style=\"font-size:16px\">' + mat.name + '<\/span>';\n\n        \/* Warnings *\/\n        var warnings = [];\n        if (C < 3) warnings.push('\u26a0 Spring index C = ' + fmt(C) + ' is below 3 \u2014 spring may be too tight to manufacture reliably.');\n        if (C > 15) warnings.push('\u26a0 Spring index C = ' + fmt(C) + ' is above 15 \u2014 spring may be prone to buckling and tangling.');\n        var warnEl = $('vc-warnings');\n        if (warnings.length > 0) {\n            warnEl.innerHTML = warnings.map(function(w) { return '<div class=\"vc-rcard-warning\">' + w + '<\/div>'; }).join('');\n        } else {\n            warnEl.innerHTML = '';\n        }\n\n        $('vc-results').classList.add('vc-visible');\n        drawViz(na, C, fSurge);\n\n        \/* URL params *\/\n        var u = new URL(window.location);\n        u.searchParams.set('wireD', $('vc-wireD').value);\n        u.searchParams.set('coilD', $('vc-coilD').value);\n        u.searchParams.set('nCoils', $('vc-nCoils').value);\n        u.searchParams.set('material', $('vc-material').value);\n        if ($('vc-material').value === 'custom') {\n            u.searchParams.set('customG', $('vc-customG').value);\n            u.searchParams.set('customRho', $('vc-customRho').value);\n        }\n        history.replaceState(null, '', u.toString());\n\n        \/* History *\/\n        var unitLabel = unitSystem === 'imperial' ? 'in' : 'mm';\n        saveHistory({\n            wireD: $('vc-wireD').value,\n            coilD: $('vc-coilD').value,\n            nCoils: $('vc-nCoils').value,\n            material: $('vc-material').value,\n            customG: $('vc-customG').value,\n            customRho: $('vc-customRho').value,\n            _summary: 'd=' + dVal + unitLabel + ', D=' + DVal + unitLabel + ', n=' + na + ' \u2192 ' + fmt(fSurge) + ' Hz'\n        });\n    }\n\n    \/* \u2500\u2500 UNIT TOGGLE \u2500\u2500 *\/\n    var unitBtns = document.querySelectorAll('.vc-unit-btn');\n    unitBtns.forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            unitBtns.forEach(function(b) { b.classList.remove('vc-active'); });\n            this.classList.add('vc-active');\n            unitSystem = this.getAttribute('data-system');\n            $('vc-wireD-unit').textContent = unitSystem === 'imperial' ? '(in)' : '(mm)';\n            $('vc-coilD-unit').textContent = unitSystem === 'imperial' ? '(in \u2014 (OD+ID)\/2)' : '(mm \u2014 (OD+ID)\/2)';\n            try { localStorage.setItem('vc_units', unitSystem); } catch(e) {}\n            calculate();\n        });\n    });\n\n    \/* \u2500\u2500 PRESETS \u2500\u2500 *\/\n    document.querySelectorAll('.vc-preset-btn').forEach(function(btn) {\n        btn.addEventListener('click', function(e) {\n            e.preventDefault();\n            var d = parseFloat(this.getAttribute('data-d'));\n            var D = parseFloat(this.getAttribute('data-D'));\n            if (unitSystem === 'imperial') {\n                $('vc-wireD').value = +(d \/ MM2IN).toFixed(4);\n                $('vc-coilD').value = +(D \/ MM2IN).toFixed(4);\n            } else {\n                $('vc-wireD').value = d;\n                $('vc-coilD').value = D;\n            }\n            $('vc-nCoils').value = this.getAttribute('data-n');\n            $('vc-material').value = this.getAttribute('data-mat');\n            toggleCustomFields();\n            calculate();\n        });\n    });\n\n    \/* \u2500\u2500 MATERIAL CHANGE \u2500\u2500 *\/\n    $('vc-material').addEventListener('change', function() {\n        toggleCustomFields();\n    });\n\n    \/* \u2500\u2500 AUTO-CALCULATE \u2500\u2500 *\/\n    $('vc-form').addEventListener('input', calculate);\n    $('vc-form').addEventListener('change', calculate);\n\n    \/* \u2500\u2500 COPY \u2500\u2500 *\/\n    $('vc-copy-btn').addEventListener('click', function() {\n        var unitLabel = unitSystem === 'imperial' ? 'in' : 'mm';\n        var text = 'Spring Surge Frequency Calculation\\n' +\n            '\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\n' +\n            'Wire diameter: ' + $('vc-wireD').value + ' ' + unitLabel + '\\n' +\n            'Coil diameter: ' + $('vc-coilD').value + ' ' + unitLabel + '\\n' +\n            'Active coils: ' + $('vc-nCoils').value + '\\n' +\n            'Surge Frequency: ' + $('vc-r-surge').textContent + '\\n' +\n            'Surge RPM: ' + $('vc-r-surgerpm').textContent + '\\n' +\n            'Stiffness: ' + $('vc-r-stiffness').textContent + '\\n' +\n            'Spring Index: ' + $('vc-r-index').textContent + '\\n' +\n            'Loaded Frequency: ' + $('vc-r-loaded').textContent + '\\n' +\n            '\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\n' +\n            'vibromera.eu\/calculators\/spring-critical-speed\/';\n\n        if (navigator.clipboard) {\n            navigator.clipboard.writeText(text).then(function() {\n                var btn = $('vc-copy-btn');\n                btn.classList.add('vc-copied');\n                btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg> Copied!';\n                setTimeout(function() {\n                    btn.classList.remove('vc-copied');\n                    btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg> Copy';\n                }, 2000);\n            });\n        }\n    });\n\n    \/* \u2500\u2500 COLLAPSIBLE SECTIONS \u2500\u2500 *\/\n    document.querySelectorAll('.vc-section-toggle').forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            var section = this.closest('.vc-section');\n            var isOpen = section.classList.contains('vc-open');\n            section.classList.toggle('vc-open');\n            this.setAttribute('aria-expanded', !isOpen);\n        });\n    });\n\n    \/* \u2500\u2500 FAQ \u2500\u2500 *\/\n    var faqData = [\n        { q: 'What is spring surging?', a: '<p>Spring surging is a resonance phenomenon that occurs in helical compression springs when the excitation frequency matches the spring\\'s natural frequency. At this point, a standing wave forms along the coils, causing some coils to compress while others expand.<\/p><p>This creates localized stress concentrations, uneven load distribution, and can lead to premature fatigue failure, noise, and loss of spring function. Surging is especially critical in valve springs of internal combustion engines.<\/p>' },\n        { q: 'Why is surge frequency important?', a: '<p>Knowing the surge frequency is essential for designing reliable spring systems. If a spring operates at or near its surge frequency, the resulting resonance amplifies internal stresses far beyond the static design load, leading to fatigue cracking, coil clash, and unpredictable spring behavior.<\/p><p>Engineers must ensure the operating frequency stays well below the surge frequency \u2014 typically no more than 1\/13th to 1\/15th of the spring\\'s natural frequency.<\/p>' },\n        { q: 'How to avoid spring surging?', a: '<p>Several design strategies can prevent spring surging:<\/p><ul><li>Increase the wire diameter relative to coil diameter to raise the natural frequency<\/li><li>Reduce the number of active coils (directly increases surge frequency)<\/li><li>Use variable-pitch (progressive) springs with no single resonant frequency<\/li><li>Add internal or external friction dampers<\/li><li>Choose materials with higher shear modulus<\/li><li>Use nested (dual) springs with different natural frequencies<\/li><li>Ensure operating frequency is well below 1\/13th of the surge frequency<\/li><\/ul>' },\n        { q: 'What is the rule of thumb for spring surge frequency?', a: '<p>The most widely used rule of thumb states that the spring\\'s surge frequency should be at least <strong>13 times higher<\/strong> than the operating frequency for valve springs, and at least <strong>15\u201320 times<\/strong> for general industrial applications.<\/p><p>This safety margin ensures that no harmonic of the operating frequency can excite the spring\\'s natural frequency. Some conservative designs require the ratio to be 20:1 or higher, especially in safety-critical applications.<\/p>' },\n        { q: 'How does the number of coils affect surge frequency?', a: '<p>The number of active coils has an inversely proportional effect on surge frequency \u2014 doubling the number of active coils cuts the surge frequency in half.<\/p><p>This is because more coils increase the spring\\'s effective mass and length while reducing its stiffness. For high-speed applications, designers minimize the number of active coils. However, fewer coils also means higher stress per coil, so a balance must be struck.<\/p>' }\n    ];\n\n    var faqList = $('vc-faq-list');\n    faqData.forEach(function(faq) {\n        faqList.innerHTML += '<div class=\"vc-faq-item\"><button type=\"button\" class=\"vc-faq-q\"><span>' + faq.q + '<\/span><svg class=\"vc-faq-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg><\/button><div class=\"vc-faq-a\"><div class=\"vc-faq-a-inner\">' + faq.a + '<\/div><\/div><\/div>';\n    });\n    faqList.addEventListener('click', function(e) {\n        var btn = e.target.closest('.vc-faq-q');\n        if (!btn) return;\n        btn.closest('.vc-faq-item').classList.toggle('vc-open');\n    });\n\n    \/* \u2500\u2500 VISUALIZATION \u2500\u2500 *\/\n    function drawViz(na, C, fSurge) {\n        var c = $('vc-viz'), W = 400, H = 200;\n        var svg = '<svg width=\"'+W+'\" height=\"'+H+'\" viewBox=\"0 0 '+W+' '+H+'\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">';\n        \/\/ Draw helical spring (simplified as zigzag)\n        var nCoils = Math.round(Math.min(na, 12));\n        var x0 = 40, x1 = W - 40, yc = H \/ 2;\n        var coilW = (x1 - x0) \/ nCoils;\n        var amp = 30; \/\/ coil visual amplitude\n        \/\/ Fixed ends\n        svg += '<rect x=\"'+(x0-8)+'\" y=\"'+(yc-40)+'\" width=\"8\" height=\"80\" rx=\"2\" fill=\"#7b8fa3\" stroke=\"#5a6a7a\" stroke-width=\"1\"\/>';\n        svg += '<rect x=\"'+x1+'\" y=\"'+(yc-40)+'\" width=\"8\" height=\"80\" rx=\"2\" fill=\"#7b8fa3\" stroke=\"#5a6a7a\" stroke-width=\"1\"\/>';\n        \/\/ Surge wave: sinusoidal variation in coil spacing\n        var pts = [];\n        for (var i = 0; i <= nCoils; i++) {\n            var x = x0 + i * coilW;\n            \/\/ Standing wave: coil spacing varies sinusoidally\n            var wave = Math.sin(Math.PI * i \/ nCoils);\n            var yOff = wave * 12; \/\/ vertical displacement of coil center\n            if (i < nCoils) {\n                var xm = x + coilW \/ 2;\n                \/\/ compress\/expand based on wave\n                var squeeze = 1 - 0.4 * Math.cos(Math.PI * (i + 0.5) \/ nCoils);\n                var localAmp = amp * squeeze;\n                svg += '<line x1=\"'+x+'\" y1=\"'+(yc+yOff)+'\" x2=\"'+xm+'\" y2=\"'+(yc-localAmp+yOff)+'\" stroke=\"#3578b2\" stroke-width=\"2.5\" stroke-linecap=\"round\"\/>';\n                svg += '<line x1=\"'+xm+'\" y1=\"'+(yc-localAmp+yOff)+'\" x2=\"'+(x+coilW)+'\" y2=\"'+(yc+yOff)+'\" stroke=\"#3578b2\" stroke-width=\"2.5\" stroke-linecap=\"round\"\/>';\n                \/\/ Color dense regions red\n                if (squeeze < 0.75) {\n                    svg += '<line x1=\"'+x+'\" y1=\"'+(yc+yOff)+'\" x2=\"'+xm+'\" y2=\"'+(yc-localAmp+yOff)+'\" stroke=\"rgba(231,76,60,0.5)\" stroke-width=\"3\" stroke-linecap=\"round\"\/>';\n                    svg += '<line x1=\"'+xm+'\" y1=\"'+(yc-localAmp+yOff)+'\" x2=\"'+(x+coilW)+'\" y2=\"'+(yc+yOff)+'\" stroke=\"rgba(231,76,60,0.5)\" stroke-width=\"3\" stroke-linecap=\"round\"\/>';\n                }\n            }\n        }\n        \/\/ Standing wave envelope (dashed)\n        svg += '<path d=\"M'+x0+' '+yc;\n        for (var j = 0; j <= 40; j++) {\n            var xp = x0 + j * (x1 - x0) \/ 40;\n            var yp = yc - 15 * Math.sin(Math.PI * j \/ 40);\n            svg += ' L'+xp.toFixed(1)+' '+yp.toFixed(1);\n        }\n        svg += '\" fill=\"none\" stroke=\"#e74c3c\" stroke-width=\"1\" stroke-dasharray=\"4,3\" opacity=\"0.6\"\/>';\n        svg += '<path d=\"M'+x0+' '+yc;\n        for (var j = 0; j <= 40; j++) {\n            var xp = x0 + j * (x1 - x0) \/ 40;\n            var yp = yc + 15 * Math.sin(Math.PI * j \/ 40);\n            svg += ' L'+xp.toFixed(1)+' '+yp.toFixed(1);\n        }\n        svg += '\" fill=\"none\" stroke=\"#e74c3c\" stroke-width=\"1\" stroke-dasharray=\"4,3\" opacity=\"0.6\"\/>';\n        \/\/ Labels\n        svg += '<text x=\"'+(W\/2)+'\" y=\"18\" text-anchor=\"middle\" fill=\"#2c3e50\" font-size=\"11\" font-weight=\"600\">Surge Wave Pattern (1st mode)<\/text>';\n        svg += '<text x=\"'+(W\/2)+'\" y=\"'+(H-6)+'\" text-anchor=\"middle\" fill=\"#5a5650\" font-size=\"10\">f\\u209B = '+Math.round(fSurge)+' Hz \u2014 '+nCoils+' active coils, C = '+(C).toFixed(1)+'<\/text>';\n        svg += '<text x=\"'+(x0-12)+'\" y=\"'+(yc+4)+'\" text-anchor=\"middle\" fill=\"#7b8fa3\" font-size=\"9\">Fixed<\/text>';\n        svg += '<text x=\"'+(x1+16)+'\" y=\"'+(yc+4)+'\" text-anchor=\"middle\" fill=\"#7b8fa3\" font-size=\"9\">Free<\/text>';\n        svg += '<\/svg>';\n        c.innerHTML = svg;\n    }\n\n    \/* \u2500\u2500 HISTORY \u2500\u2500 *\/\n    function saveHistory(entry) {\n        var key = 'vc_history_' + SLUG;\n        var arr = [];\n        try { arr = JSON.parse(localStorage.getItem(key)) || []; } catch(e) {}\n        entry._ts = new Date().toISOString();\n        arr.unshift(entry);\n        if (arr.length > 10) arr = arr.slice(0, 10);\n        try { localStorage.setItem(key, JSON.stringify(arr)); } catch(e) {}\n    }\n\n    \/* \u2500\u2500 URL PARAMS \u2500\u2500 *\/\n    function loadParams() {\n        var p = new URLSearchParams(window.location.search);\n        p.forEach(function(v, k) {\n            var el = $(k) || $('vc-' + k);\n            if (el) el.value = v;\n        });\n        if (p.get('material') === 'custom') toggleCustomFields();\n    }\n\n    \/* \u2500\u2500 KATEX \u2500\u2500 *\/\n    function renderFormulas() {\n        try {\n            katex.render('f_{\\\\text{surge}} = \\\\frac{d}{2\\\\pi \\\\, n_a \\\\, D^2}\\\\sqrt{\\\\frac{G}{2\\\\rho}} \\\\quad [\\\\text{Hz}]', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('k = \\\\frac{G \\\\, d^4}{8 \\\\, D^3 \\\\, n_a} \\\\quad [\\\\text{N\/mm}]', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n            katex.render('C = \\\\frac{D}{d}', $('vc-katex-3'), { displayMode: true, throwOnError: false });\n            katex.render('f_{\\\\text{loaded}} = \\\\frac{f_{\\\\text{surge}}}{2} \\\\quad [\\\\text{Hz}]', $('vc-katex-4'), { displayMode: true, throwOnError: false });\n        } catch(e) {}\n    }\n\n    \/* \u2500\u2500 INIT \u2500\u2500 *\/\n    function init() {\n        try {\n            var saved = localStorage.getItem('vc_units');\n            if (saved === 'imperial') {\n                unitSystem = 'imperial';\n                unitBtns.forEach(function(b) { b.classList.toggle('vc-active', b.getAttribute('data-system') === 'imperial'); });\n                $('vc-wireD-unit').textContent = '(in)';\n                $('vc-coilD-unit').textContent = '(in \u2014 (OD+ID)\/2)';\n            }\n        } catch(e) {}\n\n        loadParams();\n        toggleCustomFields();\n        renderFormulas();\n        calculate();\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u09b9\u09c7\u09b2\u09bf\u0995\u09be\u09b2 \u09b8\u0982\u0995\u09cb\u099a\u09a8 \u09ac\u09b8\u09a8\u09cd\u09a4\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09ac\u09b8\u09a8\u09cd\u09a4 surge frequency \u0997\u09a3\u09a8\u09be \u0995\u09b0\u09c1\u09a8\u0964 \u09a4\u09be\u09b0 \u09ac\u09cd\u09af\u09be\u09b8, \u0995\u09c1\u09a3\u09cd\u09a1\u09b2\u09c0 \u09ac\u09cd\u09af\u09be\u09b8, \u09b8\u0995\u09cd\u09b0\u09bf\u09af\u09bc \u0995\u09c1\u09a3\u09cd\u09a1\u09b2\u09c0\u09af\u09bc \u098f\u09ac\u0982 \u0989\u09aa\u0995\u09b0\u09a3 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6 \u0995\u09b0\u09be\u09a8 \u09b8\u09ae\u09be\u09b2\u09cb\u099a\u09a8\u09be\u09ae\u09c2\u09b2\u0995 \u0997\u09a4\u09bf \u09a8\u09bf\u09b0\u09cd\u09a7\u09be\u09b0\u09a3 \u0995\u09b0\u09a4\u09c7 \u098f\u09ac\u0982 \u0985\u09a8\u09c1\u09b0\u09a3\u09a8 \u098f\u09a1\u09bc\u09be\u09a4\u09c7\u0964<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100069","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":1,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100069\/revisions"}],"predecessor-version":[{"id":100384,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100069\/revisions\/100384"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/media?parent=100069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/categories?post=100069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/tags?post=100069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}