| 
									
										
										
										
											2021-07-22 00:40:40 +02:00
										 |  |  | # Using PWM tools
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-26 16:25:09 +01:00
										 |  |  | This document describes how to setup a PWM-controlled laser or spindle | 
					
						
							|  |  |  | using `output_pin` and some macros. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## How does it work?
 | 
					
						
							|  |  |  | With re-purposing the printhead's fan pwm output, you can control | 
					
						
							|  |  |  | lasers or spindles. | 
					
						
							|  |  |  | This is useful if you use switchable print heads, for example | 
					
						
							|  |  |  | the E3D toolchanger or a DIY solution. | 
					
						
							|  |  |  | Usually, cam-tools such as LaserWeb can be configured to use `M3-M5` | 
					
						
							|  |  |  | commands, which stand for _spindle speed CW_ (`M3 S[0-255]`), | 
					
						
							|  |  |  | _spindle speed CCW_ (`M4 S[0-255]`) and _spindle stop_ (`M5`). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Warning:** When driving a laser, keep all security precautions | 
					
						
							|  |  |  | that you can think of! Diode lasers are usually inverted. | 
					
						
							|  |  |  | This means, that when the MCU restarts, the laser will be | 
					
						
							|  |  |  | _fully on_ for the time it takes the MCU to start up again. | 
					
						
							|  |  |  | For good measure, it is recommended to _always_ wear appropriate | 
					
						
							|  |  |  | laser-goggles of the right wavelength if the laser is powered; | 
					
						
							|  |  |  | and to disconnect the laser when it is not needed. | 
					
						
							|  |  |  | Also, you should configure a safety timeout, | 
					
						
							|  |  |  | so that when your host or MCU encounters an error, the tool will stop. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-04 00:10:09 +02:00
										 |  |  | For an example configuration, see [config/sample-pwm-tool.cfg](/config/sample-pwm-tool.cfg). | 
					
						
							| 
									
										
										
										
											2021-03-26 16:25:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Current Limitations
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is a limitation of how frequent PWM updates may occur. | 
					
						
							|  |  |  | While being very precise, a PWM update may only occur every 0.1 seconds, | 
					
						
							|  |  |  | rendering it almost useless for raster engraving. | 
					
						
							|  |  |  | However, there exists an [experimental branch](https://github.com/Cirromulus/klipper/tree/laser_tool) with its own tradeoffs. | 
					
						
							|  |  |  | In long term, it is planned to add this functionality to main-line klipper. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Commands
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `M3/M4 S<value>` : Set PWM duty-cycle. Values between 0 and 255. | 
					
						
							|  |  |  | `M5` : Stop PWM output to shutdown value. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Laserweb Configuration
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you use Laserweb, a working configuration would be: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GCODE START: | 
					
						
							|  |  |  |         M5            ; Disable Laser | 
					
						
							|  |  |  |         G21           ; Set units to mm | 
					
						
							|  |  |  |         G90           ; Absolute positioning | 
					
						
							|  |  |  |         G0 Z0 F7000   ; Set Non-Cutting speed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GCODE END: | 
					
						
							|  |  |  |         M5            ; Disable Laser | 
					
						
							|  |  |  |         G91           ; relative | 
					
						
							|  |  |  |         G0 Z+20 F4000 ; | 
					
						
							|  |  |  |         G90           ; absolute | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GCODE HOMING: | 
					
						
							|  |  |  |         M5            ; Disable Laser | 
					
						
							|  |  |  |         G28           ; Home all axis | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     TOOL ON: | 
					
						
							|  |  |  |         M3 $INTENSITY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     TOOL OFF: | 
					
						
							|  |  |  |         M5            ; Disable Laser | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     LASER INTENSITY: | 
					
						
							|  |  |  |         S |