Monday, May 31, 2010
selective laser sintering part 5: the laser
Just a quick post, since it's been a little bit since I made one. My thesis has been keeping me busy these days, which is good since there's been a lot of waiting for things to come in the mail. I ended up settling on a 1000mw 808nm laser diode for the first tests, and ordered some wide-spectrum glasses (600-1100nm, OD4) just incase I need to try a few different diodes.
I built a current-limited variable voltage supply using a reference design in the LM317 datasheet this past weekend, and added some large capacitors to try and filter out any large bumps. The laser diode didn't come with a datasheet, but the ebay seller listed it as running at approximately 2.2V at 1.2 amps. The supply is limited to 1.2 amps, but so far very slowly adjusting the voltage up (with a 10-turn pot), I'm only at ~1 amp at 2.5 volts, and that is about as far as I dare turn it up just yet.
There hasn't been much tinker time with the laser yet, but I did take it to some failed prints made with black ABS. The laser has no trouble melting the black ABS plastic from makerbot, or even cutting it and boring holes in it, depending on the distance. Using a print that's only a single layer thick, the laser seemed to be able to cut through fairly quickly, but also if the focus was such that a small area about 0.5 - 1mm wide was illuminated (instead of a point), it melted the layer rather quickly -- I think this is going to work just fine.
Now, to find some ABS plastic in powder form. The laser didn't heat or cut white polystyrene, so I think colour is still definitely going to be an issue here -- particularly in finding a black thermoplastic powder. I'll have to try some tests with the powder coatings that I have from earlier as well, although our tests with a 20W CO2 laser weren't encouraging, and the end result was partially fused but very, very brittle. This kind of makes sense, since powder coatings are meant to be very thin coatings, and are also meant to cure over 6-12 minutes at relatively high temperatures. I'm eager to try Vik's suggestion of a dark coloured sugar, just out of curiosity, to see what that might be like.
I have also decided to replace the SLS powder test rig that I described in previous posts with a much more full sized model, and I've been working on building this in my spare time over the past few weeks. More on this soon, hopefully. :)
thanks for reading,
Wednesday, May 12, 2010
Hydra-MMM v1.4 Finally Released!
- One of the biggest changes to the new firmware is the addition of slave PID temperature control. This allows the main Arduino Mega to focus all its attention on the movement and acceleration computations, while the slave Arduino is busy doing PID calculations to regulate all the temperatures. Using this method, I was getting a 20% performance increase on the master firmware which means less pausing between print commands. This leads to improved print quality and smoother motion. See the readme file in the sourceforge release for details about the slave setup. In addition to the option for slave PID control, the internal PID control on the master firmware has also been updated so that it can control up to 3 different temperatures. This is intended to be used with 2 extruders and a heated build table. I don't think many users will require more than that at this point in time, but it is very easy to add more if required.
- Another big change in the v1.4 release that has been very helpful to me is the addition of absolute position logging via an attached EEPROM. This allows the machine to retain its knowledge of position even after the machine is powered off. While the user coordinate system may change from build to build, an additional absolute coordinate system has been added, and this is what is stored on the EEPROM. I have tested this using the 512 byte EEPROM already included with most Arduinos as well as an external AT24C1024 connected via I2C. While I am currently only using this storage for the absolute positioning variables, there is lots of potential here for new features in the future.
- There has also been a lot of changes to the multi-headed operations included in the firmware. Now that I have a machine that I can test these functions on, I have been able to improve the routines and fix any minor bugs that were present. I have successfully used these functions in several multi-tool builds that I have done and they are very simple to implement. My next big task in this arena is likely going to be figuring out how to generate multi-funtion Gcodes that can be used for doing both milling and prototyping or something of that nature. At the moment I am just splicing together 2 seperature Gcodes with the appropriate tool switching commands in between. Automating this process would be a nice addition and I believe skeinforge has the ability to calculate both additive and subtractive toolpaths so it should be possible.
If you want more details, the full list of changes from the readme file in the sourceforge release is below
- Added slave temperature control so that the master Arduino can allocate all its resources to handling the machine movement and not dealing with PID temperature control, see the new Hydra_Slave_Temp_Control sketch for the slave firmware and be sure to edit the master firmware to use slave control as well
- Added M301 and M302 commands so you can easily check to make sure your slave Arduino is communicating to the master correctly
- Internal PID control (if you chose to not use slave control) is now updated so that up to 3 temperatures can each be PID controlled by the master (extruder 1, extruder 2, and heated table)
- EEPROM position logging so that absolute positions can be retained even after being powered off, exiting the GUI triggers this to happen (M900 command)
- Added G80 and G81 drill cycle commands for intended use with PCB milling (advanced drill cycle operations not currently supported), this is untested though so use at your own risk!
- Added support for Ncodes at the beginning of each line with the program line as the parameter (ie "N51 G1 X1.00 Y0.00 Z0.00 F30") as programs like MasterCAM like to add this in the gcode file
- Added M120 and M121 codes to run the stepper extruder forward and backward, can use these to pull filament backwards at the end of a move to prevent excess nozzle oozing or to start filament flow at the beginning of a layer
- Added a G5 jog gcode for simple movements without needing to know your current position
- Added ability to jog individual Z-axes using the T18 command without triggering the switch_tool routine
- Added a M6 tool change Gcode, the continue_pin button must be pressed once this is done to continue
- added M500 Gcode command that waits for user confirmation (by pushing the continue_pin button) before proceeding
- Limit switch current position handling updated to give more accurate end positioning
- Extruder federate calculations updated to provide better results with our current setup (0.5mm nozzle)
- sticky federates are now supported
- minor bug fixes to multi-headed tool operations (Tcodes) now that I actually have a machine to test them on
- several updates to the startup and exit routines
- updated steps_to_take variables to be longs instead of integers because users with high microstepping rates were able to overrun the integer data types on long moves (thanks martin!)
- stepper motor driver enable logic can now be swapped for different motor drivers so that HIGH or LOW can be used to enable the driver