EBB36 and other CANbus expansion boards used with USB connection

For a general discussion about this topic coming from here:

I opened this thread.

CAN is often very controversial and prone to different errors so lets focus here on using USB connection for the EBBs and alike.
Due to the power requirements it is quite obvious to have separate 24 V and GND wires.

But how many of you are using a EBB via USB and what are your experiences or issues so far?
For me it would save the U2C and its space and make the connection much simpler. And there are already good and shielded cables available.
However due to the flashed CAN bootloader I just need some info how to easily revert the EBB36 to plain USB connection.
Just reflash Klipper firmware with USB connection being set?

Just reflash Klipper firmware with USB connection being set?

Yes, just recompile the firmware and upload it normally over USB by putting it in DFU mode using the buttons on the board. I had originally been setting up my printer using the U2C and couldn’t find impedence-matched continuous flex CAN wiring less than $100 for the ~1.5m length I needed. Most can wiring is not continuous flex because its meant for automotive use, and normal continuous flex stranded wiring isn’t twisted at the right spacing. I’d already flashed by EBB36 to CAN and had to flash it back to USB, too.

Where are you looking for for CAN compatible cabling? Is there an issue getting things to where you are located?

Here is the cable I use for my CAN set ups ($6.60 CAD per metre):

I’m always surprised with the problems people have with CAN as I have set up for the toolheads on five printers with minimal effort (certainly easier than running 13 separate wires from a controller board to the toolhead), quite reasonable costs and rock solid reliability using Octopus V1.1, Octopus Pro, Manta M8P & Robin Nano V3.1/U2C board.

2 Likes

That cable is both not properly impedance matched for CAN (its 100ohm not 120ohm) and its not continuous flex. It won’t hold up long-term to flexing.

There’s a reason standards exist and someone people want better reliability than “it works for me at the moment”, which is the best you can hope for if you’re off-spec.

I made my own cable and put snake skin around it. But your cable @mykepredko looks nice.
I thought the terminator will compensate the cable resistance.
Good to know and better to go with USB. :smiley:

@dotorg , what is the cable you are using?

As for mine, I have a cable impedance surge (Tau) of 0.0833 and using this value along with a voltage swing is 3.3V, copper signals propagation speed of 10^8 m/s (1/3 c) and the rise time of the signal is 1.2ns (spec of the MCP2542FD) the expected normalized voltage spike is 0.215V.

To be fair, I haven’t run this on a TDR which would be the ultimate arbitrator but basic line impedance calculations show that the spike at the interface is not that significant. I should point out that this is the real world, you would get at least this level of spike at the connectors and I would be very surprised if BTT actually ran 120Ohm traces on their PCB running from the MCP2542FD to the connector - a 55Ohm to 120Ohm interface would have a Tau of 0.37 and, using the assumptions above, would have a normalized voltage spike of 0.959V.

Don’t forget this is a differential signal, so the voltage spikes on the two lines tend to cancel each other out.

As for “flex”, I’ve run the cabling on the five printers without failure for an honest 10k hours, with two of the printers running with this cable over 3,000 hours and I don’t see any cracks in the shielding or had any issues at all.

So, I’m comfortable with what I’m running and can defend my choice. Again, using 120Ohm twisted pair would be ideal but in the real world I have a pretty good set up that runs very reliabily, both mechanically and electrically.

So, what makes your cable worth 10x (or more) the cost of mine?

1 Like

Honestly (and I know @dotorg will disagree) if you keep your two data cables approximately the same length and twist them together, you’ll probably be fine. When I first set up CAN I did this with nary an issue.

As I just put in my previous post, this is the real world, the signals are not that fast (relatively speaking), the distance isn’t that great and the silicon used to condition the CAN signals is very robusts and designed for sub-optimal solutions. If you have trouble getting CAN to work, you generally are making some pretty big and fundamental mistakes.

What we’re discussing here is line impedance, not “resistance”. The resistors at the end of the bus are to ensure that signal reflections will not appear on the bus because you’re going from 120Ohm line impedance to infinity.

Think of the electrical signal like a bullet flying through space until it hits an steel wall - everything is fine until it comes to the end and ricochets (reflects) back at you. If you put some pillows in front of the steel wall, the bullet will come to a stop without ricocheting (reflecting) back toward the source (gun and the person holding it).

I dont use the EBB boards, but I have used the Mellow 3D equivilant, and have settled on the MKS ones (RP2040 Based) mainly as I get these very cheap and I prefer the larger JST connectors, I have used both CAN and USB with them, both work fine, the fuss with the cabling for such a short run is not really required, I tested several self made cables, twisted, not twisted, outside the printer, umbilical and through drag chain, there wasn’t any major issues I came across, with both CAN and USB.

I also seen no point in CAN over USB, not for what most of us do with our machines, so the added complexity and additional hardware, I find CAN pretty pointless, one of my machines runs 2 x control boards, 1 x tool board, 2 x cameras, 1 x Wifi all from a USB hub connected to a single USB port on the host and there is no issues, I do have to increase the TRSYNC, but that issue is also there with CAN and is not actually releated to data coms corruption.

I also have no issues with restarts, reboots, cold or hot, with the exception of 1 machine that uses a x86 USFF Dell PC, that requires USB power to be cycled after it has booted, and I use a USB relay and a script for that.

Not sure if the EBB is the same, but if you have issues with the tool board starting after a firmware restart, try cyclng the toolboards power, instead of a full reboot, either connect a manual switch to the 24v feed or use a USB relay to toggle its power, alternativly hitting the reset button on the toolboard will also make it recover.

The little Voron Im currently working on also has a MKS-PI Host controlling 2 x Printer boards and 1 x Toolboard for a multimaterial setup, all over USB, the external MM unit has BTT E3 RRF in it, and I do the same as my tool boards, I just mount a USB 2.0 socket in that and break out the data wires and power seperate, so all I need is is a USB-A to USB-C 2.0 cable to run and to power it, and that MM box has 4 extruders on it, USB is very reliable, and we have been using it with Klipper for many years.

Im still not seeing any reason to use CAN instead of USB so far.

On a side note, I would love to see a toolboard that just has 4 x mini screw terminals instead of a USB port and that silly Micro fit connector, you can just have 24v/GND/D+/D- and your done, they could also incorperate a USB 2.0 hub so you could potentially run a USB camera on the tool head, you wont be doing that with CAN.

1 Like

Just a question, your entity is foot/feet (sorry, I never know, when Americans use foot or feet). I’m a metric guy, you are talking about one meter?

I’m Canadian, so it’s “hours”.

Sorry about that - I corrected it above.

3 Likes

I’m fine with CAN although there have been some starting issues back then.
However if USB works fine as well it would make my setup less complex and save some space.
I just ordered a second EBB36 to play with. And maybe it will move into my v0 and I’ll redo this on my CoreXY.

I use both the BTT EBB and Mellow FLY SHT toolhead controllers. They’re basically the same but:

  1. The EBB has “RESET” and “BOOT” buttons whereas the FLY boards have a jumper for BOOT and the board is reset on power up.
  2. The connectors on the EBB are on 2.54mm (0.1") centres while the FLY boards are on 2.00mm centres.

You do not have what I would call a “simple” system and when you say you don’t see any value in CAN, that could be true in your case.

On my side of things, I run things much simpler; for my four CoreXY machines, I’m running a single controller board (Octopus, Octopus Pro and Manta M8P) and toolhead. When you consider that the Manta M8P (and M5P) have sockets for CB1/CM4s, things start to get a lot simpler/cheaper because you don’t have to run cables from an extra 5V power supply and the controller board to a separate Pi/host/whatever.

I just wish some genius would realize that the easiest thing to do with CAN would be to provide a MinFit connector on the controller board with the same pinout as on the toolhead boards, eliminating the need for running wires to the system 24V power supply.

This is where you lose me in an argument that USB is even equal to CAN let alone superior. Pulling apart premade cables is just begging for problems from a variety of sources. Sorry, you’re comfortable with dissecting USB cables but I’d NEVER consider working with a system with a kludge like that.

I take my cable, eight crimps (four for the Molex, two for the controller board CAN connector (or one in the case of the Octopi) and two ring connectors for the 24V power supply. All done.

That’s really asking for trouble - the USB line impedance specification is 72Ohms to 120Ohms with 100Ohms being nominal. Assuming that you’re using really small terminal blocks with centres 2.54mm (0.1") apart and 24 AWG (0.51054mm diameter) wire you will have a characteristic impedance of 275Ohm. That’s quite a discontinuity in the lines and well above specification.

I only pulled apart pre-made cables to see how they were wired and to inspect the conductors as I dont trust manufacturers claims.

The ones I use are untouched, instead I make my own female sockets, USB-A at the control board end, and USB-C at the tool head end, so the cable is untouched.

As shown in this image:

The USB female sockets are 4 wires each, power and data, its very simple and works for me very well.

Im on the other side for the terminal connections, I hate Microfit connectors, Id rather just have what the THR36 has for CAN, 4 x screw terminals, but for USB instead, Id also like that at the main control board end as well, which I did myself a while back for the MKS-SKIPR board as it has Microfit on it for the CAN interface, I pulled that off and soldered on a screw terminal block to match the THR36.

I wasnt aware of the EBB vs the Fly with JST connectors, I just didnt like those smaller JST connecters, I might have to take another look at the EBB board then, not that I have any issues with the THR board.

I also forgot to mention, most of my machines, I run the MKS-SKIPR which also has the host onboard, and I love this, I do whish it had a little more “balls” purely for camera related things, but its still perfectly fine, the V0 Im messing with at the moment isnt using the SKIPR, as I am just using items I have spare/sitting around, but I also use the MKS-PI in that, so I dont need 5v either, not sure if the SKIPR pin configuration of the Microfit matches the EBB but it may be more what your after.

So while upgrading my NoName to triple-Z everything received now latest Klipper 0.12.
Doing so the EBB36 was reflashed to work over USB now. So far it works and I got rid of the U2C.

However I have to swap the hotend and install the BD-sensor and currently have no bed installed to perform more extensive tests.

Before I can do this I have to find a nice USB-C cable. Maybe it is better to use an angled one and fix the connector with hot glue.

Although this printer is a never ending construction site it is always a pleasure when things work.

Hello!

I did an USB only toolhead

However I did not just eject 24V into a USB cable, I went with a full USB-C-PD compliant solution

  • cad435
2 Likes

Hi cad43,

thanks for sharing. Nice design.

When you started the research for your project, did you ever find an USB PD3.1 sink controller, which supports 48V?

I did a quick WWW search and just found this https://www.diodes.com/assets/Datasheets/AP33771C.pdf, but nothing supporting 48V.

hcet14

Hi!

Tbh I already had trouble finding an easy to use PD3.0 source as it is now. I also had the constraint that it should be accessible easily. For example all the “cool” InjoinIC source-ICs I could only import from China via a forwarder as not even LCSC is selling them (or at least when I started that project)

The IC I use currently unfortunately is already EOL, but still in production.

If it becomes hard to source I’ll update the PCB to another Source IC. maybe one of those InjoinIC all in one solutions, idk yet.

PD3.1 essentially is so new that those all in one solutions are not widely available. You definitely have front ends which support the Phy-Layer but you have to do the programming yourself.

And that is nowhere near easy. I consider myself a pretty experienced C/C++ Programmer although it is not my main profession. But going through the USB specs, understanding them and implementing them is hard.

And unfortunately I don’t have the time to even consider that.

Building a Source with a standalone PD source IC - no Problem. I can do that easily (because Hardware design and Layout is in fact my main profession)

The datasheet you sent is a PD sink controller. Those are a whole lot easier to implement and more widely available.

I will however look around in the future and see if those all in one chips emerge.
If someone knows of such a chip, please give me a heads up!

  • cad435

Edit:
If someone out there is willing to make the PD3.1 implementation ins software I’ll happily design a MCU onto the feeder -Board.

STM32 or RP2040 are good widely accessible small chips with reasonable price.

Hit me up :slight_smile:

1 Like

Hi cad43,

have you ever thought about a much simpler approach without Power Delivery?

Use strictly 24V from your standard power supply of your 3D printer for VBUS and something like https://www.ti.com/lit/gpn/tusb320 on your PD-Toolhead.

Of course if you plug the USB-C connector coming from your PowerFeeder to something else than your PD-Toolhead it probably will kill that “something else”! Worst case, also the Klipper host computer could be damaged! It’s no stupid proofed approach and completly out of USB specfications!

The configuration of the TUSB320 could be done by your STM32 on your PD-Toolhead and you could use any USB connector on your Klipper host computer.

I will not do that:

  1. As you already mentioned, out of USB-Spec. I will NOT release anything that is so out of spec that people who build it will damage their devices. Especially if its such a widely used connector as USB-C.
    If you want something like that it is relatively easy to just take a cheap USB-A to C cable, cut it open and supply the VCC wire with 24V. In fact I have exactly that cable laying around to debug things. You can use my toolhead with such a Cable no problem (only up to 24V, the CH224K IC as per spec only withstands 22V, but I’t didnt blow up on me using 24V). I strongly recommend against any of this unless you know exactly what you’re doing :slight_smile:

  2. there is a voltage called “VCONN” on the CC Pins. This however is only used as a supplementary voltage over the CC-lines once a device attached. I believe no more than 200mA. Also the two CC-lines are primarily used for data and therefore have a far higher resistance than the “normal” VBUS, therefore you wont be able to transmit much power even if you want to (drastically) abuse them.

  • cad435

This is an exciting development! I’m happy you were able to find suitable 3.0 hardware. Looking forward to when 3.1 hardware becomes more integrated and available as the additional voltage/current capabilities put in firmly in the “ok now we can do everything with this” category.