{"id":100124,"date":"2026-02-15T20:19:04","date_gmt":"2026-02-15T20:19:04","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100124"},"modified":"2026-04-05T15:43:12","modified_gmt":"2026-04-05T15:43:12","slug":"hammer-mill-balance","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/bn\/calculators\/hammer-mill-balance\/","title":{"rendered":"Hammer Mill Balance Calculator | Free Rotor Weight Tool"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Hammer Mill Balance Calculator\",\"alternateName\":[\"Rotor Weight Distribution Calculator\",\"Hammer Arrangement Balance Calculator\",\"Crusher Rotor Balance\"],\"description\":\"Free online engineering calculator for hammer mill rotor balance. Enter hammer masses per position and disc to compute unbalance and get redistribution recommendations.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/hammer-mill-balance\/\",\"applicationCategory\":\"Engineering Calculator\",\"operatingSystem\":\"Any (Web Browser)\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"EUR\"},\"creator\":{\"@type\":\"Organization\",\"name\":\"Vibromera\",\"url\":\"https:\/\/vibromera.eu\/\"},\"datePublished\":\"2024-01-01\",\"dateModified\":\"2025-02-14\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true,\"featureList\":[\"2, 3, 4, or 6 position configurations\",\"2-8 disc support\",\"Editable mass grid\",\"Vector unbalance calculation\",\"Balance status indicator\",\"Redistribution recommendations\",\"URL parameter sharing\",\"Calculation history\"],\"keywords\":\"hammer mill balance, rotor weight distribution, hammer arrangement, unbalance, vibration\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"Why balance hammer mills?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Unbalanced hammer mills cause excessive vibration, leading to premature bearing failure, structural cracking, foundation damage, and unsafe operation. Even a small mass difference between opposing positions creates large centrifugal forces at operating speed.\"}},\n{\"@type\":\"Question\",\"name\":\"What are the consequences of unbalanced hammers?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Unbalanced hammers cause: 1) Vibration that increases with RPM\u00b2, 2) Bearing life reduction proportional to the cube of the excess load, 3) Fatigue cracking of rotor discs and frame, 4) Loosening of bolts and structural connections, 5) Inconsistent grinding performance.\"}},\n{\"@type\":\"Question\",\"name\":\"How should hammers be arranged on a rotor?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Weigh each hammer before installation. Group hammers by weight and place equal-weight sets on opposite positions. For 4-position rotors, match opposing pairs (pos 1+3 and pos 2+4). Total mass on each circumferential position should differ by less than 2% of total hammer mass.\"}},\n{\"@type\":\"Question\",\"name\":\"What is a good hammer rotation pattern?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A common rotation pattern: 1) Flip hammers 180\u00b0 (use unworn edge), 2) Move hammers from outer discs to inner discs and vice versa, 3) Swap between opposing positions. This equalizes wear across all hammers and maintains balance. Record hammer weights at each rotation.\"}},\n{\"@type\":\"Question\",\"name\":\"What weighing tolerance is acceptable for hammers?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"For industrial hammer mills: the total mass difference between any two opposing circumferential positions should be less than 2% of the total hammer mass. For individual hammers, match opposing hammers within 1-2% of each other. Use a scale with 1g resolution for hammers under 10 kg.\"}}\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\":\"Hammer Mill Balance Calculator\",\"item\":\"https:\/\/vibromera.eu\/calculators\/hammer-mill-balance\/\"}\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 MASS GRID \u2500\u2500 *\/\n.vc-mass-grid-wrap { margin-top:18px; padding-top:18px; border-top:1px solid var(--vc-border-light); }\n.vc-mass-grid-label { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); margin-bottom:10px; }\n.vc-mass-table { width:100%; border-collapse:collapse; font-size:13px; }\n.vc-mass-table th, .vc-mass-table td { padding:6px 4px; border:1px solid var(--vc-border-light); text-align:center; }\n.vc-mass-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-mass-table td.vc-sum-cell { background:var(--vc-surface-alt); font-weight:600; font-family:var(--vc-mono); font-size:13px; }\n.vc-mass-table input {\n    width:100%; max-width:70px; padding:6px 4px; border:1px solid var(--vc-border-light); border-radius:4px;\n    font-family:var(--vc-mono); font-size:13px; text-align:center; color:var(--vc-ink); background:var(--vc-surface);\n    transition:border-color 0.15s;\n}\n.vc-mass-table input:focus { outline:none; border-color:var(--vc-accent); box-shadow:0 0 0 2px rgba(200,90,42,0.12); }\n@media(max-width:600px) { .vc-mass-table input { max-width:50px; padding:4px 2px; font-size:12px; } }\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 STATUS BADGE \u2500\u2500 *\/\n.vc-status { display:inline-block; padding:6px 14px; border-radius:6px; font-family:var(--vc-mono); font-size:13px; font-weight:600; }\n.vc-status-ok { background:var(--vc-green-light); color:var(--vc-green); border:1px solid var(--vc-green); }\n.vc-status-warn { background:var(--vc-yellow-light); color:var(--vc-yellow); border:1px solid var(--vc-yellow); }\n.vc-status-bad { background:var(--vc-red-light); color:var(--vc-red); border:1px solid var(--vc-red); }\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\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-hammer-balance\">\n\n<!-- Header -->\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool<\/p>\n    <h1 class=\"vc-header-title\">Hammer Mill Balance Calculator<\/h1>\n    <p class=\"vc-header-subtitle\">Check if your hammer arrangement is balanced. Enter hammer masses for each position and disc to compute unbalance and get redistribution recommendations.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">Weight Distribution<\/span>\n        <span class=\"vc-badge\">2\u20136 Positions<\/span>\n        <span class=\"vc-badge\">2\u20138 Discs<\/span>\n    <\/div>\n<\/header>\n\n<!-- Calculator Card -->\n<div class=\"vc-card\">\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-positions\">Number of Positions <span class=\"vc-label-hint\">(rows around circumference)<\/span><\/label>\n                <select class=\"vc-select\" id=\"vc-positions\">\n                    <option value=\"2\">2 positions (180\u00b0 apart)<\/option>\n                    <option value=\"3\">3 positions (120\u00b0 apart)<\/option>\n                    <option value=\"4\" selected>4 positions (90\u00b0 apart)<\/option>\n                    <option value=\"6\">6 positions (60\u00b0 apart)<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-discs\">Number of Discs <span class=\"vc-label-hint\">(axial positions)<\/span><\/label>\n                <select class=\"vc-select\" id=\"vc-discs\">\n                    <option value=\"2\">2 discs<\/option>\n                    <option value=\"3\">3 discs<\/option>\n                    <option value=\"4\" selected>4 discs<\/option>\n                    <option value=\"5\">5 discs<\/option>\n                    <option value=\"6\">6 discs<\/option>\n                    <option value=\"7\">7 discs<\/option>\n                    <option value=\"8\">8 discs<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- Mass Grid -->\n        <div class=\"vc-mass-grid-wrap\">\n            <div class=\"vc-mass-grid-label\">Hammer Mass Grid <span class=\"vc-label-hint\">(kg per hammer \u2014 enter 0 for empty slot)<\/span><\/div>\n            <div style=\"overflow-x:auto;\">\n                <table class=\"vc-mass-table\" id=\"vc-mass-table\"><\/table>\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\" id=\"vc-preset-balanced\">4\u00d74 all 5 kg (balanced)<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" id=\"vc-preset-missing\">4\u00d74 one missing hammer<\/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\">Max Weight Difference (Opposing Positions)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-maxdiff\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Balance Status<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-status\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Vector Unbalance (mass \u00d7 angle)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-vector\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\" style=\"grid-column:1\/-1\">\n                <div class=\"vc-rcard-label\">Mass Per Position<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-perpos\" style=\"font-size:16px;\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\" style=\"grid-column:1\/-1\">\n                <div class=\"vc-rcard-label\">Recommendation<\/div>\n                <div id=\"vc-r-recommend\" style=\"font-size:14px;color:var(--vc-ink-secondary);margin-top:4px;\">\u2014<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Theory & Reference -->\n<div class=\"vc-section vc-open\" id=\"vc-sec-theory\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"true\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udcd8<\/span>\n            <span class=\"vc-section-title\">Theory &amp; Formulas<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner vc-theory\">\n            <h3>Balance Principle<\/h3>\n            <p>For a rotor with N equally-spaced circumferential positions, each position has an angular direction. The vector sum of all mass \u00d7 direction vectors should ideally be zero:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <p>Where M<sub>i<\/sub> is the total mass on position i, and \u03b8<sub>i<\/sub> = (i-1) \u00d7 360\u00b0\/N is the angular position.<\/p>\n\n            <h3>Unbalance Vector<\/h3>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n            <p>The magnitude of U represents the net unbalance in kg. If the rotor has hammer CG radius R, the static unbalance moment is U \u00d7 R (in kg\u00b7mm).<\/p>\n\n            <h3>Balance Criterion<\/h3>\n            <p>A hammer rotor is considered adequately balanced when:<\/p>\n            <ul>\n                <li><strong>Max position difference &lt; 2%<\/strong> of total hammer mass<\/li>\n                <li>For 2-position rotors: opposing positions should have equal total mass<\/li>\n                <li>For 4-position rotors: pairs (1,3) and (2,4) should match<\/li>\n                <li>For 3 and 6 positions: vector sum check is essential<\/li>\n            <\/ul>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 4 positions \u00d7 4 discs<\/div>\n                <p><strong>Position 1:<\/strong> 5.0 + 5.0 + 5.0 + 5.0 = 20.0 kg<\/p>\n                <p><strong>Position 2:<\/strong> 5.0 + 5.0 + 5.0 + 5.0 = 20.0 kg<\/p>\n                <p><strong>Position 3:<\/strong> 5.0 + 5.0 + 5.0 + 5.0 = 20.0 kg<\/p>\n                <p><strong>Position 4:<\/strong> 5.0 + 5.0 + 5.0 + 5.0 = 20.0 kg<\/p>\n                <p>Total = 80.0 kg, Max diff = 0.0 kg (0%) \u2192 <strong>Balanced \u2713<\/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> This calculator checks static balance only (weight distribution). Dynamic balance also depends on axial mass distribution. For high-speed rotors, professional balancing with vibration measurement is recommended.<\/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\/hammer-centrifugal-force\/\">Hammer Centrifugal Force<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/tip-speed-mulcher\/\">Tip Speed Calculator<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/residual-unbalance-iso1940\/\">Residual Unbalance (ISO 1940)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/lifecycle-cost-calculator\/\">Lifecycle Cost (LCC)<\/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        Professional rotor balancing for hammer mills and crushers. On-site dynamic balancing reduces vibration by 80\u201395%. 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;\">Hammer mill balance calculator for rotor weight distribution. 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 = 'hammer-mill-balance';\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(n, d) { if(isNaN(n)) return '\u2014'; var f=n.toFixed(d===undefined?2:d); return f.replace(\/(\\.\\d*?)0+$\/,'$1').replace(\/\\.$\/,''); }\n\n    var nPositions = 4;\n    var nDiscs = 4;\n\n    \/* \u2500\u2500 BUILD GRID \u2500\u2500 *\/\n    function buildGrid() {\n        nPositions = parseInt($('vc-positions').value);\n        nDiscs = parseInt($('vc-discs').value);\n\n        var table = $('vc-mass-table');\n        var html = '<thead><tr><th><\/th>';\n        for (var d = 1; d <= nDiscs; d++) {\n            html += '<th>Disc ' + d + '<\/th>';\n        }\n        html += '<th>Sum<\/th><\/tr><\/thead><tbody>';\n\n        for (var p = 1; p <= nPositions; p++) {\n            var angle = Math.round((p - 1) * 360 \/ nPositions);\n            html += '<tr><th>Pos ' + p + ' (' + angle + '\u00b0)<\/th>';\n            for (var d = 1; d <= nDiscs; d++) {\n                html += '<td><input type=\"number\" class=\"vc-hammer-mass\" data-pos=\"' + p + '\" data-disc=\"' + d + '\" inputmode=\"decimal\" step=\"any\" min=\"0\" value=\"5\" placeholder=\"0\"><\/td>';\n            }\n            html += '<td class=\"vc-sum-cell\" id=\"vc-sum-pos-' + p + '\">\u2014<\/td><\/tr>';\n        }\n        html += '<\/tbody>';\n        table.innerHTML = html;\n\n        \/\/ Bind input events\n        table.querySelectorAll('.vc-hammer-mass').forEach(function(inp) {\n            inp.addEventListener('input', calculate);\n        });\n\n        calculate();\n    }\n\n    \/* \u2500\u2500 CALCULATION \u2500\u2500 *\/\n    function calculate() {\n        var posMasses = []; \/\/ total mass per circumferential position\n        var totalMass = 0;\n\n        for (var p = 1; p <= nPositions; p++) {\n            var sum = 0;\n            for (var d = 1; d <= nDiscs; d++) {\n                var inp = document.querySelector('.vc-hammer-mass[data-pos=\"' + p + '\"][data-disc=\"' + d + '\"]');\n                var val = inp ? (parseFloat(inp.value) || 0) : 0;\n                sum += val;\n            }\n            posMasses.push(sum);\n            totalMass += sum;\n            var sumCell = $('vc-sum-pos-' + p);\n            if (sumCell) sumCell.textContent = fmt(sum, 2) + ' kg';\n        }\n\n        if (totalMass <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        \/\/ Vector sum: sum of M_i * e^(j*theta_i)\n        var Ux = 0, Uy = 0;\n        for (var p = 0; p < nPositions; p++) {\n            var angle = p * 2 * Math.PI \/ nPositions;\n            Ux += posMasses[p] * Math.cos(angle);\n            Uy += posMasses[p] * Math.sin(angle);\n        }\n        var Umag = Math.sqrt(Ux * Ux + Uy * Uy);\n        var Uangle = Math.atan2(Uy, Ux) * 180 \/ Math.PI;\n        if (Uangle < 0) Uangle += 360;\n\n        \/\/ Max difference between opposing positions (or max-min for odd positions)\n        var maxDiff = 0;\n        var maxMass = Math.max.apply(null, posMasses);\n        var minMass = Math.min.apply(null, posMasses);\n\n        if (nPositions === 2) {\n            maxDiff = Math.abs(posMasses[0] - posMasses[1]);\n        } else if (nPositions === 4) {\n            var diff13 = Math.abs(posMasses[0] - posMasses[2]);\n            var diff24 = Math.abs(posMasses[1] - posMasses[3]);\n            maxDiff = Math.max(diff13, diff24);\n        } else if (nPositions === 6) {\n            var d14 = Math.abs(posMasses[0] - posMasses[3]);\n            var d25 = Math.abs(posMasses[1] - posMasses[4]);\n            var d36 = Math.abs(posMasses[2] - posMasses[5]);\n            maxDiff = Math.max(d14, d25, d36);\n        } else {\n            \/\/ For 3 positions, use vector unbalance\n            maxDiff = maxMass - minMass;\n        }\n\n        var diffPct = totalMass > 0 ? (maxDiff \/ totalMass * 100) : 0;\n        var vecPct = totalMass > 0 ? (Umag \/ totalMass * 100) : 0;\n\n        \/\/ Status\n        var statusHtml, statusClass;\n        if (vecPct < 1) {\n            statusHtml = '<span class=\"vc-status vc-status-ok\">BALANCED \u2713<\/span>';\n        } else if (vecPct < 2) {\n            statusHtml = '<span class=\"vc-status vc-status-warn\">MARGINAL \u2014 Consider redistribution<\/span>';\n        } else {\n            statusHtml = '<span class=\"vc-status vc-status-bad\">UNBALANCED \u2014 Redistribution needed<\/span>';\n        }\n\n        \/\/ Display\n        $('vc-r-maxdiff').innerHTML = fmt(maxDiff, 2) + ' <span class=\"vc-rcard-unit\">kg<\/span> <span class=\"vc-rcard-unit\">(' + fmt(diffPct, 1) + '% of total)<\/span>';\n        $('vc-r-status').innerHTML = statusHtml;\n        $('vc-r-vector').innerHTML = fmt(Umag, 3) + ' <span class=\"vc-rcard-unit\">kg at ' + fmt(Uangle, 1) + '\u00b0<\/span> <span class=\"vc-rcard-unit\">(' + fmt(vecPct, 2) + '% of total)<\/span>';\n\n        \/\/ Per-position summary\n        var perPosHtml = '';\n        for (var p = 0; p < nPositions; p++) {\n            var angle = Math.round(p * 360 \/ nPositions);\n            perPosHtml += '<span style=\"margin-right:16px;\">Pos ' + (p + 1) + ' (' + angle + '\u00b0): <strong>' + fmt(posMasses[p], 2) + ' kg<\/strong><\/span>';\n        }\n        perPosHtml += '<br><span style=\"color:var(--vc-ink-muted);\">Total: ' + fmt(totalMass, 2) + ' kg, Avg per position: ' + fmt(totalMass \/ nPositions, 2) + ' kg<\/span>';\n        $('vc-r-perpos').innerHTML = perPosHtml;\n\n        \/\/ Recommendation\n        var avgPerPos = totalMass \/ nPositions;\n        var recHtml = '';\n        if (vecPct < 1) {\n            recHtml = '<p style=\"color:var(--vc-green);font-weight:600;\">Rotor is well balanced. No redistribution needed.<\/p>';\n        } else {\n            recHtml = '<p style=\"color:var(--vc-red);font-weight:600;\">Redistribute hammers to equalize mass per position.<\/p>';\n            recHtml += '<p>Target mass per position: <strong>' + fmt(avgPerPos, 2) + ' kg<\/strong><\/p><ul>';\n            for (var p = 0; p < nPositions; p++) {\n                var delta = posMasses[p] - avgPerPos;\n                if (Math.abs(delta) > 0.05) {\n                    recHtml += '<li>Pos ' + (p + 1) + ': ' + (delta > 0 ? 'remove' : 'add') + ' ~' + fmt(Math.abs(delta), 2) + ' kg<\/li>';\n                }\n            }\n            recHtml += '<\/ul>';\n            recHtml += '<p style=\"color:var(--vc-ink-muted);font-size:13px;\">Swap heavier hammers from overweight positions to underweight positions. Weigh each hammer individually.<\/p>';\n        }\n        $('vc-r-recommend').innerHTML = recHtml;\n\n        $('vc-results').classList.add('vc-visible');\n\n        \/\/ History\n        saveHistory({\n            positions: nPositions, discs: nDiscs, totalMass: totalMass,\n            _summary: nPositions + '\u00d7' + nDiscs + ', total=' + fmt(totalMass, 1) + 'kg, unbal=' + fmt(vecPct, 1) + '%'\n        });\n    }\n\n    \/* \u2500\u2500 PRESETS \u2500\u2500 *\/\n    $('vc-preset-balanced').addEventListener('click', function(e) {\n        e.preventDefault();\n        $('vc-positions').value = '4';\n        $('vc-discs').value = '4';\n        buildGrid();\n        \/\/ All already 5 by default\n    });\n\n    $('vc-preset-missing').addEventListener('click', function(e) {\n        e.preventDefault();\n        $('vc-positions').value = '4';\n        $('vc-discs').value = '4';\n        buildGrid();\n        \/\/ Set one hammer to 0 (position 3, disc 2)\n        var inp = document.querySelector('.vc-hammer-mass[data-pos=\"3\"][data-disc=\"2\"]');\n        if (inp) { inp.value = '0'; calculate(); }\n    });\n\n    \/* \u2500\u2500 GRID REBUILD ON CONFIG CHANGE \u2500\u2500 *\/\n    $('vc-positions').addEventListener('change', buildGrid);\n    $('vc-discs').addEventListener('change', buildGrid);\n\n    \/* \u2500\u2500 COPY \u2500\u2500 *\/\n    $('vc-copy-btn').addEventListener('click', function() {\n        var text = 'Hammer Mill Balance Check\\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            'Configuration: ' + nPositions + ' positions \u00d7 ' + nDiscs + ' discs\\n' +\n            'Max difference: ' + $('vc-r-maxdiff').textContent + '\\n' +\n            'Vector unbalance: ' + $('vc-r-vector').textContent + '\\n' +\n            $('vc-r-perpos').textContent.replace(\/<[^>]+>\/g, '') + '\\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\/hammer-mill-balance\/';\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 balance hammer mills?', a: '<p>Unbalanced hammer mills cause:<\/p><ul><li><strong>Excessive vibration<\/strong> \u2014 grows with the square of RPM, leading to structural damage<\/li><li><strong>Premature bearing failure<\/strong> \u2014 bearing life drops with the cube of excess force<\/li><li><strong>Foundation damage<\/strong> \u2014 dynamic forces transmitted to concrete and steel structure<\/li><li><strong>Safety hazards<\/strong> \u2014 risk of catastrophic failure and thrown components<\/li><li><strong>Inconsistent product<\/strong> \u2014 uneven grinding and throughput<\/li><\/ul><p>Proper hammer arrangement is the first and cheapest step toward smooth operation.<\/p>' },\n        { q: 'What are the consequences of unbalanced hammers?', a: '<p>A mass difference of just 1 kg on a rotor with R = 400 mm at 1500 RPM creates a centrifugal unbalance force of ~9.9 kN (1 tonne-force). This force rotates with the rotor, causing:<\/p><ul><li>1\u00d7 RPM vibration component<\/li><li>Accelerated bearing wear<\/li><li>Bolt loosening and fatigue cracking<\/li><li>Noise and operator discomfort<\/li><\/ul><p>The force increases with RPM\u00b2, so doubling the speed quadruples the force.<\/p>' },\n        { q: 'How should hammers be arranged on a rotor?', a: '<p>Best practices:<\/p><ul><li><strong>Weigh every hammer<\/strong> before installation (to 1g for hammers under 10 kg)<\/li><li><strong>Match opposing positions<\/strong> \u2014 for 4-position rotors, match pairs (1+3) and (2+4)<\/li><li><strong>Equal total mass per position<\/strong> \u2014 redistribute to minimize difference<\/li><li><strong>Record weights<\/strong> \u2014 keep a logbook of hammer masses and positions<\/li><li><strong>Replace in sets<\/strong> \u2014 when replacing worn hammers, replace all on a position pair<\/li><\/ul>' },\n        { q: 'What is a good hammer rotation pattern?', a: '<p>A systematic rotation pattern maximizes hammer life and maintains balance:<\/p><ol><li><strong>Step 1:<\/strong> Flip all hammers 180\u00b0 (use the unworn cutting edge)<\/li><li><strong>Step 2:<\/strong> Swap inner and outer disc positions<\/li><li><strong>Step 3:<\/strong> Move between opposing circumferential positions<\/li><\/ol><p>This creates a 6-stage rotation cycle before replacement. At each rotation:<\/p><ul><li>Weigh all hammers<\/li><li>Group by weight for matching<\/li><li>Discard any below minimum weight<\/li><li>Document in maintenance log<\/li><\/ul>' },\n        { q: 'What weighing tolerance is acceptable for hammers?', a: '<p>Recommended tolerances:<\/p><ul><li><strong>Individual hammer matching:<\/strong> \u00b11\u20132% between opposing hammers<\/li><li><strong>Position total mass:<\/strong> &lt;2% difference of total hammer mass<\/li><li><strong>Vector unbalance:<\/strong> &lt;1% of total mass = good, 1\u20132% = acceptable, &gt;2% = redistribute<\/li><\/ul><p>Use a scale with resolution of at least 1g for hammers under 10 kg, or 10g for heavier hammers.<\/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 KATEX \u2500\u2500 *\/\n    function renderFormulas() {\n        try {\n            katex.render('\\\\vec{U} = \\\\sum_{i=1}^{N} M_i \\\\cdot e^{j\\\\theta_i} = \\\\sum_{i=1}^{N} M_i \\\\left(\\\\cos\\\\theta_i + j\\\\sin\\\\theta_i\\\\right)', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('|U| = \\\\sqrt{\\\\left(\\\\sum M_i \\\\cos\\\\theta_i\\\\right)^2 + \\\\left(\\\\sum M_i \\\\sin\\\\theta_i\\\\right)^2}', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n        } catch(e) {}\n    }\n\n    \/* \u2500\u2500 INIT \u2500\u2500 *\/\n    function init() {\n        renderFormulas();\n        buildGrid();\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>Free online hammer mill balance calculator. Check if hammer arrangement on rotor is balanced. Enter hammer masses per position and disc to compute unbalance vector and get redistribution recommendations.<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100124","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100124","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":2,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100124\/revisions"}],"predecessor-version":[{"id":100954,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100124\/revisions\/100954"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/media?parent=100124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/categories?post=100124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/tags?post=100124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}