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);
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
ty = center_it ? 0 : y/2;
|
||||
tz = center_it ? z/2 : z;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue