{"id":100238,"date":"2026-02-15T20:29:12","date_gmt":"2026-02-15T20:29:12","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100238"},"modified":"2026-02-15T20:29:12","modified_gmt":"2026-02-15T20:29:12","slug":"spring-selection","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/uz\/calculators\/spring-selection\/","title":{"rendered":"Spring Selection by Target Frequency Calculator"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Spring Selection by Target Frequency Calculator\",\"alternateName\":[\"Vibration Isolation Spring Calculator\",\"Spring Stiffness Calculator\",\"Isolation Frequency Calculator\"],\"description\":\"Free online engineering calculator for selecting springs based on target natural frequency. Computes required stiffness, static deflection, and per-spring values for vibration isolation design.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/spring-selection-frequency\/\",\"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\":[\"Hz and RPM input modes\",\"Per-spring stiffness calculation\",\"Static deflection\",\"Multi-spring support\",\"Metric and Imperial units\",\"Auto-calculation on input change\",\"URL parameter sharing\",\"Calculation history\"],\"keywords\":\"spring selection, target frequency, spring stiffness, vibration isolation, spring rate, natural frequency\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"How to select springs for vibration isolation?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"To select springs for vibration isolation, first determine the mass of the machine and the desired natural frequency of the isolation system. The natural frequency should be well below the operating frequency \u2014 typically less than 1\/3 of the lowest excitation frequency. Use the formula k = m \u00d7 (2\u03c0f)\u00b2 to calculate the required total spring stiffness, then divide by the number of springs to get the stiffness per spring. Finally, verify that the static deflection under gravity is acceptable and that the springs can support the load without exceeding their rated capacity.\"}},\n{\"@type\":\"Question\",\"name\":\"What is the ideal natural frequency for vibration isolation?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"For effective vibration isolation, the natural frequency of the spring-mass system should be at most 1\/3 of the lowest operating frequency (excitation frequency). For example, if a machine runs at 1500 RPM (25 Hz), the isolation system should have a natural frequency below about 8 Hz. Lower natural frequencies provide better isolation but require softer springs and larger static deflections. Typical isolation systems target 2\u20138 Hz depending on the application.\"}},\n{\"@type\":\"Question\",\"name\":\"Why should the natural frequency be below 1\/3 of the operating speed?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The transmissibility of a vibration isolation system depends on the ratio of the operating frequency to the natural frequency. Isolation only begins when this ratio exceeds \u221a2 \u2248 1.41. At a ratio of 3 (i.e., natural frequency = 1\/3 of operating frequency), transmissibility drops to about 12.5%, meaning 87.5% of the vibration is isolated. Higher ratios give even better isolation. Below a ratio of \u221a2, the system actually amplifies vibrations, with the worst case at resonance (ratio = 1).\"}},\n{\"@type\":\"Question\",\"name\":\"How many springs should I use for vibration isolation?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The number of springs depends on the machine size, weight distribution, and mounting configuration. Common arrangements use 4 springs (one at each corner) for rectangular machines, or 3 springs for triangular layouts. The total required stiffness is divided equally among all springs. Using more springs distributes the load better and provides more stability, but each spring must be softer. Ensure all springs have equal stiffness to prevent tilting and uneven loading.\"}},\n{\"@type\":\"Question\",\"name\":\"What is static deflection and why does it matter?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Static deflection is the amount a spring compresses under the weight of the supported mass due to gravity (\u03b4 = mg\/k). It matters because: (1) it determines how much the machine sinks when placed on the springs, (2) it is directly related to the natural frequency \u2014 a larger deflection means a lower natural frequency and better isolation, (3) the spring must have enough travel to accommodate the static deflection plus any dynamic motion, and (4) excessive deflection can cause stability issues. Typical isolation springs have 5\u201325 mm of static deflection.\"}}\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 Selection by Target Frequency\",\"item\":\"https:\/\/vibromera.eu\/calculators\/spring-selection-frequency\/\"}\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-field-hidden { display:none; }\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\/* \u2500\u2500 MODE TOGGLE (Hz\/RPM) \u2500\u2500 *\/\n.vc-mode-bar { display:flex; gap:0; margin-bottom:18px; }\n.vc-mode-btn { flex:1; padding:10px; border:1.5px solid var(--vc-border); background:var(--vc-surface-alt); font-family:var(--vc-font); font-size:13px; font-weight:600; color:var(--vc-ink-muted); cursor:pointer; transition:all 0.15s; }\n.vc-mode-btn:first-child { border-radius:6px 0 0 6px; border-right:none; }\n.vc-mode-btn:last-child { border-radius:0 6px 6px 0; }\n.vc-mode-btn.vc-active { background:var(--vc-accent); border-color:var(--vc-accent); color:#fff; }\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\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\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, .vc-mode-bar { display:none!important; }\n}\n<\/style>\n\n<div class=\"vc-calculator\" id=\"vc-spring-selection\">\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 Selection by Target Frequency<\/h1>\n    <p class=\"vc-header-subtitle\">Calculate the required spring stiffness for a given mass and target natural frequency. Design vibration isolation systems by determining the spring rate needed.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">Vibration Isolation<\/span>\n        <span class=\"vc-badge\">Hz &amp; RPM<\/span>\n        <span class=\"vc-badge\">Multi-Spring<\/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 (kg, N\/mm)<\/button>\n        <button type=\"button\" class=\"vc-unit-btn\" data-system=\"imperial\">Imperial (lb, lbf\/in)<\/button>\n    <\/div>\n\n    <form class=\"vc-form\" id=\"vc-form\" autocomplete=\"off\">\n        <!-- Hz \/ RPM mode toggle -->\n        <div class=\"vc-mode-bar\">\n            <button type=\"button\" class=\"vc-mode-btn vc-active\" data-mode=\"hz\">Frequency (Hz)<\/button>\n            <button type=\"button\" class=\"vc-mode-btn\" data-mode=\"rpm\">Speed (RPM)<\/button>\n        <\/div>\n\n        <div class=\"vc-form-grid\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-mass\">Mass (m) <span class=\"vc-label-hint\" id=\"vc-mass-unit\">(kg)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-mass\" inputmode=\"decimal\" step=\"any\" min=\"0.001\" placeholder=\"e.g. 300\" value=\"300\">\n            <\/div>\n            <div class=\"vc-field\" id=\"vc-freq-field\">\n                <label class=\"vc-label\" for=\"vc-freq\">Target Natural Frequency <span class=\"vc-label-hint\">(Hz)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-freq\" inputmode=\"decimal\" step=\"any\" min=\"0.001\" placeholder=\"e.g. 4\" value=\"4\">\n            <\/div>\n            <div class=\"vc-field vc-field-hidden\" id=\"vc-rpm-field\">\n                <label class=\"vc-label\" for=\"vc-rpm\">Target Speed <span class=\"vc-label-hint\">(RPM)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-rpm\" inputmode=\"decimal\" step=\"any\" min=\"0.1\" placeholder=\"e.g. 240\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-numSprings\">Number of Springs<\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-numSprings\" inputmode=\"decimal\" step=\"1\" min=\"1\" value=\"4\" placeholder=\"e.g. 4\">\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-m=\"500\" data-f=\"5\" data-mode=\"hz\">Machine 500 kg, 5 Hz isolation<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-m=\"150\" data-f=\"8\" data-mode=\"hz\">Motor 150 kg, target 8 Hz<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-m=\"20\" data-f=\"15\" data-mode=\"hz\">Light device 20 kg, 15 Hz<\/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\">Required Total Spring Stiffness<\/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\">Static Deflection (\u03b4_static)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-deflection\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Angular Frequency (\u03c9)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-omega\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\" id=\"vc-r-perspring-label\">Stiffness per Spring (4 springs)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-perspring\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Natural Frequency<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-freq\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Equivalent RPM<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-rpm\">\u2014<\/div>\n            <\/div>\n        <\/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>Required Spring Stiffness<\/h3>\n            <p>Given a mass and a desired natural frequency, the required spring stiffness is derived from the natural frequency equation solved for k:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <ul>\n                <li><strong>m<\/strong> \u2014 mass of the supported machine (kg)<\/li>\n                <li><strong>f<\/strong> \u2014 target natural frequency (Hz)<\/li>\n                <li><strong>k<\/strong> \u2014 required total spring stiffness (N\/m); divide by 1000 for N\/mm<\/li>\n            <\/ul>\n\n            <h3>RPM to Hz Conversion<\/h3>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n\n            <h3>Static Deflection &amp; Per-Spring Stiffness<\/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>Where <strong>g<\/strong> = 9.81 m\/s\u00b2 and k is in N\/mm for the deflection result in mm.<\/p>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 Machine Vibration Isolation<\/div>\n                <p><strong>Given:<\/strong> Machine mass = 300 kg, Target frequency = 4 Hz, 4 springs<\/p>\n                <p>\u03c9 = 2\u03c0 \u00d7 4 = 25.13 rad\/s<\/p>\n                <p>k = 300 \u00d7 (25.13)\u00b2 = 300 \u00d7 631.7 = 189,510 N\/m = <strong>189.5 N\/mm<\/strong><\/p>\n                <p>\u03b4_static = 300 \u00d7 9.81 \/ 189,510 \u00d7 1000 = <strong>15.5 mm<\/strong><\/p>\n                <p>k per spring = 189.5 \/ 4 = <strong>47.4 N\/mm<\/strong><\/p>\n                <p>Equivalent RPM = 4 \u00d7 60 = <strong>240 RPM<\/strong><\/p>\n            <\/div>\n\n            <div class=\"vc-info-box\">\n                <p><strong>\u2139\ufe0f Design rule:<\/strong> For effective vibration isolation, the natural frequency should be at most 1\/3 of the lowest operating frequency. This ensures at least 87.5% isolation.<\/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\/critical-speed\/\">Spring Critical Speed<\/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. Design optimal isolation systems and verify performance 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-selection-frequency';\n    var unitSystem = 'metric';\n    var freqMode = 'hz';\n    var KG2LB = 2.20462;\n    var NMM2LBFIN = 5.71015;\n    var MM2IN = 25.4;\n    var G = 9.81;\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(v, d) {\n        if (typeof d === 'undefined') d = 4;\n        if (isNaN(v)) return '\u2014';\n        if (v === 0) return '0';\n        if (Math.abs(v) < 0.001) return v.toExponential(2);\n        if (Math.abs(v) < 1) return v.toFixed(d);\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) < 10000) return v.toFixed(1);\n        return Math.round(v).toLocaleString('en-US');\n    }\n\n    function setFreqMode(mode) {\n        freqMode = mode;\n        document.querySelectorAll('.vc-mode-btn').forEach(function(b) {\n            b.classList.toggle('vc-active', b.getAttribute('data-mode') === mode);\n        });\n        $('vc-freq-field').style.display = (mode === 'hz') ? 'flex' : 'none';\n        $('vc-rpm-field').style.display = (mode === 'rpm') ? 'flex' : 'none';\n        $('vc-rpm-field').classList.toggle('vc-field-hidden', mode !== 'rpm');\n    }\n\n    \/* \u2500\u2500 CALCULATION \u2500\u2500 *\/\n    function calculate() {\n        var massVal = parseFloat($('vc-mass').value);\n        if (!massVal || massVal <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        var fTarget;\n        if (freqMode === 'rpm') {\n            var rpmVal = parseFloat($('vc-rpm').value);\n            if (!rpmVal || rpmVal <= 0) {\n                $('vc-results').classList.remove('vc-visible');\n                return;\n            }\n            fTarget = rpmVal \/ 60;\n        } else {\n            var fVal = parseFloat($('vc-freq').value);\n            if (!fVal || fVal <= 0) {\n                $('vc-results').classList.remove('vc-visible');\n                return;\n            }\n            fTarget = fVal;\n        }\n\n        var nSprings = parseInt($('vc-numSprings').value) || 4;\n        if (nSprings < 1) nSprings = 1;\n\n        \/* Convert to metric (kg) *\/\n        var massKg = unitSystem === 'imperial' ? massVal \/ KG2LB : massVal;\n\n        \/* Core calculations *\/\n        var omega = 2 * Math.PI * fTarget;\n        var kNm = massKg * omega * omega;\n        var kNmm = kNm \/ 1000;\n        var deflMm = massKg * G \/ kNm * 1000;\n        var kPerSpring = kNmm \/ nSprings;\n        var rpmEquiv = fTarget * 60;\n\n        \/* Display in user units *\/\n        var kDisplay, kPerDisplay, deflDisplay, deflUnit, stiffUnit;\n        if (unitSystem === 'imperial') {\n            kDisplay = kNmm * NMM2LBFIN;\n            kPerDisplay = kPerSpring * NMM2LBFIN;\n            deflDisplay = deflMm \/ MM2IN;\n            deflUnit = 'in';\n            stiffUnit = 'lbf\/in';\n        } else {\n            kDisplay = kNmm;\n            kPerDisplay = kPerSpring;\n            deflDisplay = deflMm;\n            deflUnit = 'mm';\n            stiffUnit = 'N\/mm';\n        }\n\n        $('vc-r-stiffness').innerHTML = fmt(kDisplay) + ' <span class=\"vc-rcard-unit\">' + stiffUnit + '<\/span>';\n        $('vc-r-deflection').innerHTML = fmt(deflDisplay) + ' <span class=\"vc-rcard-unit\">' + deflUnit + '<\/span>';\n        $('vc-r-omega').innerHTML = fmt(omega) + ' <span class=\"vc-rcard-unit\">rad\/s<\/span>';\n        $('vc-r-perspring-label').textContent = 'Stiffness per spring (' + nSprings + ' spring' + (nSprings > 1 ? 's' : '') + ')';\n        $('vc-r-perspring').innerHTML = fmt(kPerDisplay) + ' <span class=\"vc-rcard-unit\">' + stiffUnit + '<\/span>';\n        $('vc-r-freq').innerHTML = fmt(fTarget) + ' <span class=\"vc-rcard-unit\">Hz<\/span>';\n        $('vc-r-rpm').innerHTML = fmt(rpmEquiv) + ' <span class=\"vc-rcard-unit\">RPM<\/span>';\n\n        $('vc-results').classList.add('vc-visible');\n\n        \/* URL params *\/\n        var u = new URL(window.location);\n        u.searchParams.set('mass', $('vc-mass').value);\n        u.searchParams.set('numSprings', nSprings);\n        u.searchParams.set('mode', freqMode);\n        if (freqMode === 'rpm') u.searchParams.set('rpm', $('vc-rpm').value);\n        else u.searchParams.set('freq', $('vc-freq').value);\n        history.replaceState(null, '', u.toString());\n\n        \/* History *\/\n        var inputLabel = freqMode === 'rpm' ? $('vc-rpm').value + ' RPM' : $('vc-freq').value + ' Hz';\n        saveHistory({\n            mass: $('vc-mass').value,\n            freq: $('vc-freq').value,\n            rpm: $('vc-rpm').value,\n            numSprings: nSprings,\n            mode: freqMode,\n            _summary: 'm=' + $('vc-mass').value + (unitSystem === 'imperial' ? ' lb' : ' kg') + ', f=' + inputLabel + ' \u2192 k=' + fmt(kDisplay) + ' ' + stiffUnit\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-mass-unit').textContent = unitSystem === 'imperial' ? '(lb)' : '(kg)';\n            try { localStorage.setItem('vc_units', unitSystem); } catch(e) {}\n            calculate();\n        });\n    });\n\n    \/* \u2500\u2500 MODE TOGGLE \u2500\u2500 *\/\n    document.querySelectorAll('.vc-mode-btn').forEach(function(btn) {\n        btn.addEventListener('click', function(e) {\n            e.preventDefault();\n            setFreqMode(this.getAttribute('data-mode'));\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 m = parseFloat(this.getAttribute('data-m'));\n            var f = parseFloat(this.getAttribute('data-f'));\n            var mode = this.getAttribute('data-mode') || 'hz';\n            setFreqMode(mode);\n            if (unitSystem === 'imperial') {\n                $('vc-mass').value = (m * KG2LB).toFixed(1);\n            } else {\n                $('vc-mass').value = m;\n            }\n            if (mode === 'rpm') {\n                $('vc-rpm').value = f;\n            } else {\n                $('vc-freq').value = f;\n            }\n            $('vc-numSprings').value = 4;\n            calculate();\n        });\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 stiffUnit = unitSystem === 'imperial' ? 'lbf\/in' : 'N\/mm';\n        var text = 'Spring Selection 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            'Mass: ' + $('vc-mass').value + (unitSystem === 'imperial' ? ' lb' : ' kg') + '\\n' +\n            'Target Frequency: ' + $('vc-r-freq').textContent + '\\n' +\n            'Total Stiffness: ' + $('vc-r-stiffness').textContent + '\\n' +\n            'Per-Spring: ' + $('vc-r-perspring').textContent + '\\n' +\n            'Static Deflection: ' + $('vc-r-deflection').textContent + '\\n' +\n            'Angular Frequency: ' + $('vc-r-omega').textContent + '\\n' +\n            'Equivalent RPM: ' + $('vc-r-rpm').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-selection-frequency\/';\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: 'How to select springs for vibration isolation?', a: '<p>To select springs for vibration isolation, first determine the mass of the machine and the desired natural frequency of the isolation system. The natural frequency should be well below the operating frequency \u2014 typically less than 1\/3 of the lowest excitation frequency.<\/p><p>Use the formula k = m \u00d7 (2\u03c0f)\u00b2 to calculate the required total spring stiffness, then divide by the number of springs to get the stiffness per spring. Verify that the static deflection is acceptable and that the springs can support the load.<\/p>' },\n        { q: 'What is the ideal natural frequency for vibration isolation?', a: '<p>For effective vibration isolation, the natural frequency should be at most 1\/3 of the lowest operating frequency. For example, if a machine runs at 1500 RPM (25 Hz), the isolation system should have a natural frequency below about 8 Hz.<\/p><p>Lower natural frequencies provide better isolation but require softer springs and larger static deflections. Typical isolation systems target 2\u20138 Hz depending on the application.<\/p>' },\n        { q: 'Why should the natural frequency be below 1\/3 of the operating speed?', a: '<p>The transmissibility of a vibration isolation system depends on the ratio of operating frequency to natural frequency. Isolation only begins when this ratio exceeds \u221a2 \u2248 1.41.<\/p><p>At a ratio of 3 (natural frequency = 1\/3 of operating), transmissibility drops to about 12.5%, meaning 87.5% of vibration is isolated. Below \u221a2, the system actually amplifies vibrations, with the worst case at resonance (ratio = 1).<\/p>' },\n        { q: 'How many springs should I use for vibration isolation?', a: '<p>The number of springs depends on the machine size, weight distribution, and mounting configuration:<\/p><ul><li><strong>4 springs<\/strong> \u2014 most common, one at each corner for rectangular machines<\/li><li><strong>3 springs<\/strong> \u2014 triangular layouts<\/li><li><strong>6+ springs<\/strong> \u2014 large machines requiring distributed support<\/li><\/ul><p>The total required stiffness is divided equally among all springs. Ensure all springs have equal stiffness to prevent tilting.<\/p>' },\n        { q: 'What is static deflection and why does it matter?', a: '<p>Static deflection is the amount a spring compresses under the weight of the supported mass due to gravity (\u03b4 = mg\/k). It matters because:<\/p><ul><li>It determines how much the machine sinks on the springs<\/li><li>It is directly related to natural frequency \u2014 larger deflection = lower frequency = better isolation<\/li><li>The spring must have enough travel for static deflection plus dynamic motion<\/li><li>Excessive deflection can cause stability issues<\/li><\/ul><p>Typical isolation springs have 5\u201325 mm of static deflection.<\/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 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        var mode = p.get('mode');\n        if (mode === 'rpm' || mode === 'hz') setFreqMode(mode);\n    }\n\n    \/* \u2500\u2500 KATEX \u2500\u2500 *\/\n    function renderFormulas() {\n        try {\n            katex.render('k = m \\\\times (2\\\\pi f)^2 \\\\quad [\\\\text{N\/m}]', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('f = \\\\frac{\\\\text{RPM}}{60} \\\\quad [\\\\text{Hz}]', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n            katex.render('\\\\delta_{\\\\text{static}} = \\\\frac{m \\\\cdot g}{k} \\\\quad [\\\\text{mm}]', $('vc-katex-3'), { displayMode: true, throwOnError: false });\n            katex.render('k_{\\\\text{per spring}} = \\\\frac{k_{\\\\text{total}}}{n}', $('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-mass-unit').textContent = '(lb)';\n            }\n        } catch(e) {}\n\n        loadParams();\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>Calculate the required spring stiffness for a given mass and target natural frequency. Free tool for vibration isolation design and spring selection.<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100238","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/calculator\/100238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":1,"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/calculator\/100238\/revisions"}],"predecessor-version":[{"id":100553,"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/calculator\/100238\/revisions\/100553"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/media?parent=100238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/categories?post=100238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/uz\/wp-json\/wp\/v2\/tags?post=100238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}