138178

2024年5月19日日曜日

自作CPUで遊ぶ 28

円弧処理
Gコードには円弧用のコードが定義されている。 矩形コーナのRや円形な図形はCAMツールが線分に変換してGコードに出力するのではなく円弧用のデータが出力される。 円形はよく使うので円弧処理の実装は必須だ。 円弧用のGコードはG2とG3の2種類ある。G2は時計回り用、G3は半時計回り用だ。 フォーマットもcenter formatとradius formatの2種類ある。前者はパラメータとして円弧の終点座標と、始点座標から中心座標へのオフセット座標を与え、後者は終点座標と円の半径を与える。turnsは円周をなぞる回数だ。 何れかのフォーマットでデータが入力されたらこれをX/Y軸のパルス数に変換してモーターを回す必要があるが、この処理をどこでやるか、つまり、ARMコアでやるかZumi32でやるかを検討する必要がある。変換に三角関数演算が必要な場合はARMでやるしかない。
center formatの場合は終点座標と、始点座標から中心座標へのオフセット値が与えられるので、下図のように中心座標と半径を求めてやればあとはXまたはY軸を増加しながら対応するYまたはX座標をピタゴラスの定理で算出していけば良いので三角関数は出てこない。

一方、radius formatはちょっと面倒だが、中心座標を求められればあとはcenter formatと同じ処理にできるハズだ。

検討した結果、以下のやり方で中心座標は求められそうだ。
Zumi32側にはルート演算器は入れてあるので、これならZumi32でも処理できそうだ。

0 件のコメント:

コメントを投稿

ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...