MetalicaRap:Tool head processes discussion

From RepRap
Revision as of 09:12, 26 August 2011 by Rapatan (talk | contribs)
Jump to: navigation, search

This page has been flagged as containing duplicate material. An editor has suggested merging this page or section into Materials/Appropriate Machines. (Discuss)


List of future tool head concepts FutureToolIdeas

External links for Processes comparison

Introduction to non conventional machining processes: J.P. Kaushish. "Manufacturing Processes". 2010. [1]

Introduction to machining and EBM 19 page: J. A. McGeough. "Advanced methods of machining". 1988. [2]


Quote " Their are many ways to belief "

Many routes need to be followed and researched, they all have their own value. Lasers are clearly more sexy than old TV tube technology though early comparison may not turn out to be the best guide . Never the less here we go!

N:B: "sticky particle" SLS creates weak parts suitable for metal sculptures stc.. and "Fully melted" SLS has the possibility to create full strength metal parts. The term sintering refers to a generic label for all these processes of converting powder in to metal parts, whether the powder grains are just made sticky against each other, so parts are weak and only good for sculptures, or the powder is fully melted so you can have the possibility of creating a full strength part . Confusion around this means that machines are called sinteres which actually fully melt the powder thus demanding a laser above 150W while other cheaper machines also called sinteres with smaller lasers only make weak porous parts suitable for metal sculptures are mistakenly assumed to be the same as the high powered expensive machines with large lasers..[3] 35Secs in they explain this.

SLS vs EBM

SLS and EBM have some similarities: both put down layers of powder, and both scan a beam over each layer of powder to get the powder to stick together in the right places. High power laser SLS can be a "fully melt" process or be a "sticky grain" weak part production process. They are both low force not needing the built part to be specially secured in the machine and therefore low skill.

EBM has some advantages over SLS

  • EBM may be able to reach finished parts IT grade 07 ,SLS cannot produce finished parts unless very expensive laser pointing systems are employed. So SLS lacking these highly expensive pointing devices always need further machining, so the 3D printer is not a replacement at all, as you still need all the normal machines ie cnc grinding milling..
  • electron beam melting produces parts that are void-free, and therefore fully dense and full strength, In a SLS machine a laser of over 150 W is needed to produce "Fully melted" SLS , ie full strength parts.
  • EBM does not have the limit of the one expensive bought in item ie "fully melt" SLS ( ie the laser 100K euro Yag 400W)
  • The parts that generate an electron beam are simpler/possible to replicate than the parts to generate a gas based laser beam, (Solid state lasers are extremely difficult) ( Adrian Bowyer" we may never reprap a laser").
  • in principle, it seems possible to EBM materials that are highly transparent to laser beams, (reflectivity/ oxide coating of aluminum for example means a laser has major problems(3% absorption), but other metals for example steel takes 40% of laser beams energy in an effective manner(YAG Q pulse).
  • Electron beam machines do not need any permit from Darpa or its European equivalent, SLS machines which produce full strength parts through fully melting the powder need powerful lasers over 150W which need a permit form Darpa or its European equivalent.
  • Wall socket efficiency for EBM is 85%, for higher power lasers they require up to 10 times more electricity , C02 lasers and ND YAG lasers 10%-30% wall socket to beam efficiency ( for fibre lasers and Diode lasers similar to EBM 85%)
  • ... other advantages ...


(See Below for advantages of SLS over EBM). ( both ebm and "full melting" SLS can vaporize metal subtractively or fully melt powder for additive manufacture.)

Discussion questions:

Q: The EBM machines I've seen photographs of generate the electron beam at the top, then focus and steer the beam to strike the appropriate spot on the powder at the bottom. That requires high vacuum -- otherwise the electron beam is completely absorbed by the air or other gas. is it possible to generate the electron beam on a moving toolhead a short distance above the appropriate spot on the powder?

A: Yes but beam spreads out and looses power, but the main problem is your metallurgy suffers so they are no longer equivalent to wrought iron milled parts, which is only possible in a vacuum 10-3Torr or better. Welding is traditionally a poor metallurgical join so weakness is allowed for in the join design, but this weakness through out a part often makes the part too inferior compared with milled parts. see (Bureau of Mines 1993) below). Also 1mm lead or equivalent metal shielding will be required around the whole machine for xrays produced as the electrons strike the surface.

Q: How short does the distance traveled by the electrons through air need to be, in order that at least half the energy of the beam makes it all the way through to melt the powder, rather than heating the air/nitrogen/argon atmosphere? See the artist's conception of a potential "Cartesian robot gantry" for non-vacuum electron beam welding[4]. Wikipedia: electron beam welding#In-air welding

A: ?

SLS has some advantages over EBM.

  • SLS does not require a high vacuum. It works at normal air pressure but in this case also leaves the metal unprotected so metallurgy suffers leading to weak parts suitable for sculptures e.t.c.. So everyone uses argon barrier so get a protective enviroment


  • Most plastics, ceramics and lignin can be sintered open-air. very very locally high temp means oxygen react with material. (Most metals require an inert Argon or Nitrogen atmosphere, which is still an advantage over high vacuum in simplicity but not metallurgy eg.see (Tisza 2001) below Hydrogen metal cracking. ). In comercial polymer welding single mode diode lasers 8 W are sometimes used.
  • "Sticky powder" SLS demands less development than EBM as lower power laser can be on cartesian axis, but creates weak metal parts suitable for sculptures strength of metal resembles cast iron. etc. the process requires less heat and only makes the powder stick against each other (using lasers less than 150 W where no permit is required).
  • SLS that has a protective environment for metal, and fully melts powder grains together has the potential to produce full strength metal parts, this melting process requires more powerful lasers above 150W, ( Having a externally heated build chamber, which is preheated to 50 degrees below melting point, ( Fiber laser at 100 Watts ). degrees below melt which also require a permit in Europe and USA from Darpa or the Local equivalent agency. This "fully melting" SLS process is characterized by bringing all the metal powder up to 50 degrees below melting point and then apply a powerful laser to finish the melting ( above 150W typically 200W to 400W) .
  • Laser process does not produce X-rays like an electron beam process, The amount of Xray produced is proportional to the voltage applied to the apparatus, So for your your old TV it was at 30KV but as long as you keep the electrons in a box that was no problem. But If you do like those crazy people in hospitals fire them all round the place precautions need to be taken, for a 60KV xray machine 1mm of lead (or equivalent 3mm of stainless steal ) is suggested screening for some one who works with it every day. The Vacuum chamber in a electron beam machine has to be over 8mm thick stainless steal to resist the pressure .

... other advantages ...

EDM vs SLS

(Electric discharge machining Selective laser sintering)

EDM has sub micron tolerance


SLS requires very expensive pointing method to achieve micron level tolerance.

other Advantages Disadvantages....



General guidance on comparison with the production of metal parts.

For Metal parts the main issues when comparing alternative processes with conventionally machined parts need to include;

1. Metallurgy; including; Resultant grain structure from cooling profile and metal alloy type (ingredients) , heat damage/distortion/residual stresses internal compressive or internal tensile forces from localized heating and thermal expansion in the heat-affected zone of the process, loss of alloy additions giving change in alloy constituent quantities/proportions due to out-gassing, stress/strain/fracture characteristics and hardness.

2. IT grade dimensional tolerance achievable ,

3 Difficulty/special requirement of securing part in machine/skill required

4 Metal - gas chemical reactions at temperature.

5.Roughness R<math>q</math> (units nm) is a route mean square of many absolute height measurements, measured in nm, For example a polish surface R<math>q</math> of 3 nm is typical A typical powder printed finish R<math>q</math> of 25 nm

6. porosity

7. limitation on size of manufacturable parts

8. other

Info


Free 60 page summary of the important metal processes, ( beyond the well know milling grinding etc ) chapter 5-3 to 5-31. Bureau of Mines. "New Materials Society, Challenges and Opportunities: New Materials Science and Technology". 1993. [5]

As a Metal alloy cools at different rates, the different metal types ( eg Nickel & Chromium) form different types of crystals, some hard , some ductile, etc.. . This defines the metals quality/usefulness, in any manufacturing process the rates of change of temperature at any particular part of the product are therefore critical, these diagrams allow you to predict the metal products final qualities. Phase Diagrams are explained in this book: Miklós Tisza. "Physical metallurgy for engineers". 2001. [6]

Existing self replicating finished parts IT grade 7 or better machines

List your successful; largely self replicating/ finished parts producing machines!

Combined CNC and EDM machine have produced finished parts IT grade 0 , Self replicating, Amazing Yes!! unfortunately many years (15 yrs) experience is needed to operate it.

Scenario's

metal SLS “ Full melt “ Scenario

30 W multi mode Laser 500 euros, beam diameter 20/ 30 µ

optic collimator , lens 250 Euro,

commercial point 2000 Euro ( 900m/s mechanical , absolute position 1-30µ) ( scanning mirror Hack hard drive arms glue on two mirrors )

Preheated bed to 50 degrees below melt by external heater coils, So laser only come up last bit,

Build speed very slow scan laser at 25mm / sec ( Could this be much quiker ? Recalculate needed) ( beam diameter 20/ 30 µ area 7.5MW /M2)

Example B build

Steal stainless 300*300*20mm 90% part 100µ layer thickness 400µ finished part tolerances

Total area 300x300x200 =18000000 mm2 divided by small area in one second

Given scan rate 25mm/S * .03mm wide path area scanned in one second is .75mm2

24million seconds / 3600 *24 = 277 days but only 10% part so 27 days Too slow heat

calculation for 30µx30µx100µ heat required to melt from 50 degrees below melting given power input Calculate duration.

Further reading

S. Narayanan. "CAD/CAM Robotics and Factories of the Future: 22nd International Conference". 2007. [7]


On-Line Design Tool: Laser 808 Build Speed Calculator

Laser 808 Build speed Calculator Program

Use it to decide your; Power supply size, Beam power,Deflection speed,Build platform size,Layer thickness,Digital to Analogue converter speed for beam power modulation While considering factors like; How these decisions vary between different manufacturing metals used? How wall plug efficiency effects mains supply requirements? How beam to metal efficiency effects process?

How do I run the following ECMAScript program here ? anyone know? Until we solve this you can copy the following code in the edit mode of this wiki by;, first logon above ( create an account if new to site, chosse any name & any password as requested) then by hitting the edit button top right of this section you enter edit mode for this section. By highlighting the text between and including <html> and </html> below, then copy (ctrlC) to clip board. Paste (ctrlV) this in to a blank document in notepad + + and then save this new file as "name.html" . Open this name.html file by double clicking it or by opening it with your browser/firefox/explorer from the file open menu in the browser, ( you can download Notepad++ here [8])Enjoy!


<html> <head> <title>Build Speed Calculator Laser 808</title> <script> // N:B: This program takes Latent heat in to account only in build times, not in Frequency caculations! // It Caculates diffusivity limit using Fourer's 2nd Law, // Its durations do not include time for imaging or corection through vaporisation. // Some metal types diffusivity values have not been found, anyone can add them and remove commented out lines. // Program by Rapatan Tansen 5/2011 var stage; var vaporized = 999999999; var color = 'ffffff'; var ratio_required_for_cube_power_input_to_drop_below_vaporisation=0; var ratio_power_input_drop_achievable_by_beam_scan_rate_doubling=0; var multipass_build_slow_down_power_down_factor=0; var ratio_needed_to_increase_maximum_hardware_scan_by_to_avoid_vaporisation=0; var practicle_build_duration_message1=; var practicle_build_duration_message2=; var practicle_build_duration_message3=; var scenario=;

function getValue(t) { // function to go and fetch entry data variables by name from 'form' called 'calcform' ( see calcform at bottom of program)

  var i = document.getElementById('calcForm');
  var val = '0';
  for ( var j = 0; j < i.elements.length; j++ ) {
    if (i.elements[j].name == t) { // Finds name of variable in table of input variables

val = i.elements[j].value;

    }
  }
  return( Number(val) );

}

function setValue(t, v) { // function to go and put entry data variables by name from 'form' called 'calcform'

  var i = document.getElementById('calcForm');
  for ( var j = 0; j < i.elements.length; j++ ) {
    if (i.elements[j].name == t) { // Finds name of variable in table of input variables

i.elements[j].value = v;

    }
  }

}

function makeOutput() {

   var depth = (getValue('depth')); // in metres
var out = '';
   var beamspeed = depth / (meltTime(depth) + meltingTime(depth));
   var cubes = ( getValue('object_side_length_x')/100 * getValue('object_side_length_y')/100 * getValue('object_side_length_z')/100 ) / (depth*depth*depth); // x y z in cm convert to m , cubes in whole area fill not taken in to account here as preheat applied to whole area
   var fillfactor = getValue('fill') / 100;
   var passtime = cubes * ( 1 - fillfactor ) * depth / getValue('max_beam_speed');  // Time to pass cubes not melted
   var totalmelttime = cubes * ( meltTime(depth) + meltingTime(depth) ) * fillfactor;

var finaltime = (totalmelttime + cubes*preheatTime(depth) + passtime) /60/60; // totalmelttime is taking in to accountthe fill factor, but preheat time is all build area (via cubes), passtime is kipped area var totalvaptime = .001*cubes * ( meltTime(depth) + meltingTime(depth) + boilTime(depth) + boilingTime(depth) );

out += 'build slow down factor;' + (diffusionDeflectionHardwareLimitsOnBuildTime(depth)).toPrecision(3) + ' Number of beam passes ; ' + (achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth) ).toPrecision(3) + '
'+'
' ; out += 'Beam power leaving gun: ' + BeamPowerLeavingGun() + ' W ( Over 150 W requires Darpa license)
'; out += 'Build duration with metal diffusivity & deflection coil speed limit: melting time ' + (((totalmelttime/60)/60)*diffusionDeflectionHardwareLimitsOnBuildTime(depth)).toPrecision(3) + ' hours + preheating time ' + ((cubes * preheatTime(depth)/60/60)*diffusionDeflectionHardwareLimitsOnBuildTime(depth)).toPrecision(3) + ' hours + skipping time ' + (passtime/60/60).toPrecision(2) + ' hours = ' + ((finaltime)*(diffusionDeflectionHardwareLimitsOnBuildTime(depth))).toPrecision(3) + ' hours to build

'; out += ' ' + practicle_build_duration_message1 + '
' + practicle_build_duration_message2 + ' '+ practicle_build_duration_message3 + '
' ; out += 'Desired speed for Digital to Analogue converter controling beam power switching Off and On to achieve required melting : ' + ((((1/( (meltTime(depth)) + (meltingTime(depth)) ))*(diffusionDeflectionHardwareLimitsOnBuildTime(depth))).toPrecision(8))/1000000) + ' MHz

';


out += 'Other info;
' ; out += ' Build time ignoring metal diffusivity limit: melting time ' + ((totalmelttime/60)/60).toPrecision(3) + ' hours + preheating time ' + (cubes * preheatTime(depth)/60/60).toPrecision(3) + ' hours + skipping time ' + (passtime/60/60).toPrecision(3) + ' hours = ' + (finaltime).toPrecision(3) + ' hours to build
'; out += ' Scenario : ' + scenario + ' .....
'; out += ' Total vaporisation time of 1000th of volume of part: ' + (totalvaptime/60/60).toPrecision(2) + ' hours
'; out += ' Number of cubes within part: ' + (cubes).toPrecision(5) + '
';


out += ' Melt time 1 cube ( depth^3) ' + (meltTime(depth)).toPrecision(3) + ' S max thread exposure duration is ' + (maxExposureDuration(depth)).toPrecision(2) + ' S
'; // out += ' X Deflection coil scan sate ignoring diffusion limit: ' + (rasterXScanRate(depth)).toPrecision(5) + ' Hz .... X deflection coil scan rate taking in to acount diffusion limit ' + (maxThreadExposureXScanRate(depth)).toPrecision(5) + ' Hz ....
'; out += ' Cube melt time no diffusion limit ' + (meltTime(depth)).toPrecision(4) + ' S Cube melt time with diffusion limit ' + (maxExposureDuration(depth)).toPrecision(4) +' S ....
';

out += ' beam speed : ' + (beamspeed).toPrecision(5) + ' m/s ..... ';


out += ' Time spent on moving beam across non-treated areas: ' + (passtime/60/60).toPrecision(2) + ' hours
';


  out += ' Checks; 
' ; out += ' solid phase: ' + meltTime( depth ) * 1000; out += ' μs melting phase: ' + meltingTime( depth ) * 1000; out += ' μs liquid phase: ' + boilTime( depth ) * 1000; out += ' μs boiling phase: ' + boilingTime( depth ) * 1000; out += ' μs '; out += ' δT solid ' + solidTemp( meltTime(depth), depth ) + ' ' ; out += ' T melting ' + ( solidTemp( meltTime(depth), depth ) + getValue('preheat') ) + '
' ; out += ' practicle_build_speed_factor_output via scnario sub routine with max raster rate check ' + (diffusionDeflectionHardwareLimitsOnBuildTime(depth)).toPrecision(3) + '
The upped multipass scan rate is this amout larger than the entered scanrate limit ( limited by hardware ) ' + (practicalDurationMultiplicationFactor(depth)).toPrecision(3) +'
'; out += ' multipass_build_slow_down_power_down_factor (when none = 1) ' + (diffusionDeflectionHardwareLimitsOnBuildTime(depth)).toPrecision(3) +'
'; out += ' cube Power Reduction Required To Avoid Vaporiseation (when none = 1) ' + (cubePowerReductionRequiredToAvoidVaporiseation(depth)).toPrecision(3) +'
'; out += ' achievable Cube Power Drop To Avoid Vaporisation Through Beam Scan Speed Increase ' + (achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth)).toPrecision(3) +'
'; out += '
' ;
out += '
Results
';
  for ( i = 1 ; i <= getValue('steps'); i++ ) {
     var t = i * getValue('timestep');
     var res = calcTemp(t, depth);
     
out = out + '';
  }
out = out + '
TimeTemperature of unit cubeStage
' + t + '' + res + ''+ stage +'
';
  return(out);

}


function mass(depth) {

  return(getValue('density_solid') * depth * depth * depth ); // get mass of box KG ,cubing lenght each lenght from cm to m to get volume x density giving mass kg

}

function WallSocketPower() {

  return power = getValue('current_beam') * getValue('voltage_gun')*(1/(getValue('wallplugefficiency')/100));    

}

function BeamPowerLeavingGun() {

  return power = (getValue('current_beam') * getValue('voltage_gun'));    

}

function beamPower() {

  return power = (getValue('current_beam') * getValue('voltage_gun')*(getValue('BeamToMetalAbsorbtionEfficiency')/100));    

}


function preheatTime(depth) {

  var d_T =  getValue('preheat') - getValue('InitialRoomTempinK'); //   all Kelvin  To det the duration up to preheat temp first remove the starting temprature ie room temp 18C 291 from preheat temp
  return(d_T * mass(depth) * getValue('shc_solid') / beamPower() );  // mass KG beam W  required change in temprature times specific heat solid divided by supplied beam power

}

function meltTime(depth) {

  var d_T = getValue('melting_point') - getValue('preheat');
  return(d_T * mass(depth) * getValue('shc_solid') / beamPower() );

}

function meltingTime (depth) {

  return( mass(depth) * getValue('heat_of_fusion_melt') / beamPower() );

}

function boilTime (depth) {

  var d_T = getValue('boiling_point') - getValue('melting-point');
  return(d_T * mass(depth) * getValue('shc_liquid') / beamPower() );

}

function boilingTime (depth) {

  return( mass(depth) * getValue('heat_of_fusion_boil') / beamPower() ); //  checks on temp transition values

}

function vaporizeTime (depth) { return (99999); }

function solidTemp (time, depth) {

  var d_T = time * beamPower() / ( mass(depth) * getValue('shc_solid') ); //  checks on temp transition values
  return ( getValue('preheat') + d_T );

}

function liquidTemp (time, depth) {

  var d_T = time * beamPower() / (mass(depth) * getValue('shc_liquid') );
  return ( getValue('melting_point') + d_T );

} function thermalDiffusivity() { var a= ((getValue('thermal_conductivity')) / (getValue('density_solid')*getValue('shc_solid'))); return (a); // ok }

function maxExposureDuration(depth){ //all the following routines caculate limits imposed from vaporisation avoidance and hardware scan rate limits. var time=((Math.PI)/(thermalDiffusivity()))*(((getValue('melting_point')*getValue('thermal_conductivity'))/(2*((beamPower())/(depth*depth)))) *((getValue('melting_point')*getValue('thermal_conductivity'))/((beamPower())/(depth*depth)))); // Time to vaporise is solution of Fourier 2nd law; which says

   //	second difeerential (ie accleeration of change) of Temperature T with depth z is equal to one over the thermal difussivity times fist differential of temperature T against Time t
   // under steady state conditions with different tempratures at ends of a virtual section or rod or cooling path, temperature across a long cyclinder/rod/cooling path  	at any point is constant as emergy flows through bar
   //  So temperature only changes when  the rate of heat flow changes (SECOND DIFFERENTIAL ) that thus produce chages in bar 
   // solved for initial state z= 0  surface of bar and z= infintie where no change of temprature 
   //and in case where t= 0 then current temprature is equal to initial tmeprature
   // So you get above formula ; formula(5.3) see p256 - p258  in William M steen Laser material processing (version 4) chapter 5.3 
   // analytical models of one dimensional heat flow   Ie one dimension is beam spot on metal; which flows in x y and z directions are analyzed,  

return(time); }

function rasterXScanRate(depth) { // this routine calculates scanrate (Hz) based on time taken to process x axis lenght of cubes * 2 ignoring latent heat fusion var melt_cubes_across_X_lenght_in_part = (((getValue('object_side_length_x')/100)/(getValue('depth'))))

//this rate and the following subroutines are beimg compared with rate from Fourier 2nd law that does not take in to account latent heat of fusion // So we have to ignore latent heat of fusion as that only applies whereupon the melt temprature has been reached // but we are using this for the scan rate for all preheating and heating up to melt temprature, var period = 2*(melt_cubes_across_X_lenght_in_part*((meltTime(depth)))); // shouold this be maxExposureDuration(depth) return ( 1/(period)); }

function maxThreadExposureXScanRate(depth) { // this routine caclulates the upped scan rate (Hz) caused my the need for multipasses of beam.

  var multi_pass_period = (((maxExposureDuration(depth)))*((getValue('object_side_length_x')/100)/(getValue('depth')))); 
  // 
  // .toFixed() ROUND UP DOES NOT WORK CHECK WITH PROGRAMMERis a round up form of command  cubemelttime/max exposure duration for thread 
  return ((1/(multi_pass_period)));

} function cubePowerReductionRequiredToAvoidVaporiseation(depth) { // this routine caclulates the required cube power down ratios to avoid vaporisation.

  var ratio_required_for_cube_power_input_to_drop_below_vaporisation= (((meltTime(depth)))/(maxExposureDuration(depth))); 
  // 
  // 
  return (ratio_required_for_cube_power_input_to_drop_below_vaporisation);

}

function achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth) {

   // this routine caclulates the required cube power down ratios to avoid vaporisation.

var ratio_power_input_drop_achievable_by_beam_scan_rate_doubling = ((getValue('max_hardware_limited_raster_scanrate'))/(maxThreadExposureXScanRate(depth)));

  // each bite at the cherry with no vaporisation is done at freq.of maxThreadExposureXScan Rate(depth) Hz how many of these can fit in Max hardware limit scan rate
  // If say 8 bites at the cherry are required to transfer enouch heat to cube,
  // than a 8x maxThreadExposureXScan Rate(depth)Hz value of Max hardware scanrate would mean that no consequential delay.
  // this case only works for max hardware scan rate being bigger than depower factor times rasterXscanrate 
  //(meltTIme/max exposure) 
  // If max hardware scan rate is smaller ie returned ratio_power_input_drop_achievable_by_beam_scan_rate_doubling < 1
  // then must apply (1<) cube reduction required to duration in main subroutine.
  if ( ratio_power_input_drop_achievable_by_beam_scan_rate_doubling < 1 ) {
  // It can be low for two reasons, 
  //1)  if max hardware is low / nearly 0  it will still just times build by factor required    
  //2)   and max threadexposure scan is high ( which is commmen )  
  // when max hardware is low we want it to increase duration and this fraction of 1 shows how far too low 
  // need to hand back how far too low.. Also still need to test for the remaining factor to times build speed 
  // by setting ratio_power_input_drop_achievable_by_beam_scan_rate_doubling=1  but not here do in main subroutine.
   // no doubling of beam speed possible so reduction must be achieved through build duration lengthening.          
   } else {
   // doubling of beam speed possible use above calculated value rounded up DO rounding later LATER &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 

// result should be 2 or higher what happens when not all needed need another check? // So caclulate required factor then

   //	IF achievable factor is higher set achivable equal to required. 

var ratio_power_input_drop_achievable_by_beam_scan_rate_doubling=(ratio_power_input_drop_achievable_by_beam_scan_rate_doubling).toPrecision(2) if ( (cubePowerReductionRequiredToAvoidVaporiseation(depth)) < ratio_power_input_drop_achievable_by_beam_scan_rate_doubling ) {

    //  all the required power drop can be achieved through increased beam speed / increased raster speed.

var ratio_power_input_drop_achievable_by_beam_scan_rate_doubling=(cubePowerReductionRequiredToAvoidVaporiseation(depth)) ;


       } else {
   // the increased beam speed cannot account for all required reduction, 

//ie need to lenghten build duration by the outstanding amount & drop or pulse power

       }
  }
  return (ratio_power_input_drop_achievable_by_beam_scan_rate_doubling);

}


function practicalDurationMultiplicationFactor(depth) { // this calculates how many times higher the upped scan rate is compared to the max hardware limited scan rate

  var factor = (maxThreadExposureXScanRate(depth))/(getValue('max_hardware_limited_raster_scanrate')); // .toFixed() needs to be rounded up TOP not bottom put back in later? 
  return ( factor );

}

function diffusionDeflectionHardwareLimitsOnBuildTime(depth) { // these calculations ignore the latent heat effects as vaporisation time Fourier 2nd law ignores it too.

  if ( (meltTime( depth )) < (maxExposureDuration(depth))) {
     // No Need to take a second pass  or extend build time with pulseWidthModulatebeampowerdrop, var practicle_hardware_build_speed_factor=1; practicle_build_duration_message1=; practicle_build_duration_message2=;
    var  multipass_build_slow_down_power_down_factor=1;   

practicle_build_duration_message1= ' Multi passes not required'; practicle_build_duration_message2=' Current delfection scan rate hardware limit is '+ ((getValue('max_hardware_limited_raster_scanrate')).toPrecision(7)) + ' Hz '; // kug

 	      practicle_build_duration_message3='  Required deflection coil scan rate hardware limit (Hz) would need to be ' + ((rasterXScanRate(depth)).toPrecision(7)); // how can I add so outputs desired_scan_rate_possible_new_redesign design= practicalDurationMultiplicationFactor(depth)*rasterXScanRate(depth)
          scenario=' A   Coil drivers can achieve required speed & metal diffusion limit not reached, so no multipass required ( design could be pushed harder?)';
  } else {
           // If cube melt time is above max exposuire duration; So Need to take a second pass or extend build duration at reduced power, so as not overload metal diffusion rate 
           // or will multi pass demand too higher speed of deflection coil; So need to increase build duration and drop power.

// Reduction by ratios "ratio_required_for_cube_power_input_to_drop_below_vaporisation" (rounded up) "ratio_power_input_drop_achievable_by_beam_scan_rate_doubling" // remaining requirement achieved through extending build duration & power drop Pulse Width Modulated beam power drop // = (needs1<)ratio_required_for_cube_power_input_to_drop_below_vaporisation/(or limited to required amount) ratio_power_input_drop_achievable_by_beam_scan_rate_doubling = multipass_build_slow_down_power_down_factor

            // calculate remaining cube power drop thats required after increasing the beam speed up as much as posible ( or as much as needed so result is 1 for multipass_build_slow_down_power_down_factor)	      
          if ( achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth) > 1 ) {

var multipass_build_slow_down_power_down_factor=((cubePowerReductionRequiredToAvoidVaporiseation(depth))/(achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth)));

if ( multipass_build_slow_down_power_down_factor < 2 ) { // No build & power slow down is required, all achieved through beam speed up

                      practicle_build_duration_message1= ' Multi passes required , deflection coil hardware can cope with beam moving faster, ';
              var     multipass_build_slow_down_power_down_factor =1;  

practicle_build_duration_message2=' Delfection scan rate is '+ (((maxThreadExposureXScanRate(depth))*(achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth))).toPrecision(7)) + ' Hz '; // + maxThreadExposureXScanRate(depth) add later

                      practicle_build_duration_message3=;

scenario=' B BeamSpeed/Scanrate rate increased coil drivers can cope with increase';

      		    } else {
                 // multipass_build_slow_down_power_down_factor >= 2 So need both deflection coil increase and build time lenghtening with power drop
                    practicle_build_duration_message1='  To avoid lenghtened build duration (above), caused by deflection coil hardware being too slow, increase maximum hardware deflection coil speed by improving coil drvier circuits (more expensive drivers running coils at incresed volatges and currents ) ';

practicle_build_duration_message2=' Current delfection scan rate is '+ (((maxThreadExposureXScanRate(depth))*(achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth))).toPrecision(7)) + ' Hz '; // + maxThreadExposureXScanRate(depth) add later practicle_build_duration_message3=' To avoid build time lenghtineing required deflection coil scan rate (Hz) would need to be ' + ((practicalDurationMultiplicationFactor(depth)*rasterXScanRate(depth)).toPrecision(7)); // how can I add so outputs desired_scan_rate_possible_new_redesign design= practicalDurationMultiplicationFactor(depth)*rasterXScanRate(depth)

                 scenario=' C   BeamSpeed/Scanrate rate increase & Increase build duration  Coils cannot go fast enough use pulsed power';

} } else { // find how far too low max hardware scan rate is; 1/ratio_power_input_drop_achievable_by_beam_scan_rate_doubling give as duration lengthening factor & multiply with maxThreadExposureXScanRate(depth) the freq based on maxdurationTIme on cube

		var  multipass_build_slow_down_power_down_factor= (1/(achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth)));


practicle_build_duration_message1=' Coils operate so slow that they cannot even meet a multipass scan rate, increase maximum hardware deflection coil speed by improving coil drvier circuits (more expensive drivers running coils at incresed volatges and currents ) '; practicle_build_duration_message2=' Current delfection scan rate hardware limit is '+ ((getValue('max_hardware_limited_raster_scanrate')).toPrecision(7)) + ' Hz '; // kug practicle_build_duration_message3=' Scan rate required to achive even multipass scanrate deflection coil scan rate, hardware limit (Hz) would need to be ' + ((multipass_build_slow_down_power_down_factor*(getValue('max_hardware_limited_raster_scanrate'))).toPrecision(7))+' Hz To achive no extension in build duration a single pass scan rate, deflection coil scan rate hardware limit (Hz) would need to be ' + ((multipass_build_slow_down_power_down_factor*(getValue('max_hardware_limited_raster_scanrate'))*cubePowerReductionRequiredToAvoidVaporiseation(depth)).toPrecision(7)); //

                 scenario=' D    Increase build duration, Coils cannot go fast enough use pulsed power';

}

// let it equal 1 to caculate remainder //NOT NEED? ratio_power_input_drop_achievable_by_beam_scan_rate_doubling = 1; // multipass_build_slow_down_power_down_factor=(cubePowerReductionRequiredToAvoidVaporiseation(depth))/ (achievableCubePowerDropToAvoidVaporisationThroughBeamScanSpeedIncrease(depth));

          }
      return (multipass_build_slow_down_power_down_factor);

}

function calcTemp(time, depth) {

  var res = 0;
  var time_solid = meltTime( depth );
  
  if ( time < time_solid ) {
     stage = 'solid A'

color = 'ffffff'

     // Solid
     res = solidTemp(time, depth);            
  } else {
     
     time = time - time_solid;
     var time_melting = meltingTime( depth )
     if (time <= time_melting) {
         // Melting
     stage = 'solid B'

color = 'ffffff'

         res = getValue('melting_point');
     } else {
         
         time = time - time_melting;
         var time_liquid = boilTime( depth );
         if ( time < time_liquid ) {

stage = 'Melting C' color = '0000ff'

            // Liquid
            res = liquidTemp(time, depth);
         } else {
            time = time - time_liquid;
          
            var time_boiling = boilingTime( depth );
            
            if (time <= time_boiling ) {
            stage = 'Liquid D'

color = '0000ff' // Boiling

          	res = getValue('boiling_point');

} else { time = time - time_boiling; var time_vapor = vaporizeTime( depth ); if (time <= time_vapor) {

stage = 'Vapor E' color = 'ff0000' // Vaporised

               res = 'gone';  

} else { alert('error'); }

            }
         }
      }
  }                
  return(res);

}

function selectmetal(s) { // s = metal choise field STILL TO GET FIGURES FOR Cobalt chromium , copper , gold and molybdenium, 006 before decimal means not got number yet if(s == "titanium") { setValue('preheat', 1648);// K complete data setValue('BeamToMetalAbsorbtionEfficiency', 4);//  % setValue('density_solid', 4510);// kg/m^3 setValue('melting_point',1668);// K T setValue('boiling_point', 3260);// K T setValue('shc_solid', 519);// J/kg/K setValue('shc_liquid', 519);// J/kg/K setValue('heat_of_fusion_melt',437000);// J/kg setValue('heat_of_fusion_boil', 9000000);// J/kg setValue('thermal_conductivity',19);// W/m/K K setValue('thermal_diffusivity', 0.0000081);// m^2/s check factor of 10 out?

}else if(s == "aluminium") { setValue('preheat', 640);// K complete data setValue('BeamToMetalAbsorbtionEfficiency', 10);//  % setValue('density_solid', 2700);// kg/m^3 setValue('melting_point',660);// K setValue('boiling_point', 2450);// K setValue('shc_solid', 900);// J/kg/K setValue('shc_liquid', 900);// J/kg/K check setValue('heat_of_fusion_melt',397000);// J/kg setValue('heat_of_fusion_boil', 9492000);// J/kg setValue('thermal_conductivity',226);// W/m/K setValue('thermal_diffusivity', 0.000093);// m^2/s }else if(s == "cobalt_chromium") { setValue('preheat', 001667);// K setValue('BeamToMetalAbsorbtionEfficiency', 5);//  % setValue('density_solid', 004350);// kg/m^3 setValue('melting_point',1491);// K setValue('boiling_point', 003260);// K setValue('shc_solid', 00622);// J/kg/K setValue('shc_liquid', 00622);// J/kg/K setValue('heat_of_fusion_melt',00440000);// J/kg setValue('heat_of_fusion_boil', 009830000);// J/kg setValue('thermal_conductivity',226);// W/m/K setValue('thermal_diffusivity', 0.000095);// m^2/s }else if(s == "copper") { setValue('preheat', 1063);// K copper type; C10100 name; oxygen free elctronic coppper, setValue('BeamToMetalAbsorbtionEfficiency', 5);//  %aplication for bus tube, conductors, vacuum seals , setValue('density_solid', 8900);// kg/m^3 glass to metal seals wave guides (Use C65100 for heat exchange electrical conduits) setValue('melting_point',1083);// K setValue('boiling_point', 002260);// K setValue('shc_solid', 385);// J/kg/K setValue('shc_liquid', 385);// J/kg/K setValue('heat_of_fusion_melt',00440000);// J/kg setValue('heat_of_fusion_boil', 009830000);// J/kg setValue('thermal_conductivity',391);// W/m/K setValue('thermal_diffusivity', 0.000095);// m^2/s ok Source: wikipedia }else if(s == "gold") { setValue('preheat', 1295);// K setValue('BeamToMetalAbsorbtionEfficiency',10);//  % setValue('density_solid', 19300);// kg/m^3 19.32Mg/m^3 setValue('melting_point',1335);// K setValue('boiling_point', 002260);// K setValue('shc_solid', 131);// J/kg/K setValue('shc_liquid', 00622);// J/kg/K setValue('heat_of_fusion_melt',00440000);// J/kg setValue('heat_of_fusion_boil', 009830000);// J/kg setValue('thermal_conductivity',300);// W/m/K setValue('thermal_diffusivity', 0.000095);// m^2/s }else if(s == "iron") { setValue('preheat', 1516);// K complete data setValue('BeamToMetalAbsorbtionEfficiency', 80);//  % setValue('density_solid', 7870);// kg/m^3 setValue('melting_point',1536);// K setValue('boiling_point', 3000);// K setValue('shc_solid', 460);// J/kg/K setValue('shc_liquid', 00460);// J/kg/K setValue('heat_of_fusion_melt', 275000);// J/kg setValue('heat_of_fusion_boil', 6362000);// J/kg setValue('thermal_conductivity',50);// W/m/K setValue('thermal_diffusivity', 0.0000138);// m^2/s ok Source: wikipedia }else if(s == "molybdenium") { setValue('preheat', 001667);// K setValue('BeamToMetalAbsorbtionEfficiency', 30);//  % setValue('density_solid', 004350);// kg/m^3 setValue('melting_point',1491);// K setValue('boiling_point', 003260);// K setValue('shc_solid', 00622);// J/kg/K setValue('shc_liquid', 00622);// J/kg/K setValue('heat_of_fusion_melt',00440000);// J/kg setValue('heat_of_fusion_boil', 009830000);// J/kg setValue('thermal_conductivity',226);// W/m/K setValue('thermal_diffusivity', 0.000095);// m^2/s }else if(s == "stainlesssteel") { setValue('preheat', 1430);// K stainless steel 304 complete data setValue('BeamToMetalAbsorbtionEfficiency', 78);//  % setValue('density_solid', 8030);// kg/m^3 setValue('melting_point',1450);// K setValue('boiling_point', 3000);// K setValue('shc_solid',500);// J/kg/K setValue('shc_liquid',500);// J/kg/K check setValue('heat_of_fusion_melt',300000);// J/kg setValue('heat_of_fusion_boil', 6500000);// J/kg setValue('thermal_conductivity',20);// W/m/K setValue('thermal_diffusivity', 0.000005);// m^2/s ok tainless 304 }else if(s == "tungsten") { setValue('preheat', 3390);// K complete data setValue('BeamToMetalAbsorbtionEfficiency', 60);//  % setValue('density_solid', 19300);// kg/m^3 setValue('melting_point',3410);// K setValue('boiling_point', 5930);// K setValue('shc_solid', 140);// J/kg/K setValue('shc_liquid', 140);// J/kg/K check setValue('heat_of_fusion_melt',185000);// J/kg setValue('heat_of_fusion_boil', 4020000);// J/kg setValue('thermal_conductivity',164);// W/m/K K setValue('thermal_diffusivity', 0.0000607);// m^2/s }else if(s == "prg_test_1kg_1k_titanium") { setValue('object_side_length_x', 6.12);// this defines 6.12 cude which weighs 1Kg setValue('object_side_length_y', 6.12);// setValue('object_side_length_z', 6.12);// setValue('depth', 0.0612);// this is the whole 1Kg cube in one go setValue('preheat', 1667);// This is for testing this program is reasnable acurate. ADD X Y Z DEPTH setValue('current_beam', 1);// So ignore frequency calculation results as treating 1kg titanium block as one cube setValue('voltage_gun', 731.77);//this is set to specific heat capacity unity settings ie 622Watt at 1Kg Titanium at 1K setValue('BeamToMetalAbsorbtionEfficiency', 10);//  % setValue('density_solid', 4510);// kg/m^3 setValue('melting_point',1668);// K T setValue('boiling_point', 3260);// K T setValue('shc_solid', 519);// J/kg/K setValue('shc_liquid', 519);// J/kg/K setValue('heat_of_fusion_melt',437000);// J/kg setValue('heat_of_fusion_boil', 9000000);// J/kg setValue('thermal_conductivity',19);// W/m/K K setValue('thermal_diffusivity', 0.0000081);// m^2/s check factor of 10 out? setValue('timestep', 0.5);// s setValue('steps', 40);// } }

</script> </head> <body>

<form id="calcForm">

Build Speed Calculator Laser 808 <select name="metal_selector" onChange="selectmetal(this.value);" style="font-size: 90%;"> <option value="aluminium">Aluminium</option> <option value="iron">Iron</option> <option value="stainlesssteel">StainlessSteel</option> <option value="titanium" selected="selected">Titanium</option> <option value="tungsten">Tungsten</option> <option value="prg_test_1kg_1k_titanium">Prg Test 1Kg 1K Titan.</option> </select> How much money should you spend on; Power Supply? Deflection Mirror drive circuits? Digital to Analogue converter?


Final printed object size: x <input type="text" size="6" name="object_side_length_x" value="3" style="border: solid 1px #FF9900; font-size:110%;"/> y <input type="text" size="6" name="object_side_length_y" value="3" style="border: solid 1px #FF9900; font-size:110%;"/> z <input type="text" size="6" name="object_side_length_z" value="3" style="border: solid 1px #FF9900; font-size:110%;" /> cm     Layer depth defining final print resolution: <input type="text" size="6" name="depth" value="0.000027" style="border: solid 1px #FF9900; font-size:110%;"/> m       Fill: <input type="text" size="2" name="fill" value="100" />%


Initial Room Temprature in Kelvin: <input type="text" size="4" name="InitialRoomTempinK" value="291" /> K              Metal preheat temperature ( normally 20C below melt tempreature ): <input type="text" size="4" name="preheat" value="1648" style="border: solid 1px #FF9900; font-size:110%;"/> K

Wall plug efficiency: <input type="text" size="3" name="wallplugefficiency" value="85" /> %                                                  Beam to metal absorbtion efficiency: <input type="text" size="3" name="BeamToMetalAbsorbtionEfficiency" value="10" /> %

Wall socket power:: <input type="text" size="2" id="RequiredWallSocketPower" value="" /> W         laser voltage : <input type="text" size="4" name="voltage_gun" value="50"style="border: solid 1px #FF9900; font-size:110%;" /> V      Laser current: <input type="text" size="2" name="current_beam" value="1" style="border: solid 1px #FF9900; font-size:110%;"/> A     Beam power entering metal: <input type="text" size="4" id="powercell" value="" /> W        

Maximum hardware speed Mirror Scan Rate Mirror Scan Rate: <input type="text" size="6" name="max_hardware_limited_raster_scanrate" value="98000" style="border: solid 1px #FF9900; font-size:110%;"/> Hz ( typical ? 64000)   &nbsp
Maximum beam speed used when skipping nonpart areas: <input type="text" size="6" name="max_beam_speed" value="8000" style="border: font-size:110%;" /> m/s   &nbsp


Constants; Solid density: <input type="text" size="6" name="density_solid" value="4350" style="font-size:50%;color:grey"/> kg/m3     Melting point: <input type="text" size="6" name="melting_point" value="1668" style="font-size:50%;color:grey"/> K     Boiling point: <input type="text" size="6" name="boiling_point" value="3260" style="font-size:50%;color:grey"/> K     Solid specific heat capacity: <input type="text" size="6" name="shc_solid" value="622" style="font-size:50%;color:grey"/> J/kg/K
Liquid specific heat capacity: <input type="text" size="6" name="shc_liquid" value="622" style="font-size:50%;color:grey"/> J/kg/K     Latent heat of fusion/melting: <input type="text" size="6" name="heat_of_fusion_melt" value="440000" style="font-size:50%;color:grey"/> J/kg     Latent heat of Fusion/boiling: <input type="text" size="6" name="heat_of_fusion_boil" value="9830000" style="font-size:50%;color:grey"/> J/kg
Thermal Conductivity : <input type="text" size="6" name="thermal_conductivity" value="226" style="font-size:50%;color:grey"/> W/m/K     Thermal Diffusivity: <input type="text" size="6" name="thermal_diffusivity" value="0.000095" style="font-size:50%;color:grey"/> m2/s     Table output Format definition, Time step: <input type="text" size="6" name="timestep" value="0.00000005" style="font-size:50%;color:grey" ;/> s      number of Steps: <input type="text" size="6" name="steps" value="40" style="font-size:50%;color:grey"/>
<input type="submit" value="Calculate build duration" onClick="document.getElementById('output').innerHTML = makeOutput(); document.getElementById('powercell').value = beamPower(); return(false)" /> <input type="submit" value="Calculate required wall socket power" onClick="document.getElementById('outputWallP').innerHTML = makeOutput(); document.getElementById('RequiredWallSocketPower').value = WallSocketPower(); return(false)" />

</form>

</body>

</html>