UVW axes on a delta printer
I have modified the lines for M201, M203, M208, M350, M566, M574, and M906 commands as detailed here: https://duet3d.com/wiki/Configuring_multiple_independent_X-carriages_on_a_Cartesian_printer#Configuring_new_axes but it hasn't worked yet. I must be missing something.
Here is my config.g file, with the first few lines for networking removed.
; Configuration file for testing Duet Ethernet and Wifi
; Communication and general
;*** Networking - Enable for both WiFi and Ethernet boards.
M552 S1 ; Turn network on
;*** Ethernet networking: Adjust the IP address and gateway in the following 2 lines to suit your network
;M555 P2 ; Set output to look like Marlin
G21 ; Work in millimetres
G90 ; Send absolute coordinates…
M83 ; ...but relative extruder moves
; Disable Fan 1 thermostatic mode
M106 P1 H-1
; Axis and motor configuration
M569 P0 S0 ; Drive 0 goes backwards
M569 P1 S1 ; Drive 1 goes forwards
M569 P2 S0 ; Drive 2 goes backwards
M569 P3 S1 ; Drive 3 goes forwards
M569 P4 S1 ; Drive 4 goes forwards
M569 P5 S1 ; Drive 5 goes forwards
M569 P6 S1 ; Drive 6 goes forwards
M569 P7 S1 ; Drive 7 goes forwards
M584 X0 Y1 Z2 U4 E3 ; set up extra axis?
M574 X2 Y2 Z2 U0 S1 ; set endstop configuration (all endstops at high end, active high)
;*** The homed height is deliberately set too high in the following - you will adjust it during calibration
M665 R105.6 L215.0 B85 H250 ; set delta radius, diagonal rod length, printable radius and homed height
M666 X0 Y0 Z0 U0 ; put your endstop adjustments here, or let auto calibration find them
M350 X16 Y16 Z16 U16 E16:16 I1 ; Set 16x microstepping with interpolation
M92 X80 Y80 Z80 U80 ; Set axis steps/mm
M906 X1000 Y1000 Z1000 U1000 E800 I60 ; Set motor currents (mA) and increase idle current to 60%
M201 X1000 Y1000 Z1000 U1000 E1000 ; Accelerations (mm/s^2)
M203 X20000 Y20000 Z20000 U20000 E3600 ; Maximum speeds (mm/min)
M566 X1200 Y1200 Z1200 U1200 E1200 ; Maximum instant speed changes mm/minute
M305 P0 T100000 B3950 R4700 H30 L0 ; Put your own H and/or L values here to set the bed thermistor ADC correction
M305 P1 T100000 B3974 R4700 H30 L0 ; Put your own H and/or L values here to set first nozzle thermistor ADC correction
M305 P2 T100000 B3974 R4700 H30 L0 ; Put your own H and/or L values here to set 2nd nozzle thermistor ADC correction
M570 S180 ; Hot end may be a little slow to heat up so allow it 180 seconds
; Adjustments for J-heads used as dummy heaters on test rig
M307 H0 A250 C140 D5.5 B1
M307 H1 A250 C140 D5.5 B0
M307 H2 A250 C140 D5.5 B0
M106 P1 S-1 ; disable thermostatic mode for fan 1
; Tool definitions
M563 P0 D0 H1 ; Define tool 0
G10 P0 S0 R0 ; Set tool 0 operating and standby temperatures
;*** If you have a single-nozzle build, comment the next 2 lines
;M563 P1 D1 H2 ; Define tool 1
G10 P1 S0 R0 ; Set tool 1 operating and standby temperatures
M92 E663:663 ; Set extruder steps per mm
M563 P2 D2 ; Define tool 2 BASE
;*** If you have a single-nozzle build, comment the next 2 lines
M563 P3 D3 ; Define tool 3 BASE
; Z probe and compensation definition
;*** If you have a switch instead of an IR probe, change P1 to P4 in the following M558 command
M558 P1 X0 Y0 Z0 ; Z probe is an IR probe and is not used for homing any axes
G31 X0 Y0 Z4.80 P500 ; Set the zprobe height and threshold (put your own values here)
;*** If you are using axis compensation, put the figures in the following command
M556 S78 X0 Y0 Z0 ; Axis compensation here
M208 S1 Z-0.2 ; set minimum Z
T0 ; select first hot end
M302 P1 ; Allow cold extrude for testing
I should mention that I am using a Duet Ethernet, with the 5 extension board. I have X,Y,Z, and E0 connected in the standard configuration on the Duet, and the U axis stepper is currently connected to the extension board. The extension seems to be connected and working fine. When I configure the extra U stepper motor as a tool (E1 or Tool1 in Web Control) instead of as an axis I can get it to move.
The commands you link to are for setting extra X axes on a Cartesian printer yet you have a Delta?
Correct. I am using a delta printer, but I would like to add an extra axis, U, independent of the other 3 A, B, C towers. The only tutorial I could find online was about adding a U axis as an extra X, but I am hoping to apply the same method to add a generic controllable U axis to my delta printer.
The UVW axes only apply to Cartesian CoreXY kinematics right now.
There is a feature request to add an additional axis to track Z movement:
Is that what you are looking to do?
Huh that's too bad that it isn't possible right now. I am essentially trying to build a base for this printer that allows me to 3D print on the surface of a cylinder. If it cannot be implemented as an axis I'll implement it as a tool. Although it would be great to use the UVW Cartesian axes along with a delta configuration printer.
Please put in a firmware request (referencing the other request I linked) into the firmware wishlist forum asking for Cartesian and Delta axis to be available at the same time. David will be able to comment on how much work this is and other users should be able to say how useful it would be.
Sounds great! I will do that. Thank you. In the mean time, is using the extra motor as a tool my best option for a work around? I am creating my own G-code generator, so it doesn't matter to me so much what the axis is called, but I don't want to do something that creates an impossible amount of work to drive, or simply doesn't work.
The motion control for your extra axis should be quite easy to implement and I can probably make the necessary changes in the next 1.19 alpha release. The more difficult issue is how homing should work, which needs careful thought.
Yes, homing will be a bit strange. I plan on using another end stop for this new axis, and basically treating it as its own 4th coordinate. (X, Y, Z, U) And that is fantastic news that this might be possible in the next release.
I am open to suggestions about what homing buttons should be provided for a delta + U and potentially V, W axis printer, what homing files should be used, and how to avoid breaking compatibility for existing users.
I'm still thinking about how I would like it to work, given those restrictions. My plan was to add an end stop switch to the U rotational axis. It won't rotate continuously, so when it rotates in one direction far enough it will hit the switch. Basically if it operates in the same way as a standard axis that's all I need. (Although this axis is rotational instead of linear so I end up with the problem of the "steps per mm" requiring a conversion to degrees or radians, but that's easy to do.)
Here's a side question related to this. If I want to add my own support for a new kinematic system, is there a way to do it? I have the inverse kinematics all worked out for the system I am trying to implement, but it is unlikely that it will be something you would like to officially support, outside of the small request I made above.
It's much easier to add new kinematics in firmware 1.19 thanks earlier versions. You write a new class to represent your kinematics, inheriting the Kinematics base class and implementing the various virtual functions.
I still need to design a scheme to handle the different homing strategies. Some printers home individual Cartesian axes (e.g. CoreXY), others home individual actuators (e.g. delta) and yet others do a mixture (e.g. SCARA).
That is awesome news. I have the kinematics worked out, but my programming knowledge is mediocre at best. I'll give it a crack and come back with some questions I'm sure.
I am back working on this project again and I see that additional axes are now supported. I'm attempting to go through all of the change logs since 1.18, but so far it has been hard to tell exactly what changes affect this project. Has there been any update to this? I'll continue trying.
Support for additional axes on delta printers is present in firmware 1.19. So in theory you can just declare new axes using M584. However, this hasn't been tested.