はじめに
FDM(熱溶解積層)方式の3Dプリンタで小型平歯車(モジュール0.5、8T)を印刷していると、歯ごとに圧力角がばらつく現象に悩まされていた。当初は「奇数歯と偶数歯で誤差の出方が違う」という漠然とした理解で、原因を単軸移動と対角移動の速度差(いわゆる√2差)に求めていた。しかし実際にG-codeとgear_analyzer(自作の歯車解析ツール)の判定ロジックを突き合わせたところ、もっとシンプルで応用の効く原因にたどり着いた。
歯の「A面」「B面」は、ノズルが歯に入っていく面(進入面)と出ていく面(退出面)に対応しており、進入面の方が系統的に誤差が大きくなる。
この記事では、その発見に至った検証の流れと、実際の数値データを紹介する。
検証環境
- プリンタ:Ender-3系(ベッドスリンガー、Y軸にベッドが動く構成)
- 材料:PETG
- 歯車形状:モジュール0.5、8T、圧力角20°(標準インボリュート)
- 解析ツール:自作のgear_analyzer(画像処理で歯車を検出し、圧力角・歯厚・歯先円などを実測する)
発見のきっかけ:回転させても消えない偏り
歯の位置を22.5°回転させて印刷すれば、単軸移動/対角移動の速度差の影響が均され、奇偶差が緩和されるはずだと考えて実験した。結果は以下の通り。
| A面奇偶差 | B面奇偶差 | |
|---|---|---|
| 無回転(素のギヤ) | 5.43° | 0.03° |
| 22.5°回転版 | 1.25° | 3.93° |
回転させると、小さい方の面がAからBへ入れ替わっただけだった。これは「単軸/対角の速度差」という説明では辻褄が合わない。回転角に関わらず、常にどちらか一方の面だけに誤差が集中するという、もっと構造的な原因があるはずだと考え直した。
G-codeを読む
印刷に使ったG-codeのWALL-OUTER区間から、歯先(半径最大点)の角度を追跡すると、印刷が進むにつれて角度が一貫して減少していくことが確認できた。
idx=47 angle=407.0°
idx=67 angle=361.9°
idx=88 angle=317.0°
...
idx=192 angle=88.1°
角度が減少する = ノズルは**時計回り(CW)**に外周をトレースしている。
gear_analyzerのA/B判定ロジック
自作ツールのソースコードを確認すると、A面・B面は以下のように定義されていた。
angles_deg = np.degrees(np.arctan2(pts[:,1]-cy, pts[:,0]-cx))
...
for side_pts, side_name in [(p_pts[p_rel < -1], 'A'), (p_pts[p_rel > 1], 'B')]:
ここで注意が必要なのは、この角度計算がカメラ画像のピクセル座標(pts[:,1]は画像の行番号=Y)を使っている点である。OpenCVの画像座標系はY(行番号)が下向きに増加するため、機械座標系(G-codeのY、上向きが正)とは上下が反転している。この反転により、画像上で「角度が大きい方」は、実空間で見ると機械座標系での「角度が大きい方」とは逆の回転方向に対応する。
2つを組み合わせる
ノズルは時計回り(機械座標系で角度が減少する方向)に進む。画像のY軸反転を踏まえて実空間に対応づけると、
- 角度が小さい側(A面)を先に通過 → 歯に入っていく進入面
- 歯先を通過した後、角度が大きい側(B面)を後で通過 → 歯から出ていく退出面
A面=進入面、B面=退出面ということが、G-codeとソースコードの両方から確定した(座標系の上下反転を考慮した上での結論)。
なぜ進入面だけ誤差が大きいのか:曲率半径と圧力の遅れ
当初は「方向転換直後で速度が安定しないから」という漠然とした説明で済ませていたが、実際にG-codeの座標を調べてみると、もっと具体的な形状的特徴が見えてきた。
歯底に平坦なランド(歯底円を中心とした円弧)があるなら、それは歯車の中心を中心とした緩やかな弧(モジュール0.5・8Tの理論歯底円半径で1.375mm程度)になるはずである。しかし実際にG-codeの座標を確認すると、歯底付近で半径が最小になるのはわずか1〜2点だけで、そこから両隣へすぐに半径が増加していく、尖った谷に近い形状になっていた。8T・モジュール0.5という小さな歯数では、歯底のランド幅がほぼゼロで、隣り合う歯のフランク同士がほぼ直接合流していると考えられる。
この谷の部分は、G-codeの座標(0.001mm単位、線分長0.1〜0.3mm程度)から3点円フィットで局所曲率半径を計算すると0.3〜0.5mm程度と出た。座標の量子化誤差の影響を受けやすい計算のため絶対値としての精度は高くないが、フランク中間(0.7〜1.1mm程度)や歯先頂点付近と比べて、歯元の谷の部分が相対的に急なカーブになっているという傾向自体は妥当だと考えている。
ファームウェアのコーナリング速度制御は、曲率半径が小さいほど通過速度に強い制限をかける。歯元の谷を通過する際にこの速度低下が起きていると考えられる。
問題はここからで、このG-codeにはリニアアドバンス/プレッシャーアドバンス(M900やpressure_advance)の設定が一切含まれていなかった。つまり、速度が変化する区間で圧力補正がかかっていない。
速度が落ちる直前まで、ノズル内部は速い区間に合わせた圧力を溜め込んでいる。その圧力は速度指令が下がってもすぐには抜けず、曲率半径の小さい歯元の谷を通過している間、指令値以上の樹脂がじわじわと押し出され続ける。これがいわゆる「コーナーブロブ」で、設計上フィレットを付けていないにもかかわらず、印刷結果には歯元にフィレット状の盛り上がりが生じていた原因はこれで説明できる。
進入面(A面)がこの影響を強く受けるのは、直前の歯からの急な方向転換(歯先付近の小さな曲率半径区間)を経てすぐに歯元の谷へ入るため、圧力の遅れが解消されないまま次の急カーブに突入してしまうためだと考えられる。退出面(B面)は、歯元の谷を抜けた後、比較的曲率半径の大きいフランク上部に向かうため、圧力が落ち着く時間的余裕があるのではないか。
実際、圧力角の歯面別グラフ(gear_analyzerの歯面拡大表示)でも、A面(進入面)は歯元寄りの領域で理想曲線から外側に大きく外れる一方、B面(退出面)は同じ領域でも理想曲線に近い値を保っていた。
数値で見る優位性
無回転で印刷したギヤのB面は、以下の通り理論値にほぼ一致していた。
| 項目 | B面実測 | 理論値 |
|---|---|---|
| 圧力角 mean | 21.09° | 20.0° |
| 圧力角 奇偶差 | 0.03° | ― |
| 弦歯厚(測定方法修正後) | 0.778mm | 0.785mm |
一方、同じ個体のA面は圧力角の奇偶差が5.43°と大きく乱れていた。
実用面での結論:一方向駆動なら片面だけ良ければいい
RCカーのピニオン-スパーのような、ほぼ一方向にしか回転しない用途では、実際に荷重がかかるのは歯面の片側だけである。今回のケースでは駆動時にB面(退出面)が荷重面になっていたため、A面側がどれだけ乱れていても機能上は問題にならない。
実際、電流のベンチ測定(RPM vs 消費電流)を、
- 22.5°回転・無補正ギヤ
- 意図的な非対称圧力角による対症療法ギヤ
- 無回転・無補正でB面が理論値に一致したギヤ
の3種で比較したところ、消費電流の6次近似曲線はほぼ完全に重なり、幾何学的な精度の差は消費電流にほとんど影響しないという結果になった。むしろ最大到達回転数では、片面に特化して精度を上げた2・3が、両面とも中庸な1よりわずかに高い回転数まで回るという結果も見られた。
まとめ
- FDM歯車の歯面ごとの精度差は、単純な奇数/偶数ではなく、ノズルのトレース方向に対する進入面・退出面という構造で説明できる
- 歯数が少なくモジュールが小さい歯車では、歯底に平坦なランドがほとんどなく、隣り合う歯のフランク同士がほぼ直接合流する尖った谷になっている。この谷の部分は局所的に曲率半径が小さく、通過速度が制限されやすい
- リニアアドバンス/プレッシャーアドバンスが無効な状態では、速度低下区間で圧力の遅れが解消されず、**設計にないフィレット状の盛り上がり(コーナーブロブ)**が生じる
- 進入面(A面)は直前の急カーブ(歯先)からすぐに次の急カーブ(歯元の谷)に入るため圧力の遅れが解消されにくく、退出面(B面)は曲率の緩いフランク上部に向かうため圧力が落ち着きやすい、という違いが精度差を生んでいる可能性がある
- 一方向駆動の用途では、荷重面がノズルの退出面になるようにトレース方向・歯の配置を設計段階で合わせることで、追加の補正なしに高精度な歯面を作れる可能性がある
歯車に限らず、外壁を一方向にトレースするFDM造形物全般で、同じ「進入面/退出面」の非対称性が起きていると考えられる。精度が要求される面がある場合は、スライサーの外壁トレース方向と、その面が進入面・退出面のどちらになるかを意識する価値があるだろう。
今後の課題
- リニアアドバンス/プレッシャーアドバンスを有効にして同じギヤを印刷し直し、歯元の膨らみ(コーナーブロブ)が軽減されるかを検証する
- 消費電流という指標では幾何学的精度の差がほとんど見えなかったことから、次はバックラッシュの最適化(可変軸間距離マウントによるU字カーブ測定)にも主眼を移して検証を進めている
これらの結果は別記事で報告したい。