Calculate Traverse Speed, Work Speed, and Wheel Surface Speed
Fraction of wheel width per revolution
Traverse Feed Rate–
Wheel Surface Speed (m/s):–
Work Surface Speed (m/min):–
Traverse per Rev (mm):–
Understanding Grinding Feed Rate Calculations
In precision grinding operations, particularly cylindrical grinding, calculating the correct feed rates and speeds is critical for achieving the desired surface finish, dimensional accuracy, and preventing thermal damage (grinding burn) to the workpiece.
Key Parameters in Grinding
Wheel Surface Speed ($v_s$): The velocity of the grinding wheel's periphery. In metric, this is often measured in meters per second (m/s), and in imperial, surface feet per minute (SFM).
Work Surface Speed ($v_w$): The velocity of the workpiece surface rotating against the wheel.
Traverse Feed Rate: The linear speed at which the table moves the workpiece past the wheel (longitudinal feed).
Overlap Factor: The fraction of the wheel width that advances for every revolution of the workpiece. A standard finishing overlap is often 0.2 to 0.4, while roughing might use 0.6 to 0.8.
Pro Tip: Maintaining a constant ratio between wheel speed and work speed is vital. If the wheel wears down (diameter decreases) and RPM stays the same, surface speed drops, potentially affecting the cutting action.
The Formulas
This calculator uses standard kinematic formulas to determine the optimal settings:
If the traverse speed is too high, the "barber pole" effect may appear on the workpiece, leaving spiral marks. If it is too slow, the process becomes inefficient and may introduce excessive heat, leading to glazing of the wheel.
Typical Values
Roughing: Higher work speed, higher traverse rate (Overlap ~0.7).
Finishing: Lower work speed, lower traverse rate (Overlap ~0.3).
Spark-out: Zero traverse feed or extremely slow pass to ensure roundness.
function updateLabels() {
var radios = document.getElementsByName('unitSystem');
var isMetric = true;
for (var i = 0; i < radios.length; i++) {
if (radios[i].checked && radios[i].value === 'imperial') {
isMetric = false;
}
}
if (isMetric) {
document.getElementById('lblWheelDiam').innerText = "Wheel Diameter (mm)";
document.getElementById('lblWorkDiam').innerText = "Workpiece Diameter (mm)";
document.getElementById('lblWheelWidth').innerText = "Wheel Width (mm)";
document.getElementById('unitWheelSpeed').innerText = "m/s";
document.getElementById('unitWorkSpeed').innerText = "m/min";
document.getElementById('unitTraverseRev').innerText = "mm";
} else {
document.getElementById('lblWheelDiam').innerText = "Wheel Diameter (inch)";
document.getElementById('lblWorkDiam').innerText = "Workpiece Diameter (inch)";
document.getElementById('lblWheelWidth').innerText = "Wheel Width (inch)";
document.getElementById('unitWheelSpeed').innerText = "SFM";
document.getElementById('unitWorkSpeed').innerText = "SFM";
document.getElementById('unitTraverseRev').innerText = "inch";
}
// Hide results when unit changes to avoid confusion
document.getElementById('results').style.display = 'none';
}
function calculateGrinding() {
// Get Inputs
var wheelD = parseFloat(document.getElementById('wheelDiam').value);
var wheelRPM = parseFloat(document.getElementById('wheelRPM').value);
var workD = parseFloat(document.getElementById('workDiam').value);
var workRPM = parseFloat(document.getElementById('workRPM').value);
var width = parseFloat(document.getElementById('wheelWidth').value);
var overlap = parseFloat(document.getElementById('overlapFactor').value);
// Validation
if (isNaN(wheelD) || isNaN(wheelRPM) || isNaN(workD) || isNaN(workRPM) || isNaN(width) || isNaN(overlap)) {
alert("Please fill in all fields with valid numbers.");
return;
}
if (overlap 1) {
alert("Overlap Factor should be between 0.1 and 1.0");
return;
}
// Check Unit System
var radios = document.getElementsByName('unitSystem');
var isMetric = true;
for (var i = 0; i < radios.length; i++) {
if (radios[i].checked && radios[i].value === 'imperial') {
isMetric = false;
}
}
var vSurface = 0; // Wheel Surface Speed
var vWork = 0; // Work Surface Speed
var traverseFeed = 0; // Table Feed
var traversePerRev = 0; // Feed per revolution
// Calculations
if (isMetric) {
// Metric: Wheel Speed in m/s
// Formula: (PI * D(mm) * N) / (60 * 1000)
vSurface = (Math.PI * wheelD * wheelRPM) / 60000;
// Metric: Work Speed in m/min
// Formula: (PI * d(mm) * n) / 1000
vWork = (Math.PI * workD * workRPM) / 1000;
// Traverse per Rev (mm)
traversePerRev = width * overlap;
// Traverse Feed Rate (mm/min)
traverseFeed = traversePerRev * workRPM;
} else {
// Imperial: Wheel Speed in SFM (Surface Feet per Minute)
// Formula: (PI * D(in) * N) / 12
vSurface = (Math.PI * wheelD * wheelRPM) / 12;
// Imperial: Work Speed in SFM
vWork = (Math.PI * workD * workRPM) / 12;
// Traverse per Rev (inch)
traversePerRev = width * overlap;
// Traverse Feed Rate (in/min)
traverseFeed = traversePerRev * workRPM;
}
// Display Results
document.getElementById('results').style.display = 'block';
if (isMetric) {
document.getElementById('resFeedRate').innerText = traverseFeed.toFixed(1) + " mm/min";
document.getElementById('resWheelSpeed').innerText = vSurface.toFixed(1);
document.getElementById('resWorkSpeed').innerText = vWork.toFixed(1);
document.getElementById('resTraversePerRev').innerText = traversePerRev.toFixed(2);
} else {
document.getElementById('resFeedRate').innerText = traverseFeed.toFixed(2) + " in/min";
document.getElementById('resWheelSpeed').innerText = Math.round(vSurface).toLocaleString();
document.getElementById('resWorkSpeed').innerText = Math.round(vWork).toLocaleString();
document.getElementById('resTraversePerRev').innerText = traversePerRev.toFixed(3);
}
}