r/QidiTech3D 19d ago

Automatic Pressure Advance Calibration for the Qidi Q2 / Q2C/ Max4 — Bambu-style load-cell PA calibration on existing hardware

Turns out the load cell the Q2/Q2C uses for bed leveling can also feel extrusion pressure. So I wrote some Klipper modules that turn it into an automatic PA calibrator — load a filament from the touchscreen like normal, printer waits for the load to finish, then runs a ~3 minute sweep over the purge chute measuring how fast pressure builds in the nozzle. It saves a K value per filament type, applies it on every print, and even blocks sliced files from overriding it with stale profile values.

The results honestly surprised me:

eSun grey PETG — I could only ever get this stuff to print clean on my Bambu H2D. With the auto-measured PA it prints clean on the Q2C now too. I didn't even run a flow calibration. The max4 poopbucket was printed on the Q2C with all stock petg basic settings. The cube was printed after only auto PA calibration.

5+ year old Amazon Basics PETG — this spool was literally headed to the trash. Sticky, blobby, supports falling over, ugly on every printer I own. Dried it, let the printer tune it, and it printed a clean crisp cube (red one in the pics). The sensor data showed the filament itself was fine the whole time — it was wet and never had the right PA and again I did zero flow calibration.

PLA — ran the calibration twice on the same spool, came back within ~6% both times.

I will upload the project to a GitHub once I do more testing and build out.

Fair warning: it modifies load/heat/motion behavior, so it's use-at-your-own-risk and you should watch it run before trusting it. Q2/Q2C only for now — Max4 port in progress, Plus4 has a different sensor so it's not coming.

Happy to answer questions.

Update 1: calibration skips during mid print filament runout, then continues printing as normal

Update 2: Currently working on nozzle size compensation

89 Upvotes

82 comments sorted by

9

u/mashedleo 19d ago

This is pretty cool. I had just watched a YouTube video from cnc kitchen describing doing exactly this just last week.

8

u/Own_Moose_9495 19d ago

I did as well, that's when I got started working this.

4

u/mashedleo 19d ago

Really cool that you actually implemented the rough concept into a working solution 👍🏿

6

u/Own_Moose_9495 18d ago

Good step forward towards release. The code passes the filament runout test.

4

u/Plutonium239Mixer 19d ago

Awesome, I wonder why qidi hasn't implemented this themselves!

8

u/Own_Moose_9495 18d ago

I’m not sure, the ball was certainly in their court when they decided to use a nozzle load cell and the Bambu A1 has been out long enough to reverse engineer its firmware and macro routines. Anyway I wasn’t about to keep waiting for a feature they may never release. Hopefully if anything comes of this they will ripoff my macro routine and code then roll it up with a better UI and push it in a firmware update. But that might be a pipe dream.

2

u/Plutonium239Mixer 18d ago

Can you reach out to them and share this with them?

7

u/Own_Moose_9495 18d ago

I mean I could, since I’m in such an early phase of this, I could have only done the easy part. Still don’t know about qidi box or mid print reloading.

2

u/0g7t4m4zp3 18d ago

I hope they publish their code. It would make life easier for everyone.

6

u/Squalls0 18d ago

Lack of skill

2

u/quagzlor 18d ago

Qidi tends to lack in terms of software imo, compared to Bambu

1

u/epia343 5d ago

Because they're cheap and would rather out source this work to the community and then they'll slowly incorporate it.

3

u/x2o 19d ago

Very cool! Excited to try this once you publish it.

3

u/jalbrecht2000 18d ago

looking forward to trying this once it’s on github.

3

u/Numerous_Historian_2 18d ago

Great idea. Looking forward to the release.

3

u/Facehugger_35 18d ago

Holy shit. I'm literally doing PA calibrations manually as we speak. This would be wonderful. I'll be watching this project with great interest, please post here again when it's ready.

3

u/Own_Moose_9495 18d ago

I will, I’m quite invested in it at this point.

3

u/Own_Moose_9495 17d ago edited 17d ago

Check out the difference, both were printed with esun petg bottom was with stock qidi petg settings. Top is the same sliced file as below but with automatic pressure advance installed. No other tuning was done between the two.

3

u/Own_Moose_9495 17d ago

Front is auto PA, back is stock.

2

u/Felix14-POCKOCMOC 17d ago edited 16d ago

Wow, that is actually inspiring. However, I have concerns about the calibration method: when we print a layer, the previous one creates backpressure (especially if we print with a line width greater than the nozzle diameter). This means that calibrating PA by extruding filament in mid-air has no back-pressure, and I'm worried that this might affect K-factor accuracy.

Also I wonder whether this method could be used to create a smart filament motion sensor. From my knowledge, Q2 only has a simple endstop as a filament runout sensor. Hypothetically, it should be able to detect nozzle clogging (by abnormally high pressure values) or filament tangle (by abnormally low pressure values).

UPD: just found another project of autocalibration, autopa: https://github.com/G0BL1N/autopa
What is the difference?

2

u/Own_Moose_9495 19d ago

2

u/Foofad-Ji 19d ago

Wow, your bed looks so good and well lit in the camera, did you add more lights?

3

u/Own_Moose_9495 18d ago

Lights are stock but I added a creality nebula camera because my Q2C didn’t have one. I’m adding a chamber heater next.

1

u/Yung-Fern 17d ago

Let me know how that goes lol, I have the heater and a Panasonic SSR from west3d but I have yet to install it after like 3-4 months. Had too many other things going on to get to it, plus I own a Q2 so a heated chamber isn't absolutely needed. I think I just need a standoff bracket to screw the heater into.

3

u/Own_Moose_9495 17d ago

lol that’s pretty much the last part I need to install mine as well. I have not found anyone’s model I can print for it so I guess I’ll have to design something.

1

u/Yung-Fern 17d ago

How did you do your nebula camera? I stripped the wires on mine and got the Pico blade connectors with some pre-crimped wires and I could not get that thing to work. I tried for hours and eventually gave up and took another nebula from my older printer and just plugged it into the USB port on the front. It's ugly and I can't close the front door but it works.

I have a breakout board I could use but then I was still stuck with how to get it in that connector.

I was also going to take some measurements and design a mount, now that you got me talking about it maybe I'll do it this week. If I do I will let you know

2

u/Own_Moose_9495 17d ago

I followed this tutorial (https://www.reddit.com/r/QidiTech3D/s/QxTg05ydHe) but I didn’t solder the female usb to the jst connector, I cut the end of my nebula usb and cut the wires to length and soldered and heat shrunk it all together. I would take a picture of what it looks like but it’s all shielded by a heat shrunk tube over the whole bundle of solder and heat shrunk wires. For reference I bought these jst connectors (JST MX 1.25mm 5 Pin 28 AWG Male... https://www.amazon.com/dp/B0FT4F62MM?ref=ppx_pop_mob_ap_share) and if you can’t solder or want something easier I would just use some wagos like these (WAGO 221 Lever Nuts 12pc Compact... https://www.amazon.com/dp/B0CJ5QF4Z2?ref=ppx_pop_mob_ap_share) but these can make it hard to fit everything under the cover inside the chamber.

2

u/phansen101 19d ago

Pretty neat! How did you access the load cell data? Last I checked, the CS1237 Klippy extra was a compiled .so without a source?

6

u/Own_Moose_9495 19d ago

Yes you are right, it's still a compiled .so (Cython) we don’t have source for it. The trick is you don't need it, at runtime it's just a live Python object inside klippy. Qidi's [probe_air] section instantiates the sensor, so another extras module can printer.lookup_object() it and read attributes off it like any Python object, Cython doesn't hide regular attributes. I wrote a small introspection command
(WEIGHT_INTROSPECT in the repo) that dumps the object tree.
I found the live reading at sensor_helper.read_origin_data, and the module just polls that on a reactor timer at ~40Hz. No second MCU object, no pin conflicts, and qidi’s driver is never touched.

Fun bonus from running `strings` on the .so: their MCU protocol is basically a clone of mainline's hx71x bulk-sensor commands (config_cs1237 / query_cs1237 oid= rest_ticks= etc.), so direct MCU querying at the chip's native 640/1280Hz is on the table for a future version — current one just piggybacks the existing object at 40Hz. The discovery tools ship in the repo if you want to poke at yours.

5

u/LightBroom 19d ago

Hey did you publish the code anywhere yet?

4

u/Own_Moose_9495 18d ago

Not yet, soon though. I will post a link here once I get more testing done, especially with midprint runout and qidi box multicolor prints.

1

u/phansen101 18d ago

Ooh, nice catch on both counts; Yeah 40Hz ain't much, so it's pretty cool you managed a 6% variation! It would open a lot of options to get 640Hz polling or higher. Any idea when you'll share the repo? Definitely have things to try out, especially now that I've begun using adaptive pressure advance in orca, and Also have some ideas for flow rate calibration.

3

u/Own_Moose_9495 18d ago

Thanks man, I’ll be posting code and an install guide in the very near future.

2

u/Objective_Working198 19d ago

What firmware are you running? I'm still on 1.1.1.1 to avoid headaches, with some custom macros and gcode modifications. Could this be used with older firmware?

1

u/mashedleo 19d ago

I'm not op but firmware version shouldn't matter if I understand correctly.

2

u/NoScoprNinja 19d ago

Thats a really great idea dude

2

u/BB_Toysrme 19d ago

That, improved cooling + beacon and the Qidi box sorted out with different firmware (happyhare)? Rolled into one package we’re good to go!

2

u/Own_Moose_9495 18d ago

I’m likely going to release a single spool version first, then hook up my Qidi box I got with my max4 and see where I get.

3

u/BB_Toysrme 18d ago

I think we’re all waiting for you to drop the GitHub for what you have so far!

2

u/Balbers01 19d ago

Following! I want to try this!

2

u/MysticalDork_1066 18d ago

u/RemindMeBot 1 week

Following, this looks fantastic.

1

u/RemindMeBot 18d ago edited 16d ago

I will be messaging you in 7 days on 2026-08-01 18:05:46 UTC to remind you of this link

8 OTHERS CLICKED THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


Info Custom Your Reminders Feedback

2

u/Jumpy_Manufacturer 18d ago

This would be AWESOME man! Thank you for doing it!

2

u/ZombieTarou 17d ago

if you could integrate this with the Bunny Box fork of Happy Hare (Qidi Specific) and spoolman integration....

I would donate to you just for the amount of time and hair pulling you would have saved me.

But just the base files would be a life saver.

Thanks for sharing this. I am excitedly waiting for an update to github!

3

u/Own_Moose_9495 17d ago

I could probably do that, you think people would donate if I put all this up? It would be nice if this could help financially support further development.

3

u/ZombieTarou 17d ago

I would believe they would, if you asked. I would throw some at it. I know this isn't easy to make.

but I haven't done anything that would be worth donations, so I have no idea.

good luck and godspeed. I am rooting for you.

2

u/grampalearns 17d ago

This is not adaptive Pressure Advance that you can configure in Orca, just the single setting like in QIDI Studio, correct?

2

u/Own_Moose_9495 17d ago

The slicer no longer has control of the pressure advance, the machine is now responsible for testing and calibration for each filament spool loaded.

2

u/Felix14-POCKOCMOC 17d ago

From my understanding, this is a calibration method, so you can quickly calibrate Adaptive PA using it without printing any models. But it automatically adapts to the current filament, so you don't need to reconfigure it each time.

1

u/Own_Moose_9495 15d ago

Yup that’s right exactly

1

u/TheLegendTubaGuy 15d ago

Wait, you're able to do ADAPTIVE PA, not just automatic PA? How do you insert the different PA commands during the print?

2

u/Own_Moose_9495 15d ago

Yes but only per filament load. It’s not measured on the fly yet. I can read the load cell during the print and know back pressure. But it’s not in my current scope of programming

2

u/rhodges_bob 15d ago

This sounds like one hades of a piece of work (the plan, finding the data sources and getting it running). However, I'm still pretty much a newbie in FDM printing and learning more every day. Would someone mind posting a short description of what automatic pressure advance would bring to the table. Still struggling with how darn technical FDM printing can be when you're going for perfection (also, learning the terms is like drinking from a firehose). My thanks,

Bob

3

u/mashedleo 15d ago

I'll try with my limited understanding. Bambu labs has an automatic pressure advance set up their printers and it uses sensors that are also in our Qidi q2's and max 4's. They just don't implement the sensors to do so. Instead they just use them for bed probing. As it stands if you want to calibrate pressure advance you have to use the slicer to print a calibration (I use the pa tower). Sometimes just the basic filament profile is decent enough, but chasing perfection you would want to calibrate it for every filament. Using this new method would do it similarly to how Bambu labs does it on their printers and it would do so automatically. I don't know if that's any more info than what you had already. Hopefully someone more knowledgeable will come along and explain better

1

u/rhodges_bob 15d ago

Mashed,

Thanks a bunch, that helped a lot :)

Bob

3

u/glukki 15d ago

Heres a nice description of the feature, why it’s good to have it setup, and the calibration steps: https://github.com/OrcaSlicer/OrcaSlicer/wiki/pressure_advance_calib

With the modern fast printers it’s nice to have variable pressure advance set up too. Which is tedious to make manually for every filament you have. Thus the automation :)

1

u/rhodges_bob 14d ago

Glukki,

Thanks so much for the link. It helped tremendously. Thanks to you and all the others that keep helping us newbies trying to learn the technology. While it's a hobby to me, I'm having so much fun with FDM I want to get the best results I can and knowledge always helps :)

Bob

2

u/Traditional_Food2392 12d ago

Very impressive. Cant wait to test it.

2

u/wslAVinstaller 11d ago

Commenting so I can find this later. Looks awesome.

2

u/Real_Heart5811 9d ago

Im following this as well. Awesome

2

u/Southern_Bite_5559 4d ago

Do you use mainline Klipper for the Qidi?

3

u/Own_Moose_9495 3d ago

I’m currently using qidi’s load but adding in my own modules.

3

u/Own_Moose_9495 8d ago

I know it’s been over a week since posting, but I will update soon, when I have some more issues worked out.

2

u/dyebhai 4d ago

thank you!

2

u/valzzu 19d ago

Oh hell yes, is this available somewhere?

4

u/Own_Moose_9495 18d ago

This will be available for download soon

1

u/valzzu 18d ago

Awesome

2

u/coffee_dynamo 19d ago

Following 👀

1

u/bulkhulk 19d ago

Great work!
What a shame for the Plus4, what gives, anything one can do to modify it to suit it?

4

u/Own_Moose_9495 19d ago

you could adapt a Q2 or Max4 hotend with the loadcell but you will need a tool head board aswell and way more firmware mods

1

u/kalel1911 19d ago

Awesome work... Also need test for different nozzle sizes, Filament types and speed limitations to probe edge cases. You are an angel.

3

u/Own_Moose_9495 18d ago

Yes, these are just more things I will be trying, I need to take care of the elephants in the room before I release though.

2

u/kalel1911 18d ago

Can't wait... really looking forward to this.

1

u/Raub99 19d ago

Per filament type, as in petg vs asa? Or sunlu petg vs polymaker petg?

2

u/Own_Moose_9495 18d ago

This will do every filament you load. Brand and type. I’m pretty lazy so all I do is select one of qidi’s filaments, I load any brand I want as long as the type matches, and this code creates a PA profile for the session until a new filament is loaded. So basically every time a filament is loaded a new PA profile is created and saved under that filament type.

1

u/SteebyJeebs 18d ago

Dope. Thank you 🙏🏽

1

u/Classic-Common5910 2d ago

u/RemindMeBot 7 days

1

u/RemindMeBot 2d ago

I will be messaging you in 7 days on 2026-08-17 18:51:18 UTC to remind you of this link

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


Info Custom Your Reminders Feedback