{"id":100036,"date":"2026-02-15T20:07:38","date_gmt":"2026-02-15T20:07:38","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100036"},"modified":"2026-02-15T20:07:38","modified_gmt":"2026-02-15T20:07:38","slug":"blade-correction-calculator","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/pt_br\/calculators\/blade-correction-calculator\/","title":{"rendered":"Calculadora de corre\u00e7\u00e3o de p\u00e1s | Posi\u00e7\u00f5es fixas | Ventilador e impulsor"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Blade Correction Calculator\",\"alternateName\":[\"Fixed Position Balancing\",\"Bolt Hole Balancing Calculator\",\"Fan Blade Balancing\"],\"description\":\"Free online calculator to decompose a correction mass at an arbitrary angle into masses at two adjacent fixed blade or bolt positions. Supports 4 to 20 evenly spaced positions.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/blade-correction-calculator\/\",\"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-02-14\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true,\"featureList\":[\"4 to 20 blade\/bolt positions\",\"Visual position diagram\",\"Moment balance decomposition\",\"Auto-calculation on input change\",\"URL parameter sharing\"],\"keywords\":\"blade correction, fixed position, fan balancing, impeller, bolt hole, moment balance\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"Why use fixed positions for balancing?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Many rotating components like fans, impellers, and turbines have fixed blade or bolt positions where correction weights can be attached. Unlike a smooth drum where weights can be placed at any angle, these rotors limit placement to discrete positions. The blade correction method mathematically decomposes the required correction into two masses at the nearest available positions.\"}},\n{\"@type\":\"Question\",\"name\":\"How does the calculator find the adjacent positions?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The positions are evenly spaced at 360\/N degrees. The calculator finds the two positions that bracket the required correction angle. For example, with 6 blades (60\u00b0 spacing) and a correction at 40\u00b0, the adjacent positions are blade 1 (0\u00b0) and blade 2 (60\u00b0).\"}},\n{\"@type\":\"Question\",\"name\":\"What if the correction falls exactly on a blade position?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"If the correction angle coincides exactly with a blade position, all the correction mass goes to that single position and the other adjacent position gets zero mass. The calculator handles this automatically.\"}},\n{\"@type\":\"Question\",\"name\":\"How do I balance a fan with fixed blades?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Steps: 1) Measure the initial vibration. 2) Calculate the required correction mass and angle (using influence coefficient or trial weight methods). 3) Use this calculator to split the correction into two adjacent blade positions. 4) Attach the calculated masses to the specified blades. 5) Verify with a final vibration measurement.\"}},\n{\"@type\":\"Question\",\"name\":\"Should I add mass or remove mass from blades?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Both approaches work. Adding mass (welding, bolting, or clipping weights) is placed at the calculated angle. Removing mass (grinding, drilling) is done 180\u00b0 opposite to the calculated angle. For blade tips, adding small weights or grinding material are both common. The choice depends on the blade construction and operating conditions.\"}}\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\":\"Blade Correction Calculator\",\"item\":\"https:\/\/vibromera.eu\/calculators\/blade-correction-calculator\/\"}\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\/* \u2500\u2500 HEADER \u2500\u2500 *\/\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\/* \u2500\u2500 CARD \u2500\u2500 *\/\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\/* \u2500\u2500 FORM \u2500\u2500 *\/\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\/* \u2500\u2500 PRESETS \u2500\u2500 *\/\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\/* \u2500\u2500 RESULTS \u2500\u2500 *\/\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:3000px; 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\/* \u2500\u2500 DIAGRAM \u2500\u2500 *\/\n.vc-diagram-wrap { display:flex; justify-content:center; margin:16px 0 8px; }\n.vc-diagram-wrap svg { max-width:320px; width:100%; height:auto; }\n\n\/* \u2500\u2500 COLLAPSIBLE SECTIONS \u2500\u2500 *\/\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\/* \u2500\u2500 THEORY \u2500\u2500 *\/\n.vc-theory h3 { font-family:var(--vc-display); font-size:17px; font-weight:700; color:var(--vc-ink); margin:28px 0 10px; }\n.vc-theory h3:first-child { margin-top:20px; }\n.vc-theory p { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 10px; }\n.vc-theory ul, .vc-theory ol { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 12px 18px; padding:0; }\n.vc-theory li { margin-bottom:5px; }\n.vc-formula-box { background:var(--vc-surface-alt); border:2px solid var(--vc-border); border-radius:6px; padding:14px 20px; font-family:var(--vc-mono); font-size:16px; font-weight:500; text-align:center; margin:14px 0; color:var(--vc-ink); overflow-x:auto; }\n.vc-info-box { background:var(--vc-blue-light); border-left:3px solid var(--vc-blue); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-info-box p { margin:0; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-warning-box { background:var(--vc-yellow-light); border-left:3px solid var(--vc-yellow); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-example-box { background:var(--vc-surface-alt); border:1px solid var(--vc-border-light); border-radius:6px; padding:16px; margin:14px 0; }\n.vc-example-title { font-family:var(--vc-mono); font-size:13px; font-weight:600; color:var(--vc-accent); margin-bottom:8px; }\n.vc-table { width:100%; border-collapse:collapse; margin:14px 0; font-size:13px; }\n.vc-table th, .vc-table td { padding:10px 12px; border:1px solid var(--vc-border-light); text-align:left; }\n.vc-table th { background:var(--vc-surface-alt); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:0.05em; color:var(--vc-ink-secondary); }\n.vc-table tr:nth-child(even) { background:var(--vc-surface-alt); }\n@media(max-width:600px) { .vc-table { font-size:12px; } .vc-table th, .vc-table td { padding:8px; } }\n\n\/* \u2500\u2500 FAQ \u2500\u2500 *\/\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\/* \u2500\u2500 RELATED \u2500\u2500 *\/\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\/* \u2500\u2500 PROMO \u2500\u2500 *\/\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\/* \u2500\u2500 FOOTER \u2500\u2500 *\/\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\/* \u2500\u2500 PRINT \u2500\u2500 *\/\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-blade-correction\">\n\n<!-- Header -->\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool \u2014 #012<\/p>\n    <h1 class=\"vc-header-title\">Blade Correction Calculator<\/h1>\n    <p class=\"vc-header-subtitle\">Decompose a correction mass at any angle into two masses at adjacent fixed blade or bolt positions. For fans, impellers, and turbines with evenly spaced positions.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">Fixed Positions<\/span>\n        <span class=\"vc-badge\">Fan &amp; Impeller<\/span>\n        <span class=\"vc-badge\">4\u201320 Blades<\/span>\n    <\/div>\n<\/header>\n\n<!-- Calculator Card -->\n<div class=\"vc-card\">\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-positions\">Number of Positions <span class=\"vc-label-hint\">(blades\/bolts)<\/span><\/label>\n                <select class=\"vc-select\" id=\"vc-positions\">\n                    <option value=\"4\">4 positions (90\u00b0)<\/option>\n                    <option value=\"5\">5 positions (72\u00b0)<\/option>\n                    <option value=\"6\" selected>6 positions (60\u00b0)<\/option>\n                    <option value=\"8\">8 positions (45\u00b0)<\/option>\n                    <option value=\"10\">10 positions (36\u00b0)<\/option>\n                    <option value=\"12\">12 positions (30\u00b0)<\/option>\n                    <option value=\"16\">16 positions (22.5\u00b0)<\/option>\n                    <option value=\"20\">20 positions (18\u00b0)<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-mass\">Correction Mass <span class=\"vc-label-hint\">(g)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-mass\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 15\" value=\"15\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-angle\">Correction Angle <span class=\"vc-label-hint\">(degrees)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-angle\" inputmode=\"decimal\" step=\"any\" placeholder=\"e.g. 40\" value=\"40\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-radius\">Correction Radius <span class=\"vc-label-hint\">(mm, same for all)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-radius\" inputmode=\"decimal\" step=\"any\" min=\"0.1\" placeholder=\"e.g. 250\" value=\"250\">\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-n=\"6\" data-m=\"15\" data-a=\"40\" data-r=\"250\">6 blades, 15g@40\u00b0<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-n=\"8\" data-m=\"20\" data-a=\"110\" data-r=\"200\">8 bolts, 20g@110\u00b0<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-n=\"12\" data-m=\"10\" data-a=\"285\" data-r=\"300\">12 blades, 10g@285\u00b0<\/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\">Mass at Position A<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-ma\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Position A<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-posa\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Mass at Position B<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-mb\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Position B<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-posb\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Unbalance Check<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-ucheck\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Angular Spacing<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-spacing\">\u2014<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Visual Diagram -->\n        <div class=\"vc-diagram-wrap\" id=\"vc-diagram\"><\/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>Fixed-Position Decomposition<\/h3>\n            <p>When correction weights can only be placed at fixed angular positions (blades, bolts), the required correction at angle \u03b8 is decomposed into two adjacent positions \u03b8_a and \u03b8_b using moment balance:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n\n            <h3>Position Layout<\/h3>\n            <p>Positions are evenly spaced at <strong>360\u00b0 \/ N<\/strong> intervals, numbered 1 to N starting from 0\u00b0:<\/p>\n            <table class=\"vc-table\">\n                <thead><tr><th>N Positions<\/th><th>Spacing<\/th><th>Max Error<\/th><\/tr><\/thead>\n                <tbody>\n                    <tr><td>4<\/td><td>90\u00b0<\/td><td>45\u00b0<\/td><\/tr>\n                    <tr><td>6<\/td><td>60\u00b0<\/td><td>30\u00b0<\/td><\/tr>\n                    <tr><td>8<\/td><td>45\u00b0<\/td><td>22.5\u00b0<\/td><\/tr>\n                    <tr><td>12<\/td><td>30\u00b0<\/td><td>15\u00b0<\/td><\/tr>\n                    <tr><td>20<\/td><td>18\u00b0<\/td><td>9\u00b0<\/td><\/tr>\n                <\/tbody>\n            <\/table>\n\n            <div class=\"vc-info-box\">\n                <p><strong>\u2139\ufe0f Note:<\/strong> More positions means smaller angular spacing and better approximation. With 12+ positions, the correction is very close to continuous placement.<\/p>\n            <\/div>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 6 Blades, 15g at 40\u00b0<\/div>\n                <p><strong>Given:<\/strong> 6 blades (60\u00b0 spacing), correction = 15g at 40\u00b0<\/p>\n                <p>Adjacent positions: Blade 1 at 0\u00b0, Blade 2 at 60\u00b0<\/p>\n                <p>m_a = 15 \u00d7 sin(60\u00b0 \u2212 40\u00b0) \/ sin(60\u00b0 \u2212 0\u00b0) = 15 \u00d7 sin(20\u00b0) \/ sin(60\u00b0) = 15 \u00d7 0.342 \/ 0.866 = <strong>5.92 g<\/strong> at 0\u00b0<\/p>\n                <p>m_b = 15 \u00d7 sin(40\u00b0 \u2212 0\u00b0) \/ sin(60\u00b0 \u2212 0\u00b0) = 15 \u00d7 sin(40\u00b0) \/ sin(60\u00b0) = 15 \u00d7 0.643 \/ 0.866 = <strong>11.13 g<\/strong> at 60\u00b0<\/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> The sum of m_a + m_b will generally be slightly more than the original correction mass. This is normal \u2014 the excess compensates for the angular offset. The vector sum equals the original correction exactly.<\/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\/residual-unbalance-iso1940\/\">Residual Unbalance (ISO 1940)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/influence-coefficient-calculator\/\">Influence Coefficient<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/correction-mass-decomposition\/\">Correction Mass Decomposition<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/rotor-critical-speed\/\">Rotor Critical Speed<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/trial-weight-calculator\/\">Trial Weight Calculator<\/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 Portable Balancing &amp; Vibration Analysis<\/strong><br>\n        Balance fans, impellers, and turbines on-site with built-in blade correction. Professional instruments 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 -->\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;\">Blade\/bolt fixed-position correction. Last updated: February 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 = 'blade-correction-calculator';\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(n, d) { if (isNaN(n) || !isFinite(n)) return '\u2014'; var f = n.toFixed(d === undefined ? 2 : d); return f.replace(\/(\\.\\d*?)0+$\/, '$1').replace(\/\\.$\/, ''); }\n    function deg2rad(d) { return d * Math.PI \/ 180; }\n    function normAngle(a) { a = a % 360; if (a < 0) a += 360; return a; }\n\n    \/* \u2500\u2500 CALCULATION \u2500\u2500 *\/\n    function calculate() {\n        var N = parseInt($('vc-positions').value);\n        var mCorr = parseFloat($('vc-mass').value);\n        var angle = parseFloat($('vc-angle').value);\n        var R = parseFloat($('vc-radius').value);\n\n        if (isNaN(N) || N < 2 || isNaN(mCorr) || mCorr <= 0 || isNaN(angle) || isNaN(R) || R <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        var spacing = 360 \/ N;\n        var angleNorm = normAngle(angle);\n\n        \/\/ Find adjacent positions\n        var posA_idx = Math.floor(angleNorm \/ spacing);\n        var posB_idx = (posA_idx + 1) % N;\n        var thetaA = posA_idx * spacing;\n        var thetaB = posB_idx * spacing;\n\n        \/\/ Handle wrap-around: if thetaB < thetaA (crossing 0\u00b0), add 360 to thetaB for calculation\n        var thetaB_calc = thetaB <= thetaA ? thetaB + 360 : thetaB;\n        var angleCalc = angleNorm;\n        if (angleCalc < thetaA) angleCalc += 360;\n\n        var dAB = thetaB_calc - thetaA; \/\/ Always = spacing\n        var dTheta_fromA = angleCalc - thetaA;\n\n        var mA, mB;\n        if (dAB < 0.001) {\n            \/\/ Exactly on a position\n            mA = mCorr;\n            mB = 0;\n        } else {\n            \/\/ Moment balance: m_a = m * sin(\u03b8_b - \u03b8) \/ sin(\u03b8_b - \u03b8_a)\n            mA = mCorr * Math.sin(deg2rad(dAB - dTheta_fromA)) \/ Math.sin(deg2rad(dAB));\n            mB = mCorr * Math.sin(deg2rad(dTheta_fromA)) \/ Math.sin(deg2rad(dAB));\n        }\n\n        \/\/ Ensure non-negative (numerical safety)\n        if (mA < 0) mA = 0;\n        if (mB < 0) mB = 0;\n\n        \/\/ Display\n        $('vc-r-ma').innerHTML = fmt(mA, 2) + ' <span class=\"vc-rcard-unit\">g<\/span>';\n        $('vc-r-posa').innerHTML = '#' + (posA_idx + 1) + ' <span class=\"vc-rcard-unit\">at ' + fmt(thetaA, 1) + '\u00b0<\/span>';\n        $('vc-r-mb').innerHTML = fmt(mB, 2) + ' <span class=\"vc-rcard-unit\">g<\/span>';\n        $('vc-r-posb').innerHTML = '#' + (posB_idx + 1) + ' <span class=\"vc-rcard-unit\">at ' + fmt(normAngle(thetaB), 1) + '\u00b0<\/span>';\n\n        \/\/ Unbalance check\n        var uA = mA * R;\n        var uB = mB * R;\n        $('vc-r-ucheck').innerHTML = fmt(uA + uB, 1) + ' <span class=\"vc-rcard-unit\">g\u00b7mm (scalar sum)<\/span>';\n        $('vc-r-spacing').innerHTML = fmt(spacing, 1) + '<span class=\"vc-rcard-unit\">\u00b0 per position<\/span>';\n\n        \/\/ Draw diagram\n        drawDiagram(N, angleNorm, posA_idx, posB_idx, mA, mB, mCorr);\n\n        $('vc-results').classList.add('vc-visible');\n\n        \/\/ URL params\n        var u = new URL(window.location);\n        u.searchParams.set('n', N); u.searchParams.set('m', mCorr);\n        u.searchParams.set('a', angle); u.searchParams.set('r', R);\n        history.replaceState(null, '', u.toString());\n\n        saveHistory({\n            n: N, m: mCorr, a: angle, r: R,\n            _summary: N + ' pos, ' + mCorr + 'g@' + fmt(angle, 0) + '\u00b0 \u2192 #' + (posA_idx + 1) + ':' + fmt(mA, 1) + 'g + #' + (posB_idx + 1) + ':' + fmt(mB, 1) + 'g'\n        });\n    }\n\n    \/* \u2500\u2500 DRAW DIAGRAM \u2500\u2500 *\/\n    function drawDiagram(N, corrAngle, idxA, idxB, mA, mB, mTotal) {\n        var size = 320;\n        var cx = size \/ 2;\n        var cy = size \/ 2;\n        var r = 120;\n        var rLabel = r + 28;\n\n        var svg = '<svg viewBox=\"0 0 ' + size + ' ' + size + '\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">';\n\n        \/\/ Background circle\n        svg += '<circle cx=\"' + cx + '\" cy=\"' + cy + '\" r=\"' + r + '\" fill=\"none\" stroke=\"#d9d4cc\" stroke-width=\"1.5\" stroke-dasharray=\"4,3\"\/>';\n        svg += '<circle cx=\"' + cx + '\" cy=\"' + cy + '\" r=\"3\" fill=\"#8a857e\"\/>';\n\n        \/\/ Position dots and labels\n        for (var i = 0; i < N; i++) {\n            var ang = deg2rad(i * 360 \/ N - 90); \/\/ -90 so 0\u00b0 is at top\n            var px = cx + r * Math.cos(ang);\n            var py = cy + r * Math.sin(ang);\n            var lx = cx + rLabel * Math.cos(ang);\n            var ly = cy + rLabel * Math.sin(ang);\n\n            var isA = i === idxA;\n            var isB = i === idxB;\n            var dotColor = (isA || isB) ? '#c85a2a' : '#8a857e';\n            var dotR = (isA || isB) ? 7 : 4;\n\n            svg += '<circle cx=\"' + px.toFixed(1) + '\" cy=\"' + py.toFixed(1) + '\" r=\"' + dotR + '\" fill=\"' + dotColor + '\"\/>';\n\n            var label = (i + 1).toString();\n            if (isA) label += ' (' + fmt(mA, 1) + 'g)';\n            if (isB) label += ' (' + fmt(mB, 1) + 'g)';\n\n            var fontSize = (isA || isB) ? '10' : '9';\n            var fontWeight = (isA || isB) ? '700' : '400';\n            var textColor = (isA || isB) ? '#c85a2a' : '#5a5650';\n\n            svg += '<text x=\"' + lx.toFixed(1) + '\" y=\"' + (ly + 3).toFixed(1) + '\" text-anchor=\"middle\" font-family=\"\\'DM Sans\\', sans-serif\" font-size=\"' + fontSize + '\" font-weight=\"' + fontWeight + '\" fill=\"' + textColor + '\">' + label + '<\/text>';\n        }\n\n        \/\/ Correction arrow\n        var corrAng = deg2rad(corrAngle - 90);\n        var ax = cx + (r - 15) * Math.cos(corrAng);\n        var ay = cy + (r - 15) * Math.sin(corrAng);\n        svg += '<line x1=\"' + cx + '\" y1=\"' + cy + '\" x2=\"' + ax.toFixed(1) + '\" y2=\"' + ay.toFixed(1) + '\" stroke=\"#2a7a4b\" stroke-width=\"2\" stroke-dasharray=\"6,3\"\/>';\n        svg += '<circle cx=\"' + ax.toFixed(1) + '\" cy=\"' + ay.toFixed(1) + '\" r=\"4\" fill=\"#2a7a4b\"\/>';\n        var alx = cx + (r - 6) * Math.cos(corrAng);\n        var aly = cy + (r - 6) * Math.sin(corrAng);\n        svg += '<text x=\"' + alx.toFixed(1) + '\" y=\"' + (aly + 3).toFixed(1) + '\" text-anchor=\"middle\" font-family=\"\\'DM Sans\\', sans-serif\" font-size=\"9\" font-weight=\"600\" fill=\"#2a7a4b\">' + fmt(mTotal, 1) + 'g<\/text>';\n\n        svg += '<\/svg>';\n        $('vc-diagram').innerHTML = svg;\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            $('vc-positions').value = this.getAttribute('data-n');\n            $('vc-mass').value = this.getAttribute('data-m');\n            $('vc-angle').value = this.getAttribute('data-a');\n            $('vc-radius').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 = 'Blade Correction 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            'Positions: ' + $('vc-positions').value + '\\n' +\n            'Correction: ' + $('vc-mass').value + 'g @ ' + $('vc-angle').value + '\u00b0\\n' +\n            'Radius: ' + $('vc-radius').value + ' mm\\n' +\n            '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\\n' +\n            'Position A: ' + $('vc-r-posa').textContent + ' \u2192 ' + $('vc-r-ma').textContent + '\\n' +\n            'Position B: ' + $('vc-r-posb').textContent + ' \u2192 ' + $('vc-r-mb').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\/blade-correction-calculator\/';\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: 'Why use fixed positions for balancing?', a: '<p>Many rotating components have fixed locations where weights can be attached:<\/p><ul><li><strong>Fan blades<\/strong> \u2014 weights added to blade tips or roots<\/li><li><strong>Impeller vanes<\/strong> \u2014 material added or removed from vanes<\/li><li><strong>Bolt holes<\/strong> \u2014 washers or weights under bolts<\/li><li><strong>Turbine buckets<\/strong> \u2014 balance weights in specific slots<\/li><\/ul><p>Unlike a smooth drum, these rotors don\\'t allow arbitrary angular placement. The blade correction method calculates the optimal masses at the two nearest positions.<\/p>' },\n        { q: 'How does the calculator find adjacent positions?', a: '<p>Positions are numbered 1 to N, evenly spaced at 360\u00b0\/N intervals starting from 0\u00b0. The calculator:<\/p><ul><li>Normalizes the correction angle to 0\u2013360\u00b0<\/li><li>Finds which two adjacent positions bracket the angle<\/li><li>Applies the moment balance formula to split the mass<\/li><\/ul><p>For example, with 6 blades and a 40\u00b0 correction: positions at 0\u00b0 and 60\u00b0 bracket 40\u00b0.<\/p>' },\n        { q: 'What if the correction falls exactly on a blade position?', a: '<p>If the correction angle exactly matches a blade position angle, all the correction mass goes to that single blade \u2014 the other position gets zero mass. This is the simplest case and the most accurate correction possible with fixed positions.<\/p>' },\n        { q: 'How do I balance a fan with fixed blades?', a: '<p>Step-by-step process:<\/p><ol><li>Measure initial vibration (amplitude + phase)<\/li><li>Use trial weight or influence coefficient method to find the required correction mass and angle<\/li><li>Enter the correction into this calculator to get blade-specific masses<\/li><li>Attach\/remove mass at the specified blades<\/li><li>Run and verify the residual vibration is within tolerance<\/li><\/ol><p>For fans with many blades (12+), the result is very close to ideal placement.<\/p>' },\n        { q: 'Should I add mass or remove mass from blades?', a: '<p><strong>Adding mass<\/strong> at the calculated angle:<\/p><ul><li>Weld small weights to blade surfaces<\/li><li>Attach clip-on or bolt-on weights<\/li><li>Add material (putty, epoxy) \u2014 temporary<\/li><\/ul><p><strong>Removing mass<\/strong> at 180\u00b0 opposite:<\/p><ul><li>Grind or file blade tips<\/li><li>Drill holes in non-critical areas<\/li><\/ul><p>Adding is preferred when possible, as it\\'s reversible. Removing is permanent but cleaner aerodynamically.<\/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        if (p.has('n')) $('vc-positions').value = p.get('n');\n        if (p.has('m')) $('vc-mass').value = p.get('m');\n        if (p.has('a')) $('vc-angle').value = p.get('a');\n        if (p.has('r')) $('vc-radius').value = p.get('r');\n    }\n\n    \/* \u2500\u2500 KATEX \u2500\u2500 *\/\n    function renderFormulas() {\n        try {\n            katex.render('m_a = m \\\\cdot \\\\frac{\\\\sin(\\\\theta_b - \\\\theta)}{\\\\sin(\\\\theta_b - \\\\theta_a)}', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('m_b = m \\\\cdot \\\\frac{\\\\sin(\\\\theta - \\\\theta_a)}{\\\\sin(\\\\theta_b - \\\\theta_a)}', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n        } catch(e) {}\n    }\n\n    \/* \u2500\u2500 INIT \u2500\u2500 *\/\n    function init() {\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>Calculadora online gratuita para corre\u00e7\u00e3o de p\u00e1s. Decomponha uma massa de corre\u00e7\u00e3o em qualquer \u00e2ngulo em massas em duas posi\u00e7\u00f5es adjacentes de p\u00e1s fixas ou parafusos para balanceamento de ventiladores e rotores.<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100036","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/calculator\/100036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":1,"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/calculator\/100036\/revisions"}],"predecessor-version":[{"id":100347,"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/calculator\/100036\/revisions\/100347"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/media?parent=100036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/categories?post=100036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/pt_br\/wp-json\/wp\/v2\/tags?post=100036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}