Skip to content

Instantly share code, notes, and snippets.

What would you like to do?

Using the custom firmware on the BX

If you decide to go ahead and install any of the custom firmware branches on your BX then you must read this guide before using it as it has been carefully written to cover the most common questions that users of the firmware have.

If you ask a question in the facebook group that is covered in this guide I'm going to scowl at you through my monitor and with three mighty waves of my finger declare "tsk, tsk, tsk".

First things first

This guide has been written to supplement the information within the main readme under the "Using the firmware on the BX" heading over here: Please make sure that you read both as they are equally important.

The information in this guide is structured so as to cover important usability points or to answer common questions under each sub-heading. This should help you to easily identify a sub-heading which you may be particularly interested in or is closely related to a question that you have.

NB!!! Checking that my z-steppers are connected the correct way around

With the first batch of units that BIQU released, they provided dual, independent z functionality but never enabled Z_STEPPER_AUTO_ALIGN in the firmware and therefore the production process did not aim to connect the z-steppers in any particular order. After having some discussions with them they realized that this is a useful function and agreed to enable it and connect their z-steppers in a specific order. In order to understand the order that they connect their units in vs. the order that the firmware expects you need to have a look at the picture below.


In the picture you'll notice that I have labelled the one stepper driver as ZA and the other as ZB. I intentionally did this instead of labelling them as Z1 and Z2 for reasons that will shortly be made clear. The cables that BIQU use when doing the wiring have Z1 and Z2 written on them, however there is no fixed standard as to whether Z1 runs to the left stepper or to the right stepper. You should therefore use the numbering on the wires simply to identify how your steppers are connected. Let's assume that your Z2 runs to the stepper on the left. You would simply need to plug that into the ZA socket on the motherboard. Likewise if your Z1 runs to the stepper on the left then you would instead plug that into the ZA socket on the motherboard. Essentially you just need to make sure that whatever cable runs to your left stepper plugs into the ZA socket on the motherboard.

When connecting your right stepper take note that there should be a free socket between the ZA and the ZB socket on the motherboard. This is because the ZA socket actually has two sockets associated with it but we only use one and we leave the other one open.

Once you've connected your steppers it would be a good idea to test that they are the correct way around. To do this, power on the BX (with the custom firmware already installed), navigate to the terminal menu in the BTT UI and then enter G34. A sequence should begin that probes the extremities of the X axis with the Y axis centred. Each time the probe changes sides the terminal will print out an error reading. As long as the error reading is getting smaller and not larger you have the steppers the correct way around.


Following directly on from the previous point this firmware enables a feature known as z-stepper auto align. Having two z axes is great but what happens if they go out of alignment and cause the x gantry to no longer be parallel to the bed? "Ah, ABL should sort that out" I hear you say. You are quite correct. ABL should sort that out but it's always good to give ABL as much of a mechanical hand as we can.

This feature probes the bed at each extend of the X axis to see what height the gantry is at relative to the bed at each point. By iteratively probing on each end, Marlin is able to reduce the height difference between each end of the X gantry and the bed down to 0.2mm. If you use the BX profile that is build into Cura (or prior to Cura V5 is available from the facebook group) then this step is already built into the start code before each print.

ABL Probing - Getting consistent results

The BX uses an inductive sensor and an inductive sensor can probe FAST without losing accuracy. The stock firmware had probing that was just too slow for my liking. I sped things up and the grid is now probed at a very high speed. To be sure that I was not sacrificing on probing accuracy I ran tens of probing grids, one after the other, and compared their results to each other. The variance was tiny and most points were within 1.5% of each other on successive grids.

There is one caveat to the above statements. Your probe is very temperature dependent and needs to be warmed to a pre-defined point before doing any probing routines. Parking the probe directly above the bed and allowing it to be heated by the heat of the bed for at least 90s will ensure that you get consistent results. The start code in the cura profile for the BX automatically does this.

During probing the nozzle will be limited to 140C to prevent filament from being spewed all over the bed. After probing is complete the nozzle will be heated to the final temperature.

Setting your Z-offset

This is probably the point that people struggle with the most according to feedback from the facebook groups. This is likely because your z-probe has to be heated before attempting to calibrate the z-offset.

Let's deal with that. Follow the steps below to calibrate your z-offset:

  1. First go to the terminal screen and then type in M851 Z0 followed by M500. Then reset the machine using the reset button on the TFT. This gives us a nice, clean starting point.
  2. Next, perform a homing routine which should park the probe just a few mm above the bed.
  3. Turn on the bed heater to 60C and allow it to settle at 60C.
  4. After it has settled at 60C leave the probe to warm up for 90 seconds.
  5. With the probe now warmed up and the bed still on head over to the z-offset menu (movement --> ABL --> z-offset).
  6. Turn z-offset on and the machine will home and then place the nozzle just off the bed. Why does it place the nozzle off the bed? This location was selected because it ensures that if someone has entered an absurd z-offset and forgotten to clear it out before starting this process then the nozzle will not crash into the bed.
  7. Once the nozzle is parked you can use the menu to turn off the XY steppers and manually pull the bed forward so that the nozzle sits over it. You may need to use the arrow to scroll through the menu options to get to the one where you can disable the steppers.
  8. With the nozzle over the bed, step it down until the nozzle is able to pinch a piece of paper between the bed.
  9. Once the paper is pinched well, but still able to move about a bit, you have found the correct z-offset.
  10. Save it using the menu option and exit the calibration menu.

As long as you use the Cura start code and follow the steps above you should get perfect first layers every time. I have validated this with many, many prints.

Currents, accelerations and stepper noises

The BX uses 0.9 degree stepper motors. These have a lower holding torque and thereby need higher currents to achieve rapid accelerations. The stock BX firmware has current set to 1050 and acceleration set to 800. I felt that this machine was capable of a more so I boosted the acceleration to 1000 and the current to 1150. I have a thermal imager and have analysed the motor temperature during long prints and found that it sits at around 54 degrees C which is relatively cool for a stepper motor.

The flip side of using high currents and high accelerations is that the steppers tend to make noise. This is just something that happens with 0.9 degree steppers and is well documented. There are more coils and therefore more things to create EM forces and vibrate together. Sometimes the guide bearings on top of the z lead screws vibrate against their holders which make the vibrations a million times worse. If this happens it's probably best to pull your guide bearings out and leave your lead screw loose in there. They don't offer support to the lead screw since they themselves are loose. They are just there to prevent things catching on the tip of the screw.

Copy link

formpure commented Nov 13, 2021

Just for a point of clarification regarding the left and right z steppers mentioned above...

Which one is the left vs right? Is the "left" stepper the one on my left as I'm looking at the screen or the machine's left as its looking at me?

Copy link

kmorley commented Feb 4, 2022

While the piece-of-paper-as-a-gauge works, I would like to be a little more precise and I have metric feeler gauges. Do you know the actual gap I should shoot for? Maybe .075 mm?

Copy link

Hello. I am trying to port to the latest version of marlin. Is there any way I can set up the display correctly? If I set BIQU_BX_TFT70 everything works, but I can't switch between modes. Some idea?

Copy link

Hello. I am trying to port to the latest version of marlin. Is there any way I can set up the display correctly? If I set BIQU_BX_TFT70 everything works, but I can't switch between modes. Some idea?

Are you using vs code to compile ? And what do you mean by set up the display ? Can you just not switch over to marlin with the dial ?

Copy link

Yes, vs code. I mean that I can configure Marlin in touch mode but there is no way, at least for me, to port the code that manages the touch interface with icons and the switch with Raspberry mode. Not bad anyway, now I use klipper.

Copy link

which stepper motor is this guide considering the left?

Is 1 Left? or is 2 Left?


Copy link

kmorley commented Nov 11, 2022 via email

Copy link

I am relatively certain that Left/Right is viewed from the front of the printer. “Left” is on the same side as the power inlet. “Right” is on the same side as the touchscreen. If you get it backwards, during G34 you will see “Decreasing accuracy detected.”. That’s your clue that you have them wired backwards. From: Bobster3d @.> Sent: Thursday, November 10, 2022 8:04 PM To: Bobster3d @.> Cc: Comment @.***> Subject: Re: looxonline/ @Bobster3d commented on this gist.

________________________________ which stepper motor is this guide considering the left? Is 1 Left? or is 2 Left? [Capturerl] — Reply to this email directly, view it on GitHub or unsubscribe You are receiving this email because you commented on a thread. Triage notifications on the go with GitHub Mobile for iOS or Android


Copy link

Hello, I performed all the adjustments described here, including installing the firmware. Now I can no longer perform the homing routine, the nozzle goes down beyond the table and locks up forcing me to turn off the power.
I performed all the alignment steps, adjusted the straps and nuts, installed the firmware, reversed the z-steppers and removed the z-endstop switch. How can I restore homing without the endstop key?

Please help I don't know what else to do.


Copy link

kmorley commented Dec 21, 2022

I have two of the BIQU BX printers.

You absolutely, positively do not need the Z end stop switches - they've been removed on both of my printers.

From the photo, the carriage is not in the correct position to home the Z-axis because the inductive sensor (used for Z-axis homing) is not over the bed. Since inductive sensors detect metal and not air, it's impossible to home the Z-axis unless the inductive sensor is over the metal flex plate.

The carriage is not supposed to move that far to the left, ever. There is a hex cap screw and hammer nut that slides in the rail on each end. Those cap screws extend ~5mm out from the rail and when adjusted correctly, physically prevent the carriage from moving past either extreme end. The left stop should be adjusted to keep the nozzle above the bed when the carriage is fully left (the inductive coupler will be well off the bed). The right stop should be adjusted to keep the inductive coupler over the bed when the carriage is fully right (the nozzle will be well off the bed).

Once the carriage moves left to the stop, the Stall Guard circuitry (aka "Soft End-Stops") on the X-axis driver detects the stalled motor condition and the firmware declares that X-home. Once X-home is detected, the machine homes the Y-axis (bed). Y-home is also detected using Stall Guard. After X and Y homes are determined, the machine will move the carriage to the right by 15-20m so the inductive sensor is over the metal flex plate. Only then will the machine attempt to home the Z-axis.

This appears to be an X-axis homing problem. Make very sure the limit cap screws are in place on both sides of the rail and adjusted correctly: when furthest left, the nozzle is still over the flex plate while the inductive sensor is 15-20mm left of the bed. When furthest right, the inductive sensor is over the bed and the nozzle is 15-20mm right of the bed.

If you want confirmation, move the carriage to the center, take another photo of the left side and post that photo. The cap screw should be clearly visible on both the left and right sides of the X-axis rail.

You may also want to move the carriage to somewhere near the center of the bed with the power off. Raise the z-axis 100-200mm. Power-up the printer, command home and observe. You should see the X-axis (carriage) home first, then the Y-axis (bed) home and finally the Z-axis home.

Using this approach, if the Z-axis begins homing and you see the inductive sensor is off the bed and so cannot sense the flex plate, you will have time to power the machine down BEFORE anything gets bent.

Copy link

The screw cannot be moved because it fixes the x-axis, the problem could be in the offset that was lost after I updated the firmware. Where can I manually set the limit value for the x axis?


Copy link

kmorley commented Dec 21, 2022 via email

Copy link

Thank you very much for your support, can anyone show a picture of how your printers are configured? The x-axis screws are set as factory set I haven't changed anything.

What you are telling me is that I need to create a new physical boundary so that the print carriage does not leave the area in relation to the Y tray?

Copy link

kmorley commented Dec 21, 2022

Your photo shows the physical end-stop and it looks like it is in the correct position. It's the protruding hex cap screw at the far left side of the rail. If you loosen it up, it will slide in the rail for adjustment. Here's a photo of mine:
20221221_151831 1

Try the following procedure:

  1. Power-off the printer
  2. Move the carriage and bed so the carriage is over the center of the bed and is at least 100mm above the bed.
  3. Power the printer on and wait for initialization.
  4. Command home and then watch closely.

You should see the carriage move to the right a little and then move to the left until it touches the physical end stop and then it should stay there. Next, the bed should move back until it touches it's end stop switch and then stay their. Next, the carriage should move to the right by about 50mm so the inductive sensor is over the bed. Finally, the machine should home the Z-axis using the inductive sensor.

If that doesn't match what is happening with your machine, please provide details.

Copy link

YUri, I had a similar issue that was resolved by loosening the X belt. During X homing, it would try to go to the correct place but was not able to and made a funky grind noise at that exact movement. Try that out

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment