حاسبة التيار الكهربائي بالامبير
حاسبة اختيار مقطع الكابل
أدخل بيانات الحِمل وظروف التركيب لاختيار أنسب مقطع كابل، مع حساب عوامل التصحيح وهبوط الجهد والحماية المقترحة.منهجية IEC 60364-5-52بيانات الحساب
تيار الحمل (Load Current)
أمبيرعدد الأطوار
ثلاثي أحاديجهد التشغيل
فولتمادة الموصل نحاس (Copper) ألمنيوم (Aluminum)نوع العزل PVC XLPEطريقة التركيب في مواسير (Conduit) على سلم كابلات (Tray / Clipped) في الهواء الحر (Free air) مدفون في الأرض (Buried)حرارة المحيط
°معدد الدوائر المتجاورةطول المسار
مترمعامل القدرة (cosφ)الحد الأقصى المسموح لهبوط الجهد
%النتيجة
المقطع الموصى به—مم²ملخص القدرة الاستيعابية
تيار تحمل الكابل المختار—عامل تصحيح الحرارة (Ca)—عامل تصحيح التجميع (Cg)—التيار المسموح الفعلي—هبوط الجهد
هبوط الجهد الفعلي—نسبة هبوط الجهد—الحماية
قاطع مقترح (أقرب مقاس قياسي)—ملاحظة هندسية: هذه الحاسبة تقدم تقديرًا استرشاديًا مبنيًا على منهجية ومعاملات تصحيح مبسّطة مستمدة من IEC 60364-5-52، وليست بديلاً عن جداول الشركة المصنّعة الكاملة أو مراجعة مهندس كهرباء معتمد، خصوصًا في التطبيقات الحرجة أو التركيبات الكبيرة. تحقق دائمًا من درجة حرارة التربة الفعلية، عدد وترتيب الدوائر المتجاورة، ومواصفات الكابل الفعلية قبل التنفيذ.
const sections = [1.5,2.5,4,6,10,16,25,35,50,70,95,120,150,185,240,300,400,500]; const baseAmpacity = [17.5,24,32,41,57,76,101,125,151,192,232,269,300,341,400,458,508,583]; const methodMult = { conduit: 1.00, tray: 1.15, air: 1.30, buried: 0.90 }; const insulationMult = { PVC: 1.00, XLPE: 1.15 }; const materialMult = { Cu: 1.00, Al: 0.78 }; const resistivity = { Cu: 22.5, Al: 36 }; const reactancePerKm = 0.08; const breakerSizes = [6,10,13,16,20,25,32,40,50,63,80,100,125,160,200,225,250,315,350,400,500,630,700,800,1000,1250,1600,2000,2500,3200,4000]; function effectiveAmpacity(idx, method, insulation, material){ return baseAmpacity[idx] * methodMult[method] * insulationMult[insulation] * materialMult[material]; } function tempFactor(ambient, insulation){ const Tmax = insulation === 'XLPE' ? 90 : 70; const ratio = (Tmax - ambient) / (Tmax - 30); if(ratio <= 0) return 0.05; return Math.sqrt(ratio); } function groupingFactor(n){ const table = {1:1.00,2:0.80,3:0.70,4:0.65,5:0.60,6:0.57,7:0.54,8:0.52,9:0.50,10:0.48,12:0.45,14:0.43,16:0.41,18:0.39,20:0.38}; if(table[n] !== undefined) return table[n]; const keys = Object.keys(table).map(Number).sort((a,b)=>a-b); if(n < keys[0]) return table[keys[0]]; if(n > keys[keys.length-1]) return table[keys[keys.length-1]]; for(let i=0;i<keys.length-1;i++){ if(n > keys[i] && n < keys[i+1]){ const x0=keys[i], x1=keys[i+1], y0=table[x0], y1=table[x1]; return y0 + (y1-y0)*(n-x0)/(x1-x0); } } return 1; } function voltageDrop(I, length_m, section, material, phase, cosphi, voltage){ const R = resistivity[material] / section; const X = reactancePerKm; const sinphi = Math.sqrt(Math.max(0, 1 - cosphi*cosphi)); const L_km = length_m / 1000; const factor = phase === '3' ? Math.sqrt(3) : 2; const dV = factor * I * L_km * (R*cosphi + X*sinphi); return { dV, pct: (dV/voltage)*100 }; } function suggestBreaker(Iload, Icable){ for(const b of breakerSizes){ if(b >= Iload && b <= Icable) return b; } for(const b of breakerSizes){ if(b >= Iload) return b; } return null; } function fmt(n, d=1){ return Number(n).toLocaleString('en-US', {minimumFractionDigits:d, maximumFractionDigits:d}); } let phase = '3'; const phaseSeg = document.getElementById('phaseSeg'); phaseSeg.addEventListener('click', (e)=>{ const btn = e.target.closest('button'); if(!btn) return; [...phaseSeg.children].forEach(b=>b.classList.remove('active')); btn.classList.add('active'); phase = btn.dataset.val; document.getElementById('voltage').value = phase === '3' ? 400 : 230; calculate(); }); const ids = ['iLoad','voltage','material','insulation','method','ambient','grouping','length','cosphi','maxDrop']; ids.forEach(id=>{ document.getElementById(id).addEventListener('input', calculate); document.getElementById(id).addEventListener('change', calculate); }); function calculate(){ const Iload = parseFloat(document.getElementById('iLoad').value) || 0; const voltage = parseFloat(document.getElementById('voltage').value) || 1; const material = document.getElementById('material').value; const insulation = document.getElementById('insulation').value; const method = document.getElementById('method').value; const ambient = parseFloat(document.getElementById('ambient').value); const grouping = parseInt(document.getElementById('grouping').value) || 1; const length = parseFloat(document.getElementById('length').value) || 0; const cosphi = parseFloat(document.getElementById('cosphi').value) || 0.85; const maxDrop = parseFloat(document.getElementById('maxDrop').value) || 3; const Ca = tempFactor(ambient, insulation); const Cg = groupingFactor(grouping); const correctionTotal = Ca * Cg; const banners = []; let chosenIdx = -1; let parallelCount = 1; for(let i=0;i<sections.length;i++){ const allowed = effectiveAmpacity(i, method, insulation, material) * correctionTotal; if(allowed >= Iload){ chosenIdx = i; break; } } if(chosenIdx === -1){ const lastIdx = sections.length - 1; const perCableAllowed = effectiveAmpacity(lastIdx, method, insulation, material) * correctionTotal; parallelCount = Math.ceil(Iload / perCableAllowed); chosenIdx = lastIdx; banners.push({type:'warn', text: `التيار المطلوب كبير جدًا لكابل مفرد ضمن الجدول (حتى ${sections[lastIdx]} مم²). يُقترح استخدام ${parallelCount} كوابل متوازية لكل طور بمقطع ${sections[lastIdx]} مم².`}); } let dropResult = null; let usedForDropCurrent = Iload / parallelCount; let governedByDrop = false; while(true){ const section = sections[chosenIdx]; dropResult = voltageDrop(usedForDropCurrent, length, section * parallelCount, material, phase, cosphi, voltage); if(dropResult.pct <= maxDrop) break; if(chosenIdx < sections.length - 1){ chosenIdx++; governedByDrop = true; } else if(parallelCount < 12) { parallelCount++; usedForDropCurrent = Iload / parallelCount; governedByDrop = true; } else { break; } } const finalSection = sections[chosenIdx]; const finalAmpacityBase = effectiveAmpacity(chosenIdx, method, insulation, material); const finalAllowed = finalAmpacityBase * correctionTotal * parallelCount; document.getElementById('outSection').innerHTML = `${finalSection}<sup>مم² ${parallelCount>1 ? '× '+parallelCount+' متوازي' : ''}</sup>`; document.getElementById('outParallelNote').textContent = parallelCount>1 ? `إجمالي التيار المسموح للتشكيلة: ${fmt(finalAllowed,0)} أمبير` : ''; document.getElementById('outAmpacity').textContent = `${fmt(finalAmpacityBase,0)} أمبير / كابل`; document.getElementById('outCa').textContent = fmt(Ca,3); document.getElementById('outCg').textContent = fmt(Cg,3); const allowedEl = document.getElementById('outAllowed'); allowedEl.textContent = `${fmt(finalAllowed,0)} أمبير`; allowedEl.className = 'v ' + (finalAllowed >= Iload ? 'good' : 'bad'); document.getElementById('outDropV').textContent = `${fmt(dropResult.dV,1)} فولت`; const dropPctEl = document.getElementById('outDropPct'); dropPctEl.textContent = `${fmt(dropResult.pct,2)} %`; dropPctEl.className = 'v ' + (dropResult.pct <= maxDrop ? 'good' : 'bad'); const breaker = suggestBreaker(Iload, finalAllowed); document.getElementById('outBreaker').textContent = breaker ? `${breaker} أمبير` : '—'; if(governedByDrop){ banners.push({type:'warn', text: 'تم تكبير المقطع (أو عدد الكوابل المتوازية) عن الحد الأدنى المطلوب للتيار، بسبب تجاوز هبوط الجهد للحد المسموح.'}); } if(dropResult.pct > maxDrop){ banners.push({type:'bad', text: 'تعذر تحقيق حد هبوط الجهد المطلوب حتى بأكبر مقطع/عدد متوازي متاح. يُنصح بزيادة الجهد، تقليل الطول، أو مراجعة التصميم.'}); } if(ambient >= (insulation==='XLPE'?90:70)){ banners.push({type:'bad', text: 'درجة حرارة المحيط تساوي أو تتجاوز الحد الأقصى لحرارة الموصل المسموحة لهذا النوع من العزل — يلزم تبريد أو تغيير نوع العزل.'}); } if(banners.length===0){ banners.push({type:'good', text: 'الاختيار يحقق كلًا من شرط التيار المسموح وشرط هبوط الجهد ضمن الحدود المدخلة.'}); } document.getElementById('banners').innerHTML = banners.map(b=>`<div class="banner ${b.type}"><b>${b.type==='good'?'✓':'⚠'}</b><span>${b.text}</span></div>`).join(''); } calculate();