{"id":2373,"date":"2025-11-28T16:42:28","date_gmt":"2025-11-28T15:42:28","guid":{"rendered":"https:\/\/hardemanmotorsport.nl\/?page_id=2373"},"modified":"2025-12-09T20:54:25","modified_gmt":"2025-12-09T19:54:25","slug":"sper-differentieel-simulatie","status":"publish","type":"page","link":"https:\/\/hardemanmotorsport.nl\/de\/sper-differentieel-simulatie\/","title":{"rendered":"Sper differentieel simulatie"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"nl\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Differentieel Simulator<\/title>\n    <style>\n        \/* --- CSS STIJLBEGIN --- *\/\n        body {\n            font-family: Arial, sans-serif;\n            margin: 20px;\n            background-color: #f4f4f9;\n            color: #333;\n        }\n\n        .container {\n            max-width: 1200px;\n            margin: 0 auto;\n            background: #fff;\n            padding: 20px;\n            border-radius: 8px;\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n        }\n\n        h1 {\n            text-align: center;\n            color: #0056b3;\n            margin-bottom: 30px;\n        }\n\n        \/* --- Input en Controls --- *\/\n        .controls {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 20px;\n            margin-bottom: 30px;\n            padding: 20px;\n            border: 1px solid #ddd;\n            border-radius: 6px;\n            background-color: #e9ecef;\n        }\n\n        .input-group {\n            flex: 1 1 200px;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .input-group label {\n            font-weight: bold;\n            margin-bottom: 5px;\n            font-size: 0.9em;\n        }\n\n        .input-group input[type=\"range\"], \n        .input-group input[type=\"number\"] {\n            width: 100%;\n            padding: 5px;\n            border: 1px solid #ccc;\n            border-radius: 3px;\n        }\n\n        .value-display {\n            font-size: 0.8em;\n            margin-top: 5px;\n        }\n\n        \/* --- Differentieel Resultaten --- *\/\n        .resultaten {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 30px;\n        }\n\n        .differentieel-box {\n            flex: 1 1 350px;\n            border: 2px solid #ccc;\n            border-radius: 8px;\n            padding: 15px;\n            background-color: #fafafa;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .differentieel-box h3 {\n            border-bottom: 2px solid #0056b3;\n            padding-bottom: 5px;\n            margin-top: 0;\n            color: #0056b3;\n        }\n\n        .koppel-balans {\n            display: flex;\n            height: 180px; \n            gap: 10px;\n            margin: 15px 0;\n        }\n\n        \/* Wiel-container voor relatieve positionering *\/\n        .wiel-links, .wiel-rechts {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            position: relative;\n            height: 100%;\n            justify-content: flex-end; \/* Balken beginnen onderaan *\/\n            border-bottom: 2px solid #333;\n        }\n\n        \/* Grip Bar (De achtergrond\/limiet) *\/\n        .grip-bar {\n            position: absolute;\n            bottom: 0;\n            width: 100%;\n            background-color: #64dd17; \/* Groen *\/\n            opacity: 0.4;\n            border-radius: 3px 3px 0 0;\n            transition: height 0.3s ease-out;\n            z-index: 5;\n        }\n\n        \/* Koppel Total Container: De totale hoogte die het gevraagde koppel representeert *\/\n        .koppel-total-bar {\n            position: relative; \n            width: 100%;\n            transition: height 0.3s ease-out;\n            border-radius: 3px 3px 0 0;\n            min-height: 0;\n            z-index: 10;\n        }\n\n        \/* Tractie Bar (Basis: Koppel dat daadwerkelijk wordt overgebracht) *\/\n        .tractie-bar {\n            position: absolute;\n            bottom: 0; \n            width: 100%;\n            background-color: #ff9900; \/* Oranje (Goede Tractie) *\/\n            transition: height 0.3s ease-out;\n            border-radius: 3px 3px 0 0;\n            min-height: 0;\n        }\n\n        \/* Spin Bar (Bovenop: Koppel dat verloren gaat) *\/\n        .spin-bar {\n            position: absolute;\n            bottom: 0; \n            width: 100%;\n            background-color: #cc0000; \/* Rood (Wielspin) *\/\n            opacity: 0.8; \n            transition: height 0.3s ease-out;\n            border-radius: 3px 3px 0 0;\n            min-height: 0;\n            z-index: 15; \n        }\n\n        .wiel-links span, .wiel-rechts span {\n            position: absolute;\n            top: -20px;\n            font-weight: bold;\n            white-space: nowrap;\n        }\n        \n        \/* Verloren Koppel Indicator *\/\n        .verloren-koppel-text {\n            color: #cc0000; \n            font-weight: bold;\n        }\n\n        \/* Specifieke styling voor Torsen\/Platen *\/\n        .detail-info {\n            font-size: 0.9em;\n            margin-top: 5px;\n            padding-top: 5px;\n            border-top: 1px dashed #ccc;\n        }\n        \n        .preload-options label {\n            margin-right: 10px;\n        }\n        \n        .preload-options input[type=\"radio\"] {\n            margin-right: 3px;\n        }\n        \n        \/* CSS STIJLEINDE *\/\n    <\/style>\n<\/head>\n<body>\n\n    <div class=\"container\">\n        <h1>Differentieel Simulator: Koppel &#038; Grip<\/h1>\n\n        <div class=\"controls\">\n            <div class=\"input-group\">\n                <label for=\"koppelInput\">Wielkoppel (Nm) [Totaal Aandrijflijn, max. 1000]:<\/label>\n                <input type=\"range\" id=\"koppelInput\" min=\"0\" max=\"1000\" value=\"500\" oninput=\"runSimulation()\">\n                <div class=\"value-display\">Huidig Koppel: <strong id=\"koppelInputValue\">500 Nm<\/strong><\/div>\n            <\/div>\n\n            <div class=\"input-group\">\n                <label for=\"muL\">Wrijvingsco\u00ebffici\u00ebnt ($\\mu$) Links:<\/label>\n                <input type=\"number\" id=\"muL\" value=\"0.5\" step=\"0.01\" min=\"0.01\" max=\"1.5\" oninput=\"runSimulation()\">\n                <div class=\"value-display\">$\\mu$ Links: <strong id=\"muLValue\">0.5<\/strong> (Grip: <span id=\"openDiffGripL\">0<\/span> Nm)<\/div>\n            <\/div>\n\n            <div class=\"input-group\">\n                <label for=\"muR\">Wrijvingsco\u00ebffici\u00ebnt ($\\mu$) Rechts:<\/label>\n                <input type=\"number\" id=\"muR\" value=\"1.0\" step=\"0.01\" min=\"0.01\" max=\"1.5\" oninput=\"runSimulation()\">\n                <div class=\"value-display\">$\\mu$ Rechts: <strong id=\"muRValue\">1.0<\/strong> (Grip: <span id=\"openDiffGripR\">0<\/span> Nm)<\/div>\n            <\/div>\n\n            <div class=\"input-group\">\n                <label for=\"maxSperPercentage\">Max Sperpercentage (Drukplaten) [%]:<\/label>\n                <input type=\"range\" id=\"maxSperPercentage\" min=\"0\" max=\"100\" value=\"40\" oninput=\"runSimulation()\">\n                <div class=\"value-display\">Max Sper: <strong id=\"maxSperValue\">40%<\/strong><\/div>\n            <\/div>\n            \n            <div class=\"input-group\">\n                <label>Pre-load (Statische Sper) (Nm):<\/label>\n                <div class=\"preload-options\">\n                    <input type=\"radio\" name=\"preload\" value=\"0\" id=\"preload0\" checked onchange=\"runSimulation()\"><label for=\"preload0\">0 Nm<\/label>\n                    <input type=\"radio\" name=\"preload\" value=\"60\" id=\"preload60\" onchange=\"runSimulation()\"><label for=\"preload60\">60 Nm<\/label>\n                    <input type=\"radio\" name=\"preload\" value=\"120\" id=\"preload120\" onchange=\"runSimulation()\"><label for=\"preload120\">120 Nm<\/label>\n                <\/div>\n                <div class=\"value-display\">Ingestelde Pre-load: <strong id=\"preLoadValue\">0 Nm<\/strong><\/div>\n            <\/div>\n            \n            <div class=\"input-group\">\n                <label for=\"torsenTBRInput\">Torque Bias Ratio (TBR:x):<\/label>\n                <input type=\"number\" id=\"torsenTBRInput\" value=\"3.5\" step=\"0.1\" min=\"1.0\" max=\"5.0\" oninput=\"runSimulation()\">\n                <div class=\"value-display\">Ingestelde TBR: <strong id=\"torsenTBRDisplay\">3.5:1<\/strong><\/div>\n            <\/div>\n            \n        <\/div>\n        \n        <div class=\"resultaten\">\n            \n            <div id=\"openDiffBox\" class=\"differentieel-box\">\n                <h3>Open Differentieel<\/h3>\n                <div class=\"koppel-balans\">\n                    <div class=\"wiel-links\">\n                        <div id=\"openDiffGripBarL\" class=\"grip-bar\"><\/div>\n                        <div id=\"openDiffKoppelTotalL\" class=\"koppel-total-bar\">\n                            <div id=\"openDiffSpinL\" class=\"spin-bar\"><\/div>\n                            <div id=\"openDiffTractieL\" class=\"tractie-bar\"><\/div>\n                        <\/div>\n                        <span id=\"openDiffKoppelLText\">0 Nm<\/span>\n                    <\/div>\n                    <div class=\"wiel-rechts\">\n                        <div id=\"openDiffGripBarR\" class=\"grip-bar\"><\/div>\n                        <div id=\"openDiffKoppelTotalR\" class=\"koppel-total-bar\">\n                            <div id=\"openDiffSpinR\" class=\"spin-bar\"><\/div>\n                            <div id=\"openDiffTractieR\" class=\"tractie-bar\"><\/div>\n                        <\/div>\n                        <span id=\"openDiffKoppelRText\">0 Nm<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"detail-info\">\n                    <p>Grip Links: <span id=\"openDiffGripL\">0<\/span> Nm | Grip Rechts: <span id=\"openDiffGripR\">0<\/span> Nm<\/p>\n                    <p>Totaal Overgebracht: <strong><span id=\"openDiffTotaal\">0<\/span> Nm<\/strong><\/p>\n                    <p>Verloren Koppel (Spin): <strong class=\"verloren-koppel-text\"><span id=\"openDiffVerloren\">0<\/span> Nm<\/strong><\/p>\n                <\/div>\n            <\/div>\n\n            <div id=\"sperDiffBox\" class=\"differentieel-box\">\n                <h3>Platen-sperdifferentieel<\/h3>\n                <div class=\"koppel-balans\">\n                    <div class=\"wiel-links\">\n                        <div id=\"sperDiffGripBarL\" class=\"grip-bar\"><\/div>\n                        <div id=\"sperDiffKoppelTotalL\" class=\"koppel-total-bar\">\n                            <div id=\"sperDiffSpinL\" class=\"spin-bar\"><\/div>\n                            <div id=\"sperDiffTractieL\" class=\"tractie-bar\"><\/div>\n                        <\/div>\n                        <span id=\"sperDiffKoppelLText\">0 Nm<\/span>\n                    <\/div>\n                    <div class=\"wiel-rechts\">\n                        <div id=\"sperDiffGripBarR\" class=\"grip-bar\"><\/div>\n                        <div id=\"sperDiffKoppelTotalR\" class=\"koppel-total-bar\">\n                            <div id=\"sperDiffSpinR\" class=\"spin-bar\"><\/div>\n                            <div id=\"sperDiffTractieR\" class=\"tractie-bar\"><\/div>\n                        <\/div>\n                        <span id=\"sperDiffKoppelRText\">0 Nm<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"detail-info\">\n                    <p>Berekende Sperwaarde: <strong><span id=\"berekendeSperwaarde\">0%<\/span><\/strong> | Pre-load: <strong><span id=\"preLoadDisplayNm\">0 Nm<\/span><\/strong><\/p>\n                    <p>Grip Links: <span id=\"sperDiffGripL\">0<\/span> Nm | Grip Rechts: <span id=\"sperDiffGripR\">0<\/span> Nm<\/p>\n                    <p>Totaal Overgebracht: <strong><span id=\"sperDiffTotaal\">0<\/span> Nm<\/strong><\/p>\n                    <p>Verloren Koppel (Spin): <strong class=\"verloren-koppel-text\"><span id=\"sperDiffVerloren\">0<\/span> Nm<\/strong><\/p>\n                <\/div>\n            <\/div>\n\n            <div id=\"torsenDiffBox\" class=\"differentieel-box\">\n                <h3>Torsen Sperdifferentieel<\/h3>\n                <div class=\"koppel-balans\">\n                    <div class=\"wiel-links\">\n                        <div id=\"torsenDiffGripBarL\" class=\"grip-bar\"><\/div>\n                        <div id=\"torsenDiffKoppelTotalL\" class=\"koppel-total-bar\">\n                            <div id=\"torsenDiffSpinL\" class=\"spin-bar\"><\/div>\n                            <div id=\"torsenDiffTractieL\" class=\"tractie-bar\"><\/div>\n                        <\/div>\n                        <span id=\"torsenDiffKoppelLText\">0 Nm<\/span>\n                    <\/div>\n                    <div class=\"wiel-rechts\">\n                        <div id=\"torsenDiffGripBarR\" class=\"grip-bar\"><\/div>\n                        <div id=\"torsenDiffKoppelTotalR\" class=\"koppel-total-bar\">\n                            <div id=\"torsenDiffSpinR\" class=\"spin-bar\"><\/div>\n                            <div id=\"torsenDiffTractieR\" class=\"tractie-bar\"><\/div>\n                        <\/div>\n                        <span id=\"torsenDiffKoppelRText\">0 Nm<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"detail-info\">\n                    <p>Ingestelde TBR: <strong id=\"torsenTBRDisplay\">3.5:1<\/strong> | Berekende Ratio: <strong id=\"berekendeTBR\">0:1<\/strong><\/p>\n                    <p>Grip Links: <span id=\"torsenDiffGripL\">0<\/span> Nm | Grip Rechts: <span id=\"torsenDiffGripR\">0<\/span> Nm<\/p>\n                    <p>Totaal Overgebracht: <strong><span id=\"torsenDiffTotaal\">0<\/span> Nm<\/strong><\/p>\n                    <p>Verloren Koppel (Spin): <strong class=\"verloren-koppel-text\"><span id=\"torsenDiffVerloren\">0<\/span> Nm<\/strong><\/p>\n                <\/div>\n            <\/div>\n\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ --- Configuratie & Constanten ---\n        const MIN_KOPPEL = 0;\n        const MAX_KOPPEL = 1000; \/\/ Maximaal gesimuleerd wielkoppel (Nm)\n        const GRIP_FACTOR = 400; \/\/ Conversiefactor: 1.0 Mu (frictie) = 400 Nm grip (afhankelijk van voertuiggewicht\/band)\n        \n        \/\/ Functie om de geselecteerde Pre-load (Nm) op te halen\n        function getPreloadNm() {\n            const options = document.getElementsByName('preload');\n            for (let i = 0; i < options.length; i++) {\n                if (options[i].checked) {\n                    return parseInt(options[i].value);\n                }\n            }\n            return 0;\n        }\n\n        \/**\n         * Berekent de dynamische Sper Coefficient (0.0 tot 1.0) op basis van gas\/motorkoppel.\n         *\/\n        function berekenSperKarakteristiek(totaalKoppel, mechSperPercentage) {\n            const K_MECH_MAX = mechSperPercentage \/ 100; \n            const rangeKoppel = MAX_KOPPEL - MIN_KOPPEL;\n            \/\/ Progressie is lineair met het koppel\n            const progress = Math.max(0, Math.min(1, (totaalKoppel - MIN_KOPPEL) \/ rangeKoppel));\n            const K_MECH_CURRENT = progress * K_MECH_MAX;\n            return Math.min(K_MECH_CURRENT, 1.0);\n        }\n        \n        \/**\n         * FUNCTIE 1: PLATE LSD (Definitieve Logica, Correcte Pre-load)\n         *\/\n        function simuleerDifferentieel(koppel, gripL, gripR, maxSper, preLoadNm, isLSD) {\n            const koppelTotaal = koppel;\n            const koppelVraagPerWiel = koppelTotaal \/ 2;\n            const gripMin = Math.min(gripL, gripR);\n            const gripMax = Math.max(gripL, gripR);\n            let sperCoefficient = 0;\n\n            let koppelL_gevraagd = 0;\n            let koppelR_gevraagd = 0;\n            let koppelL_tractie;\n            let koppelR_tractie;\n            \n            \/\/ Controleer op symmetrie (binnen een kleine marge)\n            const isSymmetrisch = Math.abs(gripL - gripR) < 1; \n\n            if (!isLSD) {\n                \/\/ OPEN DIFFERENTIEEL LOGICA\n                const T_min_overgebracht = Math.min(koppelVraagPerWiel, gripMin);\n                koppelL_gevraagd = T_min_overgebracht;\n                koppelR_gevraagd = T_min_overgebracht;\n                \n                \/\/ Bij open diff en slip, gaat het resterende gevraagde koppel naar het zwakke wiel (T_min)\n                \/\/ Dit is de correcte definitie van een open differentieel bij slip: T_high = T_low = T_min.\n                \/\/ Dit koppel (T_min) wordt dan naar beide wielen gestuurd.\n                \/\/ Als het totale koppel (koppelTotaal) groter is dan 2 * T_min, dan wordt al het overige koppel\n                \/\/ verloren als spin op het zwakke wiel.\n                \n                \/\/ Om de gevraagde koppel voor visualisatie te krijgen, gebruiken we de logica:\n                const T_min_open = Math.min(gripMin, koppelVraagPerWiel);\n                \n                if (koppelTotaal > 2 * T_min_open) {\n                    \/\/ Als het totale gevraagde koppel groter is dan wat de diff kan overbrengen\n                    \/\/ Dan krijgt het zwakke wiel T_min, en het sterke wiel T_min.\n                    \/\/ Het sterke wiel kan meer aan, maar de diff beperkt het tot T_min.\n                    koppelL_gevraagd = T_min_open;\n                    koppelR_gevraagd = T_min_open;\n                } else {\n                    \/\/ Normale 50\/50 verdeling als de vraag laag is\n                    koppelL_gevraagd = koppelVraagPerWiel;\n                    koppelR_gevraagd = koppelVraagPerWiel;\n                }\n\n                sperCoefficient = 0;\n                \n            } else {\n                \/\/ SPERDIFFERENTIEEL LOGICA\n                sperCoefficient = berekenSperKarakteristiek(koppelTotaal, maxSper);\n                \n                \/\/ *** 1. SYMMETRISCHE OF VOLDOENDE GRIP LOGICA ***\n                if (isSymmetrisch || gripMin >= koppelVraagPerWiel) {\n                    \n                    \/\/ Als de grip ruim voldoende is, is de ideale verdeling 50\/50.\n                    koppelL_gevraagd = koppelVraagPerWiel;\n                    koppelR_gevraagd = koppelVraagPerWiel;\n                    \n                } else {\n                    \/\/ *** 2. PARTI\u00cbLE SPERWERKING bij GRIPVERSCHIL ***\n                    \n                    const T_min_overgebracht = gripMin;\n                    \n                    \/\/ Dynamische lockup (op basis van gas\/koppel)\n                    const T_lockup_dynamisch = koppelVraagPerWiel * sperCoefficient;\n                    \n                    \/\/ Totale winst door sperwerking (T_winst = statische preload + dynamische lockup)\n                    const T_sper_winst = preLoadNm + T_lockup_dynamisch; \n                    \n                    \/\/ Koppel op het lage wiel (T_low) wordt de grip (T_min_overgebracht)\n                    const T_low_basis = T_min_overgebracht;\n                    \n                    \/\/ Koppel op het hoge wiel (T_high) is T_low + T_sper_winst\n                    let T_high_basis = T_low_basis + T_sper_winst;\n                    \n                    if (gripL <= gripR) {\n                        koppelL_gevraagd = T_low_basis;\n                        koppelR_gevraagd = T_high_basis;\n                    } else {\n                        koppelR_gevraagd = T_low_basis;\n                        koppelL_gevraagd = T_high_basis;\n                    }\n                }\n                \n                const gevraagdTotaal = koppelL_gevraagd + koppelR_gevraagd;\n                \n                \/\/ Koppelafvlakking: als we meer vragen dan de motor levert (cap op T_totaal).\n                if (gevraagdTotaal > koppelTotaal) {\n                    const schaalFactor = koppelTotaal \/ gevraagdTotaal;\n                    koppelL_gevraagd *= schaalFactor;\n                    koppelR_gevraagd *= schaalFactor;\n                }\n\n            }\n            \n            \/\/ EINDCONTROLE: Overgebrachte koppel (Tractie)\n            koppelL_tractie = Math.min(koppelL_gevraagd, gripL);\n            koppelR_tractie = Math.min(koppelR_gevraagd, gripR);\n            \n            \/\/ Resultaten berekenen\n            const totaleGrip = koppelL_tractie + koppelR_tractie;\n            \/\/ Verloren koppel is wat de motor levert minus wat daadwerkelijk tractie levert\n            const verlorenKoppel = koppelTotaal - totaleGrip;\n            \n            return {\n                koppelL: koppelL_tractie,\n                koppelR: koppelR_tractie,\n                koppelL_gevraagd: koppelL_gevraagd, \/\/ Nodig voor de rode spin-indicator\n                koppelR_gevraagd: koppelR_gevraagd, \/\/ Nodig voor de rode spin-indicator\n                totaleGrip: totaleGrip,\n                verlorenKoppel: Math.max(0, verlorenKoppel),\n                sperCoefficient: sperCoefficient\n            };\n        }\n        \n        \/**\n         * FUNCTIE 2: TORSEN LSD (Definitieve, bug-vrije Logica)\n         *\/\n        function simuleerTorsen(koppel, gripL, gripR, tbr) {\n            const koppelTotaal = koppel;\n            const gripMin = Math.min(gripL, gripR);\n            const gripMax = Math.max(gripL, gripR);\n            \n            const koppelVraagPerWiel = koppelTotaal \/ 2;\n\n            let T_low_gevraagd;\n            let T_high_gevraagd;\n            \n            \/\/ Torsen wordt alleen actief als de grip van het zwakke wiel de beperkende factor is.\n            if (gripMin >= koppelVraagPerWiel) {\n                \/\/ Voldoende grip: 50\/50 verdeling (Torsen is passief\/open)\n                T_low_gevraagd = koppelVraagPerWiel;\n                T_high_gevraagd = koppelVraagPerWiel;\n            } else {\n                \/\/ Onvoldoende grip: Torsen wordt actief\n                const T_low_basis = gripMin; \n                \n                \/\/ 2. Torsen Bias Limiet (Mechanische grens: T_low * TBR)\n                const T_high_bias_limiet = T_low_basis * tbr; \n                \n                \/\/ 3. Toewijzing van T_high. Dit wordt de kleinste van:\n                \/\/ a) De maximale mechanische limiet door de TBR (T_high_bias_limiet)\n                \/\/ b) De beschikbare grip op de hoge kant (gripMax)\n                \/\/ c) Het resterende motorkoppel (koppelTotaal - T_low)\n                const T_high_gevraagd_raw = Math.min(\n                    gripMax, \n                    T_high_bias_limiet, \n                    koppelTotaal - T_low_basis\n                );\n                \n                T_low_gevraagd = T_low_basis;\n                T_high_gevraagd = T_high_gevraagd_raw;\n            }\n\n            \/\/ 4. De uitkomst kan NOOIT negatief zijn. (Fix voor de -116 Nm bug)\n            T_low_gevraagd = Math.max(0, T_low_gevraagd);\n            T_high_gevraagd = Math.max(0, T_high_gevraagd); \n            \n            let koppelL_tractie;\n            let koppelR_tractie;\n            \n            \/\/ Torsen's T_gevraagd is al gelimiteerd door gripMax, dus T_tractie = T_gevraagd\n            koppelL_tractie = T_low_gevraagd;\n            koppelR_tractie = T_high_gevraagd;\n            \n            const totaleOvergebrachteKoppel = koppelL_tractie + koppelR_tractie;\n\n            \/\/ --- Resultaten en Ratio Berekening ---\n            const verlorenKoppel = koppelTotaal - totaleOvergebrachteKoppel;\n            \n            const laagsteKoppel = Math.min(koppelL_tractie, koppelR_tractie);\n            const hoogsteKoppel = Math.max(koppelL_tractie, koppelR_tractie);\n\n            const berekendeTBR = laagsteKoppel > 0 ? \n                                 hoogsteKoppel \/ laagsteKoppel : \n                                 (hoogsteKoppel > 0 ? Infinity : 1); \n\n            return {\n                koppelL: koppelL_tractie,\n                koppelR: koppelR_tractie,\n                koppelL_gevraagd: koppelL_tractie, \/\/ Torsen vraagt niet meer dan grip toelaat\n                koppelR_gevraagd: koppelR_tractie, \/\/ Torsen vraagt niet meer dan grip toelaat\n                totaleGrip: totaleOvergebrachteKoppel,\n                verlorenKoppel: Math.max(0, verlorenKoppel),\n                berekendeTBR: berekendeTBR\n            };\n        }\n\n\n        \/**\n         * Update de visuele weergave van de resultaten.\n         *\/\n        function updateDisplay(resultaat, gripL, gripR, prefix, preLoadNm, tbr) {\n            const maxDisplayKoppel = MAX_KOPPEL; \n            \n            \/\/ --- 1. Hoogteberekeningen ---\n            \/\/ Visualisatie hoogte is de totale gevraagde koppel (geclamped op MAX_KOPPEL)\n            const T_L_gevraagd_clamped = Math.min(resultaat.koppelL_gevraagd, maxDisplayKoppel);\n            const T_R_gevraagd_clamped = Math.min(resultaat.koppelR_gevraagd, maxDisplayKoppel);\n            \n            \/\/ De tractie hoogte (wat wordt overgebracht)\n            const T_L_tractie = resultaat.koppelL;\n            const T_R_tractie = resultaat.koppelR;\n            \n            \/\/ De spin hoogte (T_gevraagd - T_tractie)\n            const T_L_spin = Math.max(0, resultaat.koppelL_gevraagd - gripL);\n            const T_R_spin = Math.max(0, resultaat.koppelR_gevraagd - gripR);\n\n            \/\/ --- 2. Balken Updaten ---\n            \n            \/\/ Totale Koppel (Tractie + Spin)\n            document.getElementById(`${prefix}KoppelTotalL`).style.height = `${(T_L_gevraagd_clamped \/ maxDisplayKoppel) * 100}%`;\n            document.getElementById(`${prefix}KoppelTotalR`).style.height = `${(T_R_gevraagd_clamped \/ maxDisplayKoppel) * 100}%`;\n\n            \/\/ Tractie Bar (Onderste deel, oranje\/groen)\n            document.getElementById(`${prefix}TractieL`).style.height = `${(T_L_tractie \/ maxDisplayKoppel) * 100}%`;\n            document.getElementById(`${prefix}TractieR`).style.height = `${(T_R_tractie \/ maxDisplayKoppel) * 100}%`;\n\n            \/\/ Spin Bar (Bovenste deel, rood) - moet in absolute percentage berekend worden\n            document.getElementById(`${prefix}SpinL`).style.height = `${(T_L_spin \/ maxDisplayKoppel) * 100}%`;\n            document.getElementById(`${prefix}SpinR`).style.height = `${(T_R_spin \/ maxDisplayKoppel) * 100}%`;\n            \n            \/\/ Grip Bar (Achtergrond, Groen)\n            document.getElementById(`${prefix}GripBarL`).style.height = `${(gripL \/ maxDisplayKoppel) * 100}%`;\n            document.getElementById(`${prefix}GripBarR`).style.height = `${(gripR \/ maxDisplayKoppel) * 100}%`;\n            \n            \/\/ --- 3. Tekstwaarden en Labels ---\n            document.getElementById(`${prefix}KoppelLText`).textContent = `${Math.round(resultaat.koppelL)} Nm`;\n            document.getElementById(`${prefix}KoppelRText`).textContent = `${Math.round(resultaat.koppelR)} Nm`;\n            \n            document.getElementById(`${prefix}Totaal`).textContent = `${Math.round(resultaat.totaleGrip)} Nm`;\n            document.getElementById(`${prefix}Verloren`).textContent = `${Math.round(resultaat.verlorenKoppel)} Nm`;\n            \n            if (prefix === 'sperDiff') { \/\/ Plate LSD\n                document.getElementById('berekendeSperwaarde').textContent = `${Math.round(resultaat.sperCoefficient * 100)}%`;\n                document.getElementById('preLoadDisplayNm').textContent = `${preLoadNm} Nm`; \n            } else if (prefix === 'torsenDiff') { \/\/ Torsen LSD\n                document.getElementById('torsenTBRDisplay').textContent = `${tbr}:1`; \n                document.getElementById('berekendeTBR').textContent = `${(resultaat.berekendeTBR === Infinity) ? '\u221e' : resultaat.berekendeTBR.toFixed(2)}:1`;\n            }\n        }\n\n        \/**\n         * De hoofdfunctie die wordt aangeroepen door ELKE input.\n         *\/\n        function runSimulation() {\n            const preLoadNm = getPreloadNm(); \n            const maxSper = parseInt(document.getElementById('maxSperPercentage').value);\n            const koppel = parseInt(document.getElementById('koppelInput').value);\n            \n            \/\/ --- MU naar Grip (Nm) Conversie ---\n            const muL = parseFloat(document.getElementById('muL').value);\n            const muR = parseFloat(document.getElementById('muR').value);\n            const gripL = muL * GRIP_FACTOR;\n            const gripR = muR * GRIP_FACTOR;\n            \n            const torsenTBR = parseFloat(document.getElementById('torsenTBRInput').value);\n\n\n            document.getElementById('preLoadValue').textContent = `${preLoadNm} Nm`;\n            document.getElementById('maxSperValue').textContent = `${maxSper}%`;\n            document.getElementById('koppelInputValue').textContent = `${koppel} Nm`;\n            document.getElementById('muLValue').textContent = `${muL}`;\n            document.getElementById('muRValue').textContent = `${muR}`;\n            \n            \/\/ Update grip waarden in resultaat displays\n            document.getElementById('openDiffGripL').textContent = `${Math.round(gripL)}`;\n            document.getElementById('openDiffGripR').textContent = `${Math.round(gripR)}`;\n            document.getElementById('sperDiffGripL').textContent = `${Math.round(gripL)}`;\n            document.getElementById('sperDiffGripR').textContent = `${Math.round(gripR)}`;\n            document.getElementById('torsenDiffGripL').textContent = `${Math.round(gripL)}`;\n            document.getElementById('torsenDiffGripR').textContent = `${Math.round(gripR)}`;\n\n\n            const openResultaat = simuleerDifferentieel(koppel, gripL, gripR, 0, 0, false); \n            const sperResultaat = simuleerDifferentieel(koppel, gripL, gripR, maxSper, preLoadNm, true);\n            const torsenResultaat = simuleerTorsen(koppel, gripL, gripR, torsenTBR); \n\n            \/\/ Roep updateDisplay aan met de Grip waarden voor de balken\n            updateDisplay(openResultaat, gripL, gripR, 'openDiff', 0);\n            updateDisplay(sperResultaat, gripL, gripR, 'sperDiff', preLoadNm);\n            updateDisplay(torsenResultaat, gripL, gripR, 'torsenDiff', 0, torsenTBR); \n        }\n\n        \/\/ Voer de simulatie \u00e9\u00e9n keer uit bij het laden\n        document.addEventListener('DOMContentLoaded', runSimulation);\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Differentieel Simulator Differentieel Simulator: Koppel &#038; Grip Wielkoppel (Nm) [Totaal Aandrijflijn, max. 1000]: Huidig Koppel: 500 Nm Wrijvingsco\u00ebffici\u00ebnt ($\\mu$) Links: $\\mu$ Links: 0.5 (Grip: 0 Nm) Wrijvingsco\u00ebffici\u00ebnt ($\\mu$) Rechts: $\\mu$ Rechts: 1.0 (Grip: 0 Nm) Max Sperpercentage (Drukplaten) [%]: Max Sper: 40% Pre-load (Statische Sper) (Nm): 0 Nm 60 Nm 120 Nm Ingestelde Pre-load: 0&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/hardemanmotorsport.nl\/de\/sper-differentieel-simulatie\/\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-2373","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/pages\/2373"}],"collection":[{"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/comments?post=2373"}],"version-history":[{"count":45,"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/pages\/2373\/revisions"}],"predecessor-version":[{"id":2447,"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/pages\/2373\/revisions\/2447"}],"wp:attachment":[{"href":"https:\/\/hardemanmotorsport.nl\/de\/wp-json\/wp\/v2\/media?parent=2373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}