I’ m up to give the ‘Load Cell as endstop’ approach a try. I figured out that Klipper already supports this concept and already offers to configure that. My choice went to the ADS1220 since i want to use it for probing.
Unfortunately it is a lot more than just stuffing a big cap into it and also the reference voltage cannot be increased at whim. 7V is max for this ADC and the proper analog supply voltage also depends on a few more considerations, e.g. gain, target SPS etc. (see the datasheet).
On the other hand, everyone wanting to experiment with it and report their findings is more the welcome.
No, I would suggest the board Sineos mentioned, sorry.
You may contact @garethky I guess he will support allies using his board and giving the “strain gauge load cell based” approach a go. In my eyes, this is the future for endstops and bed meshing regarding Klipper 3D printing and maybe CNC.
The Document is a guide to Bridge Measurements and discusses the Topic in general, so not particularly for the ADS1220 - but i wonder if the described Four-Wire Resistive Bridge Measurement With a Pseudo-Ratiometric Reference and a Unipolar, High-Voltage (> 5 V) Excitation Source might be applicable on this ADC also?
That is quite promising and i really look forward for such a board!
I really understand, that there is a serious development running, with the honourable aim to achieve a ready-for-the-market product.
But since it is in prototyping state, thus not available at present (correct me if i’ m wrong!) and i just want to tinker with the technology at present, i really appreciate some help on my very experimental bricolage.
For example: One experiment on my side should be embedding the strain gauges directly in printed parts to build the load cell.
I’ m definitely willing to share my findings and/or try things i’ m requested for if i can carry then out with my setup. But i need a little start-up aid.
That said i’ m no professional in electronics nor programming but more a tinkerer, pulling just the knowledge needed to get something running. So please have a little patience with the naivety of mine…
Fully agreed, that’s why i like to fiddle about this technique.
We are in the phase of trying to find out what works with the ADS1220. I have already written code for it and I’ll be announcing a new testing branch that’s on the way to klipper mainline. So we have software. But hardware…
We have a number of challenges:
We are getting cheap load cells that only have 1mV/V of response
We know that extrusion forces can exceed 10Kg and beds similarly need quite a bit of strength to hold up. At 5V that’s just 500 nanovolts to a gram.
We know electrical noise is a “Big Deal” but we aren’t yet sure how to minimize or to what extent we can benefit from low noise. i.e. we haven’t quantified it yet. The TI reference design talks about 100 nanovolts of noise. We don’t know if we can get there when the sensor is plugged into a noisy 3D Printer with stepper drivers, heaters and so on.
We may need more amplification than the 128 PGA can give us. But we haven’t yet done an A/B comparison of the on board PGA with an external amplifier or tried the two in combination.
The board I’m designing is mainly to answer these questions. Once we know we can lock in the design and I primarily intend to target the under-bed sensors you are interested in.
The little dev boards that are on Amazon etc are not a complete solution. They lack input and reference filters. They lack power capacitors and voltage filtering. They lack inductors for shielding high frequency noise. Basically its a naked breakout board and a lot of stuff needs to go around it and we have to develop that stuff.
That is, what i have seen and why i started to tinker with the ADS1220.
Since i already have such a naked breakout board in hands i’ d like to know, how to do the basic wiring with it to get some readings with your software from my homebrew load cells.
Last but not least i’ d like to know, how to visualize those readings in a diagram, like we do with the ADXL for example.
I just like to mention this document provided by TI. In section 6.3 is explained how to use High-Voltage (> 5 V) Excitation. If we are just able to use 15V, like outlined in the document, we can triple the values and maybe get more distance to the noise level.
Edit:
I just found a bunch of documentation and will read there, expecting to find the visualization therein.
Just to throw that in: I want to put the strain gauges on the printhead … so i’ d prefer a tiny board design. Maybe having the ADXL onboard might be an option to the final design?
We haven’t seen a any cheap load cells that tolerate more than 5V. I’m sure they do exist but this community tends to settle for whatever is cheapest. The Chinese market is awash in 5V, 1mV/V load cells.
So what you are talking about is a fully integrated toolhead board. That’s a lot of work not directly related to load cells. I’m not going to tackle that until after I get a good reference board for under bed load cells. And even thy my hope is the reference design gets picked up by the usual board manufacturers and integrated into toolhead boards.
Acknowledged, now i understand where the bottleneck is…
… but if we have two of those cheap load cells in a row and the expected shift in this voltage divider is about a fraction of one Volt we would’ nd reach the limit with an excitation of 9V. That still gives us nearliy double signal-to-noise ratio. Or do i have an error in reasoning here?
Not really, since my concept is, to keep every kind of electronics out of the housing due to thermal burdens (whilst the ADS1220 seems to be a good choice because it operates up to 125°C).
But he ADXL is a need, also would be the ADC, if it becomes the standard in Z-probing. Since both can use the same SPI bus it might be an approach to put them together resulting in a minimalistic, slender PCB easy to accomodate on the printhead.
Said that, i’ d like to prefer soldering points instead of those bulky JST connectors. If the need for connectors exists, a simple Pin Header might be soldered on demand.
To be honest, the form factor was in deed what attracted me about that noisy, little dev board - however that was before i knew about it’ s noisiness.
So a fully integrated toolhead board is quite not what i have in mind, but a tiny PCB combining just the essential sensor systems.
Maybe someone likes to create a fully integrated toolhead board putting the sensor PCB piggyback with a set of Pin Headers (like those arduino shields)…
…or other way around: The toolhead board is just an extension to the sensor PCB since it carry’s the MCU already.
This is just an impression how things may look with some more parts assembled but still incomplete.
If anything will work as i expect, i would be quite happy!
Edit:
Here you can have a look at the predecessor without strain gauges. I was trying tap probing with the ADXL with this one, but unfortunately that didn’t work out with my slow and sturdy machine.
Here you can see how the strain gauges are embedded in the printed head-carrier. For protection they will get covered with ‘acetone-ABS-soup’ in the next step.
That is 2.048V, if i understood correctly. That’s by far less than the 5V discussed for the board @garethky has in development. How do you cope with the noise, or didn’t you encounter that problem?
Ratiometric measurement, i.e. Reference Voltage == Excitation Voltage to cancel out effects of drift or noise
Reference Voltage and Excitation to have the lowest noise possible as this directly affects the noise free bits for the resolution of the measurements
Higher Excitation Voltage gives a better noise / signal ratio and a better system sensitivity in mV/kg, which will get significant if you connect multiple load-cells in parallel
Optional but likely highly beneficial: AC excitation of the load-cell to cancel out ADC’s offset, parasitic thermocouples or any other offsets in the signal path
Going by these points a very draft design could look like: ADC_Klipper_Board.pdf (420.1 KB)
This is basically a synthesis of the above information. I’m by no means an EE, so take it with a grain of salt. Every comment / correction / improvement is highly welcome.
The chip only supports these specific combos: AIN0_AIN1, AIN0_AIN2, AIN0_AIN3, AIN1_AIN2, AIN1_AIN3, AIN2_AIN3, AIN1_AIN0, AIN3_AIN2, AIN0_AVSS, AIN1_AVSS, AIN2_AVSS, AIN3_AVSS. So this is a way to be explicit about which valid combo you want to use
Or should we do this:
input_mux_positive: AIN0
input_mux_negative: AIN1
Which seems to promise arbitrary input combinations but cant do that. I can check for the illegal combinations and throw an error
The only ways i know to reduce the impact of the surrounding EMI (noise floor) are:
Shielding, for suppressing influence on your system.
Filtering, for reducing the effects on your influenced system.
Avoidance, not to produce EMI, so you don’t need the above actions (best option but seldom applicable).
Raising your Vref can roughly been put to the second option. You raise your signal level higer above the noise floor, so you get more headroom to identify your wanted signal.
Lowering the voltage in EMI producing components can be helpful, since this belongs to the third option.
this does nothing to your signal quality, since noise floor and wanted signal are risen equally.