Fixed labels which previously went off edges of bar and tower.
This commit is contained in:
parent
d9e3b5520f
commit
85ee00dc19
2 changed files with 299 additions and 3 deletions
260
README.md
260
README.md
|
|
@ -1,3 +1,259 @@
|
||||||
# motion-diagnostics-suite
|
# sv06-belt-recovery-stress-tests
|
||||||
|
|
||||||
Parametric OpenSCAD models and procedures for diagnosing layer shifts, belt tension, and motion instability in FDM 3D printers.
|
Belt tension recovery and motion stability test models for bed-slinger 3D printers (e.g., SV06-class machines).
|
||||||
|
|
||||||
|
---
|
||||||
|

|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
These models are designed to help recover from situations where printer motion accuracy has been degraded, typically due to:
|
||||||
|
|
||||||
|
* Adjusting belt tension without a reference baseline
|
||||||
|
* Experiencing layer shifts during prints
|
||||||
|
* Replacing belts or modifying mechanical components
|
||||||
|
|
||||||
|
This project provides:
|
||||||
|
|
||||||
|
* Parametric OpenSCAD models
|
||||||
|
* A structured test procedure
|
||||||
|
* Guidance for interpreting failure modes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## When To Use This
|
||||||
|
|
||||||
|
Use these tests if you observe:
|
||||||
|
|
||||||
|
* Sudden layer shifts (e.g., 3-5 mm offsets)
|
||||||
|
* Inconsistent dimensional accuracy
|
||||||
|
* Audible belt skipping or motor stutter
|
||||||
|
* After adjusting belt tensioners
|
||||||
|
|
||||||
|
Here's an example of a case for a hand held radio where the top suddendly shift at the 20mm height.
|
||||||
|

|
||||||
|
---
|
||||||
|
|
||||||
|
## Models Included
|
||||||
|
|
||||||
|
### 1. Cube (Baseline Test)
|
||||||
|
|
||||||
|
* Dimensions: 40 × 40 × 40 mm
|
||||||
|
* Purpose:
|
||||||
|
|
||||||
|
* Verify basic printer stability
|
||||||
|
* Detect gross mechanical issues
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Y-Bar (Axis Stress Test)
|
||||||
|
|
||||||
|
* Dimensions: 20 × 150 × 50 mm
|
||||||
|
* Purpose:
|
||||||
|
|
||||||
|
* Stress the Y-axis (bed movement)
|
||||||
|
* Detect belt slip under momentum and direction reversal
|
||||||
|
|
||||||
|
**Important:**
|
||||||
|
|
||||||
|
* Orient the 150 mm dimension front-to-back on the bed
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Tower (Long-Duration Test)
|
||||||
|
|
||||||
|
* Dimensions: 18 × 18 × 120 mm
|
||||||
|
* Purpose:
|
||||||
|
|
||||||
|
* Reveal issues that appear only over time
|
||||||
|
* Detect cumulative drift, resonance, or late-stage layer shifts
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Print Procedure (Recommended Order)
|
||||||
|
|
||||||
|
Run each model as a **separate print job**:
|
||||||
|
|
||||||
|
1. **Cube**
|
||||||
|
|
||||||
|
* Confirms system is not fundamentally broken
|
||||||
|
|
||||||
|
2. **Y-Bar**
|
||||||
|
|
||||||
|
* Directly tests axis tension and inertia behavior
|
||||||
|
|
||||||
|
3. **Tower**
|
||||||
|
|
||||||
|
* Tests stability over time and height
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Suggested Slicer Settings (Orca Slicer)
|
||||||
|
|
||||||
|
### Cube
|
||||||
|
|
||||||
|
* Layer height: 0.20 mm
|
||||||
|
* Perimeters: 3
|
||||||
|
* Infill: 20-25% (grid or gyroid)
|
||||||
|
|
||||||
|
### Y-Bar
|
||||||
|
|
||||||
|
* Layer height: 0.20 mm
|
||||||
|
* Perimeters: 3
|
||||||
|
* Infill: 15-25% (grid recommended)
|
||||||
|
|
||||||
|
### Tower
|
||||||
|
|
||||||
|
* Layer height: 0.20 mm
|
||||||
|
* Perimeters: 3
|
||||||
|
* Infill: 0-10%
|
||||||
|
* Brim: optional (only if adhesion is an issue)
|
||||||
|
|
||||||
|
See the settings folder for settings used in Orca Slicer.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Belt Tension Guidance
|
||||||
|
|
||||||
|
This project assumes GT2 belts (typical for most hobby printers).
|
||||||
|
|
||||||
|
### Frequency Method (Recommended)
|
||||||
|
|
||||||
|
Using a phone-based spectrum analyzer:
|
||||||
|
|
||||||
|
* Target range: **90-110 Hz**
|
||||||
|
* Reference: ~110 Hz ? ~2 lb tension (Voron baseline)
|
||||||
|
|
||||||
|
Procedure:
|
||||||
|
|
||||||
|
1. Move bed so belt span ~ 150 mm
|
||||||
|
2. Pluck belt
|
||||||
|
3. Measure frequency
|
||||||
|
4. Adjust tensioner
|
||||||
|
5. Repeat until stable
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
* Too loose:
|
||||||
|
|
||||||
|
* Low frequency (<70 Hz)
|
||||||
|
* Layer shifts likely
|
||||||
|
|
||||||
|
* Too tight:
|
||||||
|
|
||||||
|
* High frequency (>120-130 Hz)
|
||||||
|
* Motor strain, possible missed steps
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Interpreting Results
|
||||||
|
|
||||||
|
### Good Result
|
||||||
|
|
||||||
|
* Clean vertical alignment
|
||||||
|
* No sudden offsets
|
||||||
|
* Consistent layer stacking
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Failure Modes
|
||||||
|
|
||||||
|
#### Sudden Layer Shift
|
||||||
|
|
||||||
|
* Cause:
|
||||||
|
|
||||||
|
* Belt too loose
|
||||||
|
* Pulley slipping
|
||||||
|
* Action:
|
||||||
|
|
||||||
|
* Increase tension slightly
|
||||||
|
* Check motor pulley set screws
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Repeated Shift at Same Height
|
||||||
|
|
||||||
|
* Cause:
|
||||||
|
|
||||||
|
* Mechanical obstruction
|
||||||
|
* Cable snag
|
||||||
|
* Action:
|
||||||
|
|
||||||
|
* Inspect motion path
|
||||||
|
* Check wiring harness clearance
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Gradual Lean / Drift
|
||||||
|
|
||||||
|
* Cause:
|
||||||
|
|
||||||
|
* Frame or axis alignment issue
|
||||||
|
* Action:
|
||||||
|
|
||||||
|
* Inspect rails, wheels, or rods
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Ringing / Ghosting (No Shift)
|
||||||
|
|
||||||
|
* Cause:
|
||||||
|
|
||||||
|
* High acceleration
|
||||||
|
* Action:
|
||||||
|
|
||||||
|
* Reduce acceleration (not a belt issue)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes on Methodology
|
||||||
|
|
||||||
|
These tests intentionally:
|
||||||
|
|
||||||
|
* Emphasize repeated motion in one axis
|
||||||
|
* Increase inertial load with height
|
||||||
|
* Create conditions where marginal tension fails visibly
|
||||||
|
|
||||||
|
This approach isolates motion system issues rather than general print quality.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## OpenSCAD Usage
|
||||||
|
|
||||||
|
Generate models:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openscad -D 'model="cube"' -o cube_$(date +%Y%m%d_%H%M).stl stress_test_models.scad
|
||||||
|
openscad -D 'model="ybar"' -o ybar_$(date +%Y%m%d_%H%M).stl stress_test_models.scad
|
||||||
|
openscad -D 'model="tower"' -o tower_$(date +%Y%m%d_%H%M).stl stress_test_models.scad
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Provenance
|
||||||
|
|
||||||
|
Generated with:
|
||||||
|
|
||||||
|
* OpenSCAD
|
||||||
|
* Orca Slicer (recommended)
|
||||||
|
* Frequency-based belt tuning derived from:
|
||||||
|
|
||||||
|
* Voron Design tuning methodology
|
||||||
|
|
||||||
|
This project was developed with ChatGPT.
|
||||||
|
---
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Recommend: MIT or CC-BY 4.0 for broad reuse.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Improvements welcome:
|
||||||
|
|
||||||
|
* Additional test geometries
|
||||||
|
* Axis-specific stress models
|
||||||
|
* Automated calibration workflows
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -147,8 +147,48 @@ module rounded_box_uncentered(x, y, z, r) {
|
||||||
square([x, y], center=false);
|
square([x, y], center=false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module place_top_label(txt, x, y, z, center_it=false) {
|
module place_top_label(txt, x, y, z, center_it=false) {
|
||||||
|
|
||||||
|
// --- parameters ---
|
||||||
|
margin = 2; // mm clearance from edges
|
||||||
|
|
||||||
|
// usable space
|
||||||
|
usable_x = x - margin;
|
||||||
|
usable_y = y - margin;
|
||||||
|
|
||||||
|
// choose orientation: run along long axis
|
||||||
|
rotate_text = (y > x);
|
||||||
|
|
||||||
|
// limiting width after orientation
|
||||||
|
limit = rotate_text ? usable_y : usable_x;
|
||||||
|
|
||||||
|
// crude text width estimate factor (~0.6 * size * chars)
|
||||||
|
est_char_width = 1.0;
|
||||||
|
est_len = len(txt) * est_char_width;
|
||||||
|
|
||||||
|
// compute size that fits
|
||||||
|
auto_size = limit / est_len;
|
||||||
|
|
||||||
|
// clamp to your preferred max size
|
||||||
|
final_size = min(label_size, auto_size);
|
||||||
|
|
||||||
|
// placement
|
||||||
|
tx = center_it ? 0 : x/2;
|
||||||
|
ty = center_it ? 0 : y/2;
|
||||||
|
tz = center_it ? z/2 : z;
|
||||||
|
|
||||||
|
translate([tx, ty, tz - label_depth])
|
||||||
|
rotate([0, 0, rotate_text ? 90 : 0])
|
||||||
|
linear_extrude(height=label_depth + 0.02)
|
||||||
|
text(
|
||||||
|
txt,
|
||||||
|
size=final_size,
|
||||||
|
font=label_font,
|
||||||
|
halign="center",
|
||||||
|
valign="center"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
module place_top_labelOLD(txt, x, y, z, center_it=false) {
|
||||||
tx = center_it ? 0 : x/2;
|
tx = center_it ? 0 : x/2;
|
||||||
ty = center_it ? 0 : y/2;
|
ty = center_it ? 0 : y/2;
|
||||||
tz = center_it ? z/2 : z;
|
tz = center_it ? z/2 : z;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue