clc; clear all; % CNC Machine Servo motor Sizing by Jonathan Blissett % References: % http://www.nskamericas.com/cps/rde/xbcr/mx_es/Friction_Torque_and_Drive_Torque.pdf % http://www.hiwin.com/pdf/bs/ballscrews.pdf % Machine spec [x y z] m = [55 50 45]; % Mass of carriage, kg F = [25 50 50]; % Force, N a = [2 2 2]; % Required acceleration, m/s^2 L = [10 5 5]; % Ballscrew pitch, mm length = [2.6 0.4 0.64]; % Ballscrew length, m d = [16 20 16]; % Ballscrew diameter, mm db = [3.175 3.175 3.175]; % Ballscrew ball diameter, mm Ca = [3052 3052 3875]*9.81; % Ballscrew dynamic load rating, N epsilon = 0.01; % Ballscrew pre-load force factor of Ca % 0.03-0.07 for cutting machine % tools, <=0.1 for especially high % rigidity P = epsilon*Ca; % Ballscrew pre-load force fixity = [1.55 1.55 1.55]; % 2.24 for fixed-fixed 1.55 for fixed-simple, 1.0 for simple-simple, 0.32 for fixed-free a_alpha = [25 25 25]*pi/180; % Angular contact bearing support angle, suffix B is 40 degree, AC is 25 degree, C is 15 degree a_Fpre = [690 690 690]; % Angular contact beraing preload force a_Dw = [6 6 6]; % Angular contact bearing ball diameter a_Z = [8 8 8]; % Number of balls K = [35 56 35]*9.8; % Ballscrew (nut) stiffness factor, 35 for 1605, 56 for 2005 ballscrew_density = 7850; % Ballscrew density, steel=7850kg/m^3 b_mu = 0.006; % Ballscrew friction co-effficient Typical=0.003-0.1 % End of Spec critical_speed = 0.8.*fixity*4.76*10^6.*(d-db)./25.4./((length.*1000./25.4).^2); b_alpha = atan(L./(pi*d)); % Ballscrew lead angle b_beta = atan(b_mu); % Ballscrew friction angle n_1 = tan(b_alpha)./tan(b_alpha+b_beta);% Ballscrew efficiency (common transmission) n_2 = tan(b_alpha-b_beta)./tan(b_alpha);% Ballscrew efficiency (reverse transmission) k_p = 1./n_1-n_2; % Pre-load torque co-efficient mu_rail = 0.004; % Rail friction coefficient % Pulley specifications inc_drive_pulley_inertia = [2 1 1]; % Set to 1 to include pulley inertia in calc, or 0 to exclude, or 2 for two pulleys inc_driven_pulley_inertia = [1 1 1]; pulley_pitch = 5; % Pulley pitch, mm belt_width = 15; % Belt width, mm tPulley_drive = [20 20 20]; % No. of teeth on pulley coupled to motor shaft tPulley_driven = [20 20 20]; % No. of teeth on driven pulley pulley_density = 7850; % Density of pulley material, steel=7850kg/m^3 width_add = 10; % Difference between belt and pulley width, mm pitch_dia_offset = 1; % Difference between pitch radius and pulley radius, mm belt_span = [700 150 150]; % Belt span length (for stiffness calc) % Motor specifications rotor_length=61.5; % Rotor length, mm rotor_OD=59; rotor_ID=56; endbell_length=6; % Motor endbell length, mm rotor_density=7850; endbell_density=2700; magnet_density=7400; magnet_thickness=2.5; magnet_width=9; magnet_length=45; magnet_n=14; magnet_coverage=magnet_n*magnet_width/(rotor_ID*pi); J_fluxring=0.5*rotor_density*pi*((rotor_OD/2000)^4-(rotor_ID/2000)^4)*rotor_length/1000; % J_endbell=0.5*endbell_density*pi*(rotor_OD/2000)^4*endbell_length/1000; % J_magnets=magnet_coverage*0.5*magnet_density*pi*((rotor_ID/2000)^4-((rotor_ID-2*magnet_thickness)/2000)^4)*magnet_length/1000; J_motor=J_fluxring+J_endbell+J_magnets; J_motor=840/1000/100/100; %Used to exclude motor inertia rpm=1000; % motor Rated speed, rpm r_pulley_drive=pulley_pitch.*tPulley_drive./(2.*pi)./1000-pitch_dia_offset/1000; r_pulley_driven=pulley_pitch.*tPulley_driven./(2.*pi)./1000-pitch_dia_offset/1000; % Friction load F_friction=m*mu_rail*9.81; % F=mu*C for X and Y F_friction(3)=F(3)*mu_rail; % C for Z-axis is cutting force T_preload=k_p.*P.*L./1000./(2.*pi); % Ballscrew pre-load torque % Calculate inertias J_linear=m.*(L./(1000.*2.*pi)).^2; J_pulley_drive=0.5*pulley_density.*pi.*(r_pulley_drive).^4.*(belt_width+width_add)/1000.*inc_drive_pulley_inertia; J_pulley_driven=0.5*pulley_density.*pi.*(r_pulley_driven).^4.*(belt_width+width_add)/1000.*inc_driven_pulley_inertia; J_ballscrew=0.5*ballscrew_density*pi.*(d/2000).^4.*length; J_total=J_motor+J_pulley_drive+(tPulley_drive./tPulley_driven).^2.*(J_linear+J_pulley_driven+J_ballscrew); alpha=tPulley_driven/tPulley_drive*2*pi*a/(L/1000); % Calculate torques F(3)=F(3)+m(3)*9.81; % Z force = cutting force + weight T_load=T_preload+(F+F_friction).*L./1000./(2.*pi.*n_1); T=tPulley_drive./tPulley_driven.*T_load+J_total*alpha; feedrate = rpm*L/1000.*tPulley_drive./tPulley_driven; fprintf('Feedrate in m/min:\t[x y z]=[%.1f %.1f %.1f]\nInertia in g-m^2:\t[x y z]=[%.2f %.2f %.2f]\nTorque in Nm:\t\t[x y z]=[%.2f %.2f %.2f]\nInertia ratios:\t\t[x y z]=[%.2f %.2f %.2f]\nCritical vel m/min\t[x y z]=[%.1f %.1f %.1f]',feedrate,1000*J_total,T,J_total/J_motor,critical_speed.*L/1000) % Calculate ballscrew stiffness % Reference: http://www.nskamericas.com/cps/rde/xbcr/na_en/Preload_and_Rigidity.pdf % http://www.learneasy.info/MDME/MEMmods/class_projects/backstop/controller/Topic4-BallscrewCalculations.pdf dr = (d-db)/1000;% Torsion k_torsion = (pi*dr.^4/32*7.7e10)./length; k_shaft = pi*dr.^2/4*2.06e5./length; % Multiply stiffness by 4 for fixed-fixed k_nut = 0.8*K.*(P./(0.1.*Ca)).^(1/3); k_bearing = 3*a_Fpre./(0.44./sin(a_alpha).*((a_Fpre./a_Z.*sin(a_alpha)).^2./a_Dw).^(1/3)); k_total = 1./(1./k_shaft+1./k_nut+1./k_bearing); fprintf('\n\nBallscrew stifnesses:\nShaft axial in N/um\t\t[x y z]=[%.1f %.1f %.1f]\nNut axial in N/um\t\t[x y z]=[%.1f %.1f %.1f]\nBearing axial in N/um\t[x y z]=[%.1f %.1f %.1f]\nOverall linear N/um\t\t[x y z]=[%.1f %.1f %.1f]',k_shaft,k_nut,k_bearing,k_total) T_screw=T.*tPulley_drive./tPulley_driven; pulley_driven_prad=pulley_pitch.*tPulley_driven./(2.*pi)./1000; belt_tension_force = T_screw./pulley_driven_prad; belt_stiff = 23400./belt_span.*belt_width; %http://www.sgtransmisiones.com/info/pdf/correas/c_poliuretano.pdf belt_elongation = belt_tension_force./belt_stiff; %http://www.bbman.com/assets/files/pdf-library/Engineering/Timing%20Belts/BeltTensileProperties.pdf k_belt = T_screw./(belt_elongation./(pulley_pitch.*tPulley_drive)*2*pi); k_ttot = k_belt.*k_torsion./(k_belt+k_torsion); fprintf('\n\nShaft torsion in Nm/rad\t[x y z]=[%.1f %.1f %.1f]',k_torsion) fprintf('\nBelt stiffness Nm/rad\t[x y z]=[%.1f %.1f %.1f]',k_belt) fprintf('\nTotal torsion in Nm/rad\t[x y z]=[%.1f %.1f %.1f]',k_ttot) fprintf('\n\nAxial compliance error in um:\t\t[x y z]=[%.1f %.1f %.1f]',F./k_total) fprintf('\nTorsional compliance error in um:\t[x y z]=[%.1f %.1f %.1f]',L./(2*pi)./k_ttot*1000.*T_screw)