{"id":100010,"date":"2026-02-15T20:05:54","date_gmt":"2026-02-15T20:05:54","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100010"},"modified":"2026-02-15T20:05:54","modified_gmt":"2026-02-15T20:05:54","slug":"balancing-platform","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/bn\/calculators\/balancing-platform\/","title":{"rendered":"\u09ac\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09b8\u09bf\u0982 \u09aa\u09cd\u09b2\u09cd\u09af\u09be\u099f\u09ab\u09b0\u09cd\u09ae \u09a1\u09bf\u099c\u09be\u0987\u09a8 \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0 \u2014 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0 \u09ac\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09b8\u09bf\u0982\u09af\u09bc\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09b8\u09cd\u09aa\u09cd\u09b0\u09bf\u0982 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 | \u09ac\u09bf\u09a8\u09be\u09ae\u09c2\u09b2\u09cd\u09af\u09c7 \u0985\u09a8\u09b2\u09be\u0987\u09a8 \u09b8\u09b0\u099e\u09cd\u099c\u09be\u09ae"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Balancing Platform Design Calculator\",\"alternateName\":[\"Soft Support Calculator\",\"Platform Spring Selection\"],\"description\":\"Design a balancing platform for field rotor balancing. Calculate required spring stiffness, natural frequency, static deflection, and transmissibility.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/balancing-platform-design\/\",\"applicationCategory\":\"Engineering Calculator\",\"operatingSystem\":\"Any (Web Browser)\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"EUR\"},\"creator\":{\"@type\":\"Organization\",\"name\":\"Vibromera\",\"url\":\"https:\/\/vibromera.eu\/\"},\"datePublished\":\"2025-01-01\",\"dateModified\":\"2025-06-14\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true,\"featureList\":[\"Spring stiffness calculation\",\"Natural frequency design\",\"Transmissibility analysis\",\"Metric and Imperial units\",\"Auto-calculation on input change\",\"URL parameter sharing\",\"Calculation history\"],\"keywords\":\"balancing platform, spring selection, soft support, field balancing, transmissibility\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"What is a balancing platform?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A balancing platform is a simple structure mounted on springs that supports a rotor for field balancing by allowing free vibration response at operating speed. Its natural frequency is tuned well below the rotor's operating speed.\"}},\n{\"@type\":\"Question\",\"name\":\"Why must the platform natural frequency be below operating speed?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The platform natural frequency must be well below operating speed to ensure the system operates in the isolation region, above resonance. At a frequency ratio of 3, transmissibility drops to about 12.5%.\"}},\n{\"@type\":\"Question\",\"name\":\"How to choose the number of springs for a balancing platform?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Common configurations: 4 springs for rectangular platforms, 2 for small rotors, 3 for triangular platforms, 6-8 for large heavy rotors. All springs must have equal stiffness.\"}},\n{\"@type\":\"Question\",\"name\":\"What materials are best for building a balancing platform?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Welded steel frame or plate (10-20 mm thick) is most common. Aluminum for smaller rotors. Platform mass is typically 10-25% of rotor mass.\"}},\n{\"@type\":\"Question\",\"name\":\"Can I use rubber mounts instead of springs?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, but rubber mounts have higher damping and variable stiffness. Coil springs are preferred for their consistent, well-defined stiffness and low damping.\"}}\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\":\"Balancing Platform Design\",\"item\":\"https:\/\/vibromera.eu\/calculators\/balancing-platform-design\/\"}\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.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-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; } .vc-faq-a-inner p:last-child { margin-bottom:0; }\n.vc-faq-a-inner ul { margin:4px 0 8px 16px; padding:0; } .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); } .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; } .vc-footer a:hover { text-decoration:underline; }\n.vc-footer-links { margin-top:8px; font-size:12px; } .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-platform-design\">\n\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool<\/p>\n    <h1 class=\"vc-header-title\">Balancing Platform Design Calculator<\/h1>\n    <p class=\"vc-header-subtitle\">Design a balancing platform (soft support) for field rotor balancing. Calculate the required spring stiffness, natural frequency, static deflection, and transmissibility.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">Soft Support Design<\/span>\n        <span class=\"vc-badge\">Transmissibility<\/span>\n        <span class=\"vc-badge\">2\u20138 Springs<\/span>\n    <\/div>\n<\/header>\n\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        <div class=\"vc-form-grid\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-mrotor\">Rotor Mass <span class=\"vc-label-hint vc-mass-hint\">(kg)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-mrotor\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 80\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-mplatform\">Platform Mass <span class=\"vc-label-hint vc-mass-hint\">(kg)<\/span> <span class=\"vc-label-hint\">\u2014 ~20% of rotor<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-mplatform\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 15\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-rpm\">Operating Speed <span class=\"vc-label-hint\">(RPM)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-rpm\" inputmode=\"decimal\" step=\"any\" min=\"1\" placeholder=\"e.g. 1800\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-nsprings\">Number of Springs<\/label>\n                <select class=\"vc-select\" id=\"vc-nsprings\">\n                    <option value=\"2\">2<\/option>\n                    <option value=\"3\">3<\/option>\n                    <option value=\"4\" selected>4<\/option>\n                    <option value=\"6\">6<\/option>\n                    <option value=\"8\">8<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field vc-field-full\">\n                <label class=\"vc-label\" for=\"vc-ratio\">Frequency Ratio Target<\/label>\n                <select class=\"vc-select\" id=\"vc-ratio\">\n                    <option value=\"1\/3\" selected>1\/3 (recommended)<\/option>\n                    <option value=\"1\/4\">1\/4 (better isolation)<\/option>\n                    <option value=\"1\/5\">1\/5 (best isolation)<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <div class=\"vc-presets\">\n            <div class=\"vc-presets-label\">Quick presets<\/div>\n            <button type=\"button\" class=\"vc-preset-btn\" data-mr=\"30\" data-mp=\"6\" data-rpm=\"3000\" data-ns=\"4\" data-r=\"1\/3\">Small fan 30 kg \/ 3000 RPM<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-mr=\"150\" data-mp=\"30\" data-rpm=\"1500\" data-ns=\"4\" data-r=\"1\/3\">Pump 150 kg \/ 1500 RPM<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-mr=\"500\" data-mp=\"100\" data-rpm=\"750\" data-ns=\"6\" data-r=\"1\/3\">Large rotor 500 kg \/ 750 RPM<\/button>\n        <\/div>\n    <\/form>\n\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 Stiffness per Spring<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-kper\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Total Stiffness (k_total)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-ktotal\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Platform Natural Frequency (f_n)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-fn\">\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-defl\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Transmissibility<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-trans\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Frequency Ratio (f_op \/ f_n)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-fratio\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Total Mass<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-mtotal\">\u2014<\/div>\n            <\/div>\n        <\/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 -->\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>Platform Natural Frequency<\/h3>\n            <p>The natural frequency of the platform mass-spring system:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <p>Where <strong>m<sub>total<\/sub><\/strong> = m<sub>rotor<\/sub> + m<sub>platform<\/sub> and <strong>k<sub>total<\/sub><\/strong> is the combined stiffness of all springs (N\/m).<\/p>\n\n            <h3>Required Stiffness per Spring<\/h3>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n            <p>Where <strong>n<\/strong> is the number of springs and <strong>f<sub>target<\/sub><\/strong> = RPM\/60 \u00d7 ratio (e.g. \u00d71\/3).<\/p>\n\n            <h3>Transmissibility<\/h3>\n            <p>Undamped transmissibility at operating speed:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-3\"><\/div>\n            <p>For good balancing conditions, T should be less than 15%. A frequency ratio of 3 gives T \u2248 12.5%.<\/p>\n\n            <h3>Static Deflection<\/h3>\n            <div class=\"vc-formula-box\" id=\"vc-katex-4\"><\/div>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 80 kg Rotor at 1800 RPM<\/div>\n                <p><strong>Given:<\/strong> m<sub>rotor<\/sub> = 80 kg, m<sub>platform<\/sub> = 15 kg, 1800 RPM, 4 springs, ratio 1\/3<\/p>\n                <p>m<sub>total<\/sub> = 95 kg, f<sub>op<\/sub> = 30 Hz, f<sub>target<\/sub> = 10 Hz<\/p>\n                <p>k<sub>total<\/sub> = 95 \u00d7 (2\u03c0\u00d710)\u00b2 = 375,055 N\/m = <strong>375.1 N\/mm<\/strong><\/p>\n                <p>k<sub>per spring<\/sub> = 375.1 \/ 4 = <strong>93.8 N\/mm<\/strong><\/p>\n                <p>\u03b4<sub>static<\/sub> = 95\u00d79.81 \/ 375,055 \u00d7 1000 = <strong>2.49 mm<\/strong><\/p>\n                <p>T = 1\/(3\u00b2\u22121) = <strong>12.5%<\/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 Note:<\/strong> Ensure all springs have equal stiffness and the load is centered. Unequal deflection causes tilting, which distorts vibration readings during balancing.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Related -->\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                <a class=\"vc-related-link\" href=\"\/calculators\/residual-unbalance-iso1940\/\">Residual Unbalance (ISO 1940)<\/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<div class=\"vc-promo\">\n    <div class=\"vc-promo-text\">\n        <strong>Vibromera \u2014 Portable Balancing &amp; Vibration Analysis<\/strong><br>\n        Professional field balancing instruments and software. Design your balancing platform and verify results with our portable balancers. Used in 50+ countries.\n    <\/div>\n    <a class=\"vc-promo-link\" href=\"https:\/\/vibromera.eu\/\" target=\"_blank\" rel=\"noopener\">Learn More<\/a>\n<\/div>\n\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: June 2025<\/p>\n    <div class=\"vc-footer-links\">\n        <a href=\"\/calculators\/engineering-calculators\/\">All 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 = 'balancing-platform-design';\n    var unitSystem = 'metric';\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(n, d) {\n        if (isNaN(n)) return '\u2014';\n        if (n === 0) return '0';\n        if (Math.abs(n) < 0.001) return n.toExponential(2);\n        if (d !== undefined) { var f = n.toFixed(d); return f.replace(\/(\\.\\d*?)0+$\/, '$1').replace(\/\\.$\/, ''); }\n        if (Math.abs(n) < 1) return n.toFixed(4);\n        if (Math.abs(n) < 10) return n.toFixed(3);\n        if (Math.abs(n) < 100) return n.toFixed(2);\n        if (Math.abs(n) < 10000) return n.toFixed(1);\n        return Math.round(n).toLocaleString('en-US');\n    }\n\n    function parseRatio(str) {\n        if (str === '1\/3') return 1\/3;\n        if (str === '1\/4') return 1\/4;\n        if (str === '1\/5') return 1\/5;\n        return 1\/3;\n    }\n\n    \/* \u2500\u2500 AUTO-FILL PLATFORM MASS \u2500\u2500 *\/\n    $('vc-mrotor').addEventListener('blur', function() {\n        var mp = $('vc-mplatform');\n        if (!mp.value || mp.value === '0') {\n            var mr = parseFloat(this.value);\n            if (mr > 0) mp.value = (mr * 0.2).toFixed(1);\n        }\n    });\n\n    \/* \u2500\u2500 CALCULATION \u2500\u2500 *\/\n    function calculate() {\n        var mRotorVal = parseFloat($('vc-mrotor').value);\n        var mPlatVal = parseFloat($('vc-mplatform').value);\n        var rpmVal = parseFloat($('vc-rpm').value);\n\n        if (!mRotorVal || mRotorVal <= 0 || !rpmVal || rpmVal <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n        if (isNaN(mPlatVal) || mPlatVal < 0) mPlatVal = 0;\n\n        var nSprings = parseInt($('vc-nsprings').value) || 4;\n        var ratioStr = $('vc-ratio').value;\n        var ratio = parseRatio(ratioStr);\n\n        \/* Convert to metric (kg) *\/\n        var mRotorKg = unitSystem === 'imperial' ? mRotorVal \/ KG2LB : mRotorVal;\n        var mPlatKg = unitSystem === 'imperial' ? mPlatVal \/ KG2LB : mPlatVal;\n        var mTotalKg = mRotorKg + mPlatKg;\n\n        \/* Core calculations *\/\n        var fOp = rpmVal \/ 60;\n        var fTarget = fOp * ratio;\n        var omega = 2 * Math.PI * fTarget;\n        var kTotalNm = mTotalKg * omega * omega;\n        var kTotalNmm = kTotalNm \/ 1000;\n        var kPerSpringNmm = kTotalNmm \/ nSprings;\n        var deflMm = mTotalKg * G \/ kTotalNm * 1000;\n\n        var fNatural = Math.sqrt(kTotalNm \/ mTotalKg) \/ (2 * Math.PI);\n        var freqRatioAchieved = fOp \/ fNatural;\n        var T = 1 \/ (freqRatioAchieved * freqRatioAchieved - 1);\n        var Tpct = T * 100;\n\n        \/* Display in user units *\/\n        var stiffUnit, deflUnit, massUnit;\n        var kPerDisplay, kTotalDisplay, deflDisplay, mTotalDisplay;\n        if (unitSystem === 'imperial') {\n            stiffUnit = 'lbf\/in'; deflUnit = 'in'; massUnit = 'lb';\n            kPerDisplay = kPerSpringNmm * NMM2LBFIN;\n            kTotalDisplay = kTotalNmm * NMM2LBFIN;\n            deflDisplay = deflMm \/ MM2IN;\n            mTotalDisplay = mTotalKg * KG2LB;\n        } else {\n            stiffUnit = 'N\/mm'; deflUnit = 'mm'; massUnit = 'kg';\n            kPerDisplay = kPerSpringNmm;\n            kTotalDisplay = kTotalNmm;\n            deflDisplay = deflMm;\n            mTotalDisplay = mTotalKg;\n        }\n\n        $('vc-r-kper').innerHTML = fmt(kPerDisplay) + ' <span class=\"vc-rcard-unit\">' + stiffUnit + '<\/span>';\n        $('vc-r-ktotal').innerHTML = fmt(kTotalDisplay) + ' <span class=\"vc-rcard-unit\">' + stiffUnit + '<\/span>';\n        $('vc-r-fn').innerHTML = fmt(fNatural) + ' <span class=\"vc-rcard-unit\">Hz<\/span> <span class=\"vc-rcard-unit\">(' + fmt(fNatural * 60, 0) + ' RPM)<\/span>';\n        $('vc-r-defl').innerHTML = fmt(deflDisplay) + ' <span class=\"vc-rcard-unit\">' + deflUnit + '<\/span>';\n        $('vc-r-trans').innerHTML = fmt(Tpct, 1) + '<span class=\"vc-rcard-unit\">%<\/span>' + (Tpct <= 15 ? ' <span class=\"vc-rcard-unit\">\u2714<\/span>' : ' <span class=\"vc-rcard-unit\">\u26a0 lower ratio<\/span>');\n        $('vc-r-fratio').innerHTML = fmt(freqRatioAchieved, 2) + '<span class=\"vc-rcard-unit\">:1<\/span>';\n        $('vc-r-mtotal').innerHTML = fmt(mTotalDisplay) + ' <span class=\"vc-rcard-unit\">' + massUnit + '<\/span>';\n\n        $('vc-results').classList.add('vc-visible');\n        drawViz(nSprings, fNatural, fOp, freqRatioAchieved);\n\n        \/* URL params *\/\n        var u = new URL(window.location);\n        u.searchParams.set('mRotor', $('vc-mrotor').value);\n        u.searchParams.set('mPlatform', $('vc-mplatform').value);\n        u.searchParams.set('rpm', $('vc-rpm').value);\n        u.searchParams.set('nSprings', nSprings);\n        u.searchParams.set('ratio', ratioStr);\n        history.replaceState(null, '', u.toString());\n\n        \/* History *\/\n        saveHistory({\n            mRotor: $('vc-mrotor').value,\n            mPlatform: $('vc-mplatform').value,\n            rpm: $('vc-rpm').value,\n            nSprings: nSprings,\n            ratio: ratioStr,\n            _summary: fmt(mTotalDisplay) + ' ' + massUnit + ', ' + rpmVal + ' RPM, ' + nSprings + ' spr \u2192 ' + fmt(kPerDisplay) + ' ' + stiffUnit + '\/spr'\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            document.querySelectorAll('.vc-mass-hint').forEach(function(el) {\n                el.textContent = unitSystem === 'imperial' ? '(lb)' : '(kg)';\n            });\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 mr = parseFloat(this.getAttribute('data-mr'));\n            var mp = parseFloat(this.getAttribute('data-mp'));\n            $('vc-mrotor').value = unitSystem === 'imperial' ? fmt(mr * KG2LB, 1) : mr;\n            $('vc-mplatform').value = unitSystem === 'imperial' ? fmt(mp * KG2LB, 1) : mp;\n            $('vc-rpm').value = this.getAttribute('data-rpm');\n            $('vc-nsprings').value = this.getAttribute('data-ns');\n            $('vc-ratio').value = this.getAttribute('data-r');\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 text = 'Balancing Platform Design 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            'Rotor Mass: ' + $('vc-mrotor').value + (unitSystem === 'imperial' ? ' lb' : ' kg') + '\\n' +\n            'Platform Mass: ' + $('vc-mplatform').value + (unitSystem === 'imperial' ? ' lb' : ' kg') + '\\n' +\n            'Speed: ' + $('vc-rpm').value + ' RPM\\n' +\n            'Springs: ' + $('vc-nsprings').value + '\\n' +\n            'k per spring: ' + $('vc-r-kper').textContent + '\\n' +\n            'f_n: ' + $('vc-r-fn').textContent + '\\n' +\n            'Static deflection: ' + $('vc-r-defl').textContent + '\\n' +\n            'Transmissibility: ' + $('vc-r-trans').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\/balancing-platform-design\/';\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 a balancing platform?', a: '<p>A balancing platform (soft support) is a simple structure \u2014 typically a steel frame or plate \u2014 mounted on springs. It supports a rotor for field balancing by allowing free vibration response at operating speed. The platform\\'s natural frequency is tuned well below operating speed (typically \u2264 1\/3).<\/p>' },\n        { q: 'Why must the platform natural frequency be below operating speed?', a: '<p>The natural frequency must be well below operating speed to ensure the system operates in the isolation region \u2014 above the resonance peak. At a frequency ratio of 3, transmissibility drops to about 12.5%, meaning the rotor vibrates freely and the balancing instrument can accurately detect unbalance.<\/p>' },\n        { q: 'How to choose the number of springs?', a: '<p>Common configurations:<\/p><ul><li><strong>4 springs<\/strong> \u2014 most common, one at each corner<\/li><li><strong>2 springs<\/strong> \u2014 small, lightweight rotors<\/li><li><strong>3 springs<\/strong> \u2014 triangular platforms<\/li><li><strong>6\u20138 springs<\/strong> \u2014 large, heavy rotors<\/li><\/ul><p>All springs must have equal stiffness and the load must be centered.<\/p>' },\n        { q: 'What materials are best for the platform?', a: '<p>Welded steel frame or plate (10\u201320 mm thick) is most common. Aluminum for smaller rotors. Platform mass is typically 10\u201325% of rotor mass. Ensure the platform is flat and all spring mounting points are at equal height.<\/p>' },\n        { q: 'Can I use rubber mounts instead of springs?', a: '<p>Yes, but rubber mounts have higher damping (reducing measurement precision), and stiffness varies with temperature and load history. Coil springs are preferred for their consistent, well-defined stiffness and low damping. Dynamic rubber stiffness is typically 1.3\u20132\u00d7 higher than static stiffness.<\/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(nSprings, fN, fOp, freqRatio) {\n        var c = $('vc-viz'), W = 400, H = 180;\n        var svg = '<svg width=\"'+W+'\" height=\"'+H+'\" viewBox=\"0 0 '+W+' '+H+'\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">';\n        var cx = W \/ 2, baseY = H - 30;\n        var platW = 180, platH = 12, rotorR = 25;\n        \/\/ Springs (zigzag)\n        var springH = 45, springW = 12;\n        var springX = [];\n        for (var i = 0; i < nSprings; i++) {\n            springX.push(cx - platW \/ 2 + 20 + i * (platW - 40) \/ Math.max(1, nSprings - 1));\n        }\n        if (nSprings === 1) springX = [cx];\n        \/\/ Base\n        svg += '<rect x=\"'+(cx - platW \/ 2 - 15)+'\" y=\"'+baseY+'\" width=\"'+(platW + 30)+'\" height=\"8\" rx=\"2\" fill=\"#d9d4cc\" stroke=\"#8a857e\" stroke-width=\"1\"\/>';\n        \/\/ Springs\n        springX.forEach(function(sx) {\n            var sy0 = baseY, sy1 = baseY - springH;\n            var pts = 'M'+sx+' '+sy0;\n            var nz = 5;\n            for (var j = 0; j <= nz; j++) {\n                var ty = sy0 - (j \/ nz) * springH;\n                var tx = sx + ((j % 2 === 0) ? -springW \/ 2 : springW \/ 2);\n                pts += ' L'+tx+' '+ty;\n            }\n            svg += '<path d=\"'+pts+'\" fill=\"none\" stroke=\"#3578b2\" stroke-width=\"2\" stroke-linecap=\"round\"\/>';\n        });\n        \/\/ Platform\n        var platY = baseY - springH - platH;\n        svg += '<rect x=\"'+(cx - platW \/ 2)+'\" y=\"'+platY+'\" width=\"'+platW+'\" height=\"'+platH+'\" rx=\"3\" fill=\"#e0e7ef\" stroke=\"#7b8fa3\" stroke-width=\"1.5\"\/>';\n        \/\/ Rotor (circle on platform)\n        svg += '<circle cx=\"'+cx+'\" cy=\"'+(platY - rotorR)+'\" r=\"'+rotorR+'\" fill=\"#d4e6f9\" stroke=\"#3578b2\" stroke-width=\"1.5\"\/>';\n        svg += '<line x1=\"'+cx+'\" y1=\"'+(platY - rotorR)+'\" x2=\"'+(cx + rotorR * 0.7)+'\" y2=\"'+(platY - rotorR - rotorR * 0.7)+'\" stroke=\"#3578b2\" stroke-width=\"1.5\"\/>';\n        \/\/ Frequency ratio box\n        var frText = 'f_op\/f_n = ' + freqRatio.toFixed(1) + ':1';\n        var fnText = 'f_n = ' + fN.toFixed(1) + ' Hz, f_op = ' + fOp.toFixed(1) + ' Hz';\n        svg += '<text x=\"'+cx+'\" y=\"16\" text-anchor=\"middle\" fill=\"#2c3e50\" font-size=\"11\" font-weight=\"600\">'+frText+'<\/text>';\n        svg += '<text x=\"'+cx+'\" y=\"'+(H - 6)+'\" text-anchor=\"middle\" fill=\"#8a857e\" font-size=\"9\">'+fnText+' | '+nSprings+' springs<\/text>';\n        \/\/ Labels\n        svg += '<text x=\"'+cx+'\" y=\"'+(platY - rotorR + 4)+'\" text-anchor=\"middle\" fill=\"#3578b2\" font-size=\"10\" font-weight=\"600\">Rotor<\/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        var map = { mRotor: 'vc-mrotor', mPlatform: 'vc-mplatform', rpm: 'vc-rpm', nSprings: 'vc-nsprings', ratio: 'vc-ratio' };\n        Object.keys(map).forEach(function(k) {\n            var v = p.get(k);\n            if (v) $(map[k]).value = v;\n        });\n    }\n\n    \/* \u2500\u2500 KATEX \u2500\u2500 *\/\n    function renderFormulas() {\n        try {\n            katex.render('f_{platform} = \\\\frac{1}{2\\\\pi}\\\\sqrt{\\\\frac{k_{total}}{m_{total}}}', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('k_{per\\\\,spring} = \\\\frac{m_{total} \\\\cdot (2\\\\pi f_{target})^2}{n}', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n            katex.render('T = \\\\frac{1}{\\\\left(\\\\frac{f_{op}}{f_n}\\\\right)^2 - 1}', $('vc-katex-3'), { displayMode: true, throwOnError: false });\n            katex.render('\\\\delta_{static} = \\\\frac{m_{total} \\\\cdot g}{k_{total}} \\\\times 1000 \\\\quad [\\\\text{mm}]', $('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                document.querySelectorAll('.vc-mass-hint').forEach(function(el) { el.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>\u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0 \u09b0\u09cb\u099f\u09b0 \u09ac\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09b8\u09bf\u0982\u09af\u09bc\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u09ac\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09b8\u09bf\u0982 \u09aa\u09cd\u09b2\u09cd\u09af\u09be\u099f\u09ab\u09b0\u09cd\u09ae \u09a1\u09bf\u099c\u09be\u0987\u09a8 \u0995\u09b0\u09c1\u09a8\u0964 \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc \u09b8\u09cd\u09aa\u09cd\u09b0\u09bf\u0982 \u0995\u09a0\u09cb\u09b0\u09a4\u09be, \u09aa\u09cd\u09b0\u09be\u0995\u09c3\u09a4\u09bf\u0995 \u09ab\u09cd\u09b0\u09bf\u0995\u09cb\u09af\u09bc\u09c7\u09a8\u09cd\u09b8\u09bf \u098f\u09ac\u0982 \u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09bf\u0995 \u09a1\u09bf\u09ab\u09cd\u09b2\u09c7\u0995\u09b6\u09a8 \u0997\u09a3\u09a8\u09be \u0995\u09b0\u09c1\u09a8 \u09af\u09be\u09a4\u09c7 \u09b8\u09a0\u09bf\u0995 \u0995\u09ae\u09cd\u09aa\u09a8 \u09ac\u09bf\u099a\u09cd\u099b\u09bf\u09a8\u09cd\u09a8\u09a4\u09be \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u09b9\u09af\u09bc\u0964<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100010","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100010","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\/100010\/revisions"}],"predecessor-version":[{"id":100324,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100010\/revisions\/100324"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/media?parent=100010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/categories?post=100010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/tags?post=100010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}