[Testers wanted] Laser Support - Fast PWM Updates

Any new updates for laser control ?
Have you tried to implement proportionality (during acceleration phases) ?

1 Like

I would like to do that, but as I already said in the PR and here: As long as Kevin does not merge my original changes, it is considerably harder for me to add this functionality.
The work I have to do to even match with the master branch exceeds the amount of spare time I want to give this. Adding another branch to that (that depends on my branch, that I have to rebase everytime someone in master branch touches some Pinupdate-code) will really increase the work just to maintain the status quo.

That being said, I am very interested in that, and want to do this once the original Pull Request was merged. If you want to decrease this time, please add your experiences with using my PR on both laser and printer functions to the Pull Request discussion (see link in first post).
This will increase traction and help keeping the attention from Kevin.

Just for kicks, if you want to have a look: My plan would be adding the ā€œproportional PINā€ value to the kinematics, and then update the PIN value in the iterative solver as a fraction of requested vs actual speed. Then, either already in the solver or in the (c-written) stepcompress system, these values should (or probably must, to limit bandwidth) be limited to some resolution and synchronized with the compressed pulse groups. Inserting them into the queue will then be almost no work, as the Pinupdates are managed in the stepcompress system already.

I have used your PR since it came out, and apart from a timing issue in the beginning that has been fixed and did not happen since, printing works flawlessly. Iā€™ve printed many rolls of filament without any issues.

My setup:

  • Raspberry Pi Model 3B with Raspbian
  • Bigtreetech SKR 1.4 32bit ARM @100MHz
  • TMC2130 stepper drivers, sensorless homing
  • AM8 aluminium printer frame with enclosure and fume extraction
  • ATX PSU with 5V, 12V and 24V, heaters and fans on 12V, steppers on 24V
  • automatic bed leveling, tilt correction, input shaper, accelerometer, st7920 LCD, filament sensor

So I guess I use quite a few features, and everything works!

With the laser I made a memory game, engraved an axe handle, made labels for my camper dashboard, some paper decorations and many more, with low speed the acceleration burn-in is hardly noticeable. Proportional output power would still be a huge bonus for extra clean engravings!

Sadly I canā€™t always use the newest and greatest Klipper featues, but I donā€™t expect you to adapt the PR for every change in the main branch. It works, and occasional updates are fine. If everything works for others as well I definitely support a merge, that would also vastly increase the amount of testers. If anything goes wrong, a downgrade is always possible, but I understand Kevins desire to have a well-tested solution before unleashing it onto thousands of users.

1 Like

Hello,
I would love to do some testing for this!

My Current Setup:
400 * 400 * 500 cartesian printer
Bigtreethech Octopus Pro (F446)
Big Tree Tech Hermit Crab Tool Changer (CAN Bus Version)
pi4 + screen

The Laser Engraver:
I apologize if this has already been discussed, does it matter if I get the 2-pin, or 3-pin variant of the Laser Engraving Module?

Here is The Laser Engraver Module that I was considering: Laser Engraver

I would really appreciate any feedback as to if this would be a wise choice, and if not, what you would recommend.

My Other Thoughts/Concerns:
I plan on using My Hermit Crab tool changer with this Laser Module.
One concern that I have though is that I use the CAN version of the Hermit crab. This version uses 1 USB-C Cable to send all the Power & Data to the Print Module.
I am not sure if anyone has tried using a Laser Engraver with the CAN version of the Hermit Crab, but I will be sure to report my results. If the Single USB-C wire does not provide enough power, I will use a separate power wire in addition to the USB-C cable.

Once All is working, I will make sure to thoroughly test this and give updated results.

Thanks

1 Like

Hello,

I have been following along. I have slowly been researching more of the Klipper docs. and source.

ā€¦

  1. Is this a viable option for use in a diode laser config?
  2. Does using a laser config work w/ klipper as of now?

For number 2. listed above, I have tried to use the lack of ZE and only use XY but to no avail.

Also, I have tried to do a hardware work around. Although this is a viable option, it does not provide simplicity and cautiousness/safety.

Are people still learning and practicing to make this an option?

Seth

P.S. Since there are ways to fool hardware w/ source, I was thinking someone more dedicated in the klipper source could write up a demo. Now me, I may be able to look around and make small changes or add source where needed but nothing too big.

That depends on how you want to control it. If the three-pin-Version is with a PWM input, Iā€™d choose this. Then you donā€™t have to have an additional power driver or so.

Not to my knowledge. The results will be interesting. I have ā€œonlyā€ a 3W laser, and this pulls already a lot of current.

Yes. As I recall, most of the users here have a diode laser, with some exceptions.

I am not sure if I understand. The normal Klipper does support ist, but it will not be very useful.
My PR enables that.

I donā€™t understand. What is ZE? What lack of it?
But yes, feel free to further modify the source code.

Hello,

ZE is just short for stepper_z and stepper_e. When I use a cartesian, the source is hardwired to handle four output motors, i.e. XYZE respectively.

When I remove one motor or two motors, errors galore happen.

Seth

P.S. I can alter the hardware so far to handle the XYZE and extra hardware to fool the source into giving me what I need for Laser control (diode only so far) but not when removing the motor entries in the .cfg file. This is the error so far in my view.

Hello Again,

I read over the PR in the klipper issues section on github.com. Okayā€¦

  1. Do I need a specific branch of klipper to handle the PWM output at 5v?
  2. Would this seamlessly work w/ a 64-bit MCU along w/ a 32-bit co-processor board?
  3. My hardware can be configured on my sideā€¦
    a. Do I need to have additional hardware?
    b. If so, if I need additional hardware, what specifics does this entail?
  4. I can be a testerā€¦
  5. I have a random rig for now.
  6. I have a 12v (v+), 5v (PWM), and GND circuit board attachment for a diode laser.
  7. Soā€¦
    a. git clone ?
    b. git branch -a ?
    c. git checkout -b ?

I think this covers most of the excellent ways I can understand how to further help this deployment.

Seth

P.S. For one, I will test it and I will need a way to shutdown everything in source, hardware, and seamlessly. For instance, I can add the button and some source but where? Where would this source need to be placed? mcu.py? tmc.py? Orā€¦in the C/C++ source of src in the klipper repo. on github?

I really do not understand you. What is hardwired? Klipper does not mandate the use of an Extruder motor.

Yes, this is the purpose of this forum post and my PR. I suggest you read the introduction there.

1 Like

Hello,

Okay. No issue about the stepper_e or [extruder]. I was mistaken. I will read the PR again.

Seth

@Cirromulus ,

Seth here again. So, I read the PR and looked over the source that was changed in the Klipper source files.

I will test your Klipper repo. and/or the branch of Klipper soon. Thank you for making this available.

Seth

Andā€¦

Should I use the default branch from your repo on github? If not the default branch, what branch should I use? I looked in Klipper, outside of your clone, but the branches seem to be the default only along w/ gh-pages online for docs.

Sorry to bother but Iā€™m not a Linux expert.
Iā€™m building a giant 100w CO2 laser + CNC using exclusively Klipper (i know other firmwares are more suited but I donā€™t want to learn every firmware and macros are a must-have for me)

Hereā€™s my questions:
Iā€™m using version 0.8.2225 and GitHub says that the latest version is 0.10.0 am I not on the good branch or am I missing something?
The pause macro makes an error since I have no extruder. Can you give me a correct code so I can use the pause function in laser or cnc mode?
Is there a way to communicate with an Arduino (spi/i2c/UART) without changing it to a secondary MCU ?
Thanks

Ok, this is a more general question. Maybe this belongs in another Topic, but i can explain it anyway (also for @Virtualchronos)

I made a pull request (PR). This means, that I cloned the original repository and did my changes in a so-called feature branch (pwm_sync_channel in this case) in my ā€œownā€ repo.
Then I requested on the original repositoryā€™s page, that my feature branch shall be merged with the master branch on Kevins original repo.
This request is https://github.com/Klipper3d/klipper/pull/4128. From there, you see the ā€œCirromulus wants to merge 4 commits into Klipper3d:master from Cirromulus:pwm_sync_channelā€ right on top. There you find 1. my repoā€™s link, and 2. the name of the feature branch.

So, to check this out, you go into your local klipper folder and add another remote (read: repository).
Your original (kevins) repository will be called origin.
To check out my feature branch, you type git remote add cirromulus https://github.com/Cirromulus/klipper.
With this, you have ā€œaccessā€ to the original repo and to mine.
Then, to get the newest stuff, type git pull --all. This will get the newest versions of all branches (including the one you are currently on, probably master).
Then, you can check out my branch (git checkout cirromulus pwm_sync_channel).
Restart klipper for it to have have effects. If something breaks, you can always git checkout master for the original, newest branch.

1 Like

@Cirromulus ,

Thank you! I know now. Okay, testing will ensue. Sorry for my absence. I needed to handle some other ideas before jumping full fledged into this idea.

Seth

P.S. Did it get accepted into Klipper yet via your pull request?

Not yet, but a user recently found a bug which I fixed (hopefully).
So testing is important :slight_smile:

1 Like

Itā€™s been nearly one month (or maybe two ?) iā€™m using your latest release and hereā€™s my results :

  • Hardware orange Pi plus2 with Spider 2.2 motherboard
  • Max speed in logo engraving mode ~ 180 mm/sec or slightly more
  • Max speed in photo mode (lightburn marlin line mode) 100 to 125mm/sec but 100 is the fastest without any trouble of klipper shutting down for synch problem

Software is great but with a 100w CO2 laser like me, itā€™s awfully risky since pause doesnā€™t shut down laser nor fire it back when you resume print.
Iā€™ve coded a few macros for laser usage only (some more oriented CO2 laser than diode) and honestly i would be more than glad to share and have optimisations on my work since iā€™m sure it would benefit to many people (Security oriented macros, calibration shape macros, modify output power of laser while engraving, G1 modification to accept lightburn gcode, auto focus systemā€¦)

I donā€™t know how and where I could share my work so donā€™t hesitete to ask. I may answer a little late but i surely will

Cool! Would like to see them.
Especially the security features are interesting. I use the max_mcu_duration for that, but this has some limitationsā€¦
Perhaps under ā€œMacrosā€ section? Slowly there are more laser related talks, maybe we need a separate section :smiley:

My security features are rather simple but yet very effective :

Change pause to force laser to shut down
Change G1 to add S parameter for marlin line mode in lightburn (it should also support GRBL gcode but iā€™ve not tested yet) and shut down laser at the end of each line; but unfortunately, consecutive G1 moves with only the first having S parameter activate the laser for the first move and just move without firing for the others (wich is more safe but for square shapes lightburn doesnā€™t bother to say three times more S128 or else before an M05 ).
Iā€™ll try to implement a global variable to add a parameter wich can disable the safety feature in case of need. Maybe it could be tweaked a little since thereā€™s a lot of ā€œifā€ conditions inside the macro wich i fear that it would take a lot more of CPU.
Thoses macros could be implemented in your release as optionnal macros and tweaked. iā€™ll send them to you

Hello,

I have a board w/ an Allwinner Technology sunxi SoC . Anyway, it works as is w/ 3D Printing. Please excuse my late arrival to the party here.

It uses Klipper branches and then alterations done in b/t releases, i.e. as usual w/ most development stuff.

Anyway, since the klipper functionality source is only working in one way on the 3D Printer/CNC controller, I was thinking of going directly into klipper source to exchange the format of the source to your branchā€¦sort of.

I was just going to add and delete the necessary lines in the source to try out the Laser style functioning of the klipper source from you, @Cirromulus .

Seth

P.S. Has anyone tried this w/out error yet? I meanā€¦I will test it and report back. No issue there but if others are frowning upon this idea, please let me know in advance. If anyone needs more background, I will attempt to provide additional info.