コメント欄に動画貼り付けようとしたら、書き込み制限が掛かったの、で。。





コメント欄にて、BBBのMachinekitで余分なパルスが出るので、、、とご相談されたのですが、私の環境では、残念ながら余分なパルスを観測することはできませんでした。


現実の物の長さを数値に限度のあるコンピュータに落とし込んで使用するNCコントローラー。動画上のHAL Meterのウインドウに写っている数値が、計算された数値と、出力されるパルスの位置との「誤差」です。1パルス何mmとゆう、デジタルチックに出力される司令パルス。誤差が出てきて当たり前だと私は思います。

コンピュータ内では、1パルスの長さで分割されたマス目上を数値的に移動しているので、現実の位置をリニアエンコーダー等で拾っていない限り(とはいえども、リニアエンコーダーを使えどリニアエンコーダーのメモリで分割されてるだけですが)実際の位置との乖離が起こってもおかしくは無いと思います。

もちろん、この手の数値を表示させることの出来ない市販ソフトウエアNCとかでも軸作動中はフィードエラーは有るはずです。
残念ながら、オープンソースでないソフトウエアは、このフィードエラーの収束のさせ方が解りません。

1STEPパルスの移動量が割り切れない数値なら、尚更です。

このフィードエラー、LinuxCNCでもMachiekitでもこれ以上フィードエラーがあるとマシンが止まる、とゆう数値が設定可能です。
ジッタが少なく、作動させる長さの単位の分割数が多ければよりフィードエラーを少なく出来るかもしれません。


ステッピングモーターを使ったオープンループでのNC制御では、ステッピングモーターが確実に1STEPづつを刻むことを前提に、また、定規となる送り機構の正確さによってPC上のNCの指し示す長さの数値が担保されています。

この誤差の収め方、オープンソースで公開されているNCコントローラーはいろいろな方法で解決してるようです。
オープンソースとして公開されているのでソースコードを追うと、その誤差の収め方が判ります。

読んでみたGRBLのstepper.cのソースコード内のコメント欄に、、

引用:
   Compute segment step rate, steps to execute, and apply necessary rate corrections.
NOTE: Steps are computed by direct scalar conversion of the millimeter distance
remaining in the block, rather than incrementally tallying the steps executed per
segment. This helps in removing floating point round-off issues of several additions.
However, since floats have only 7.2 significant digits, long moves with extremely
high step counts can exceed the precision of floats, which can lead to lost steps.
Fortunately, this scenario is highly unlikely and unrealistic in CNC machines
supported by Grbl (i.e. exceeding 10 meters axis travel at 200 step/mm).

とあります。
誤差の丸めについてで、終わりの方に
機械翻訳: このシナリオはGRBLでサポートされているCNCマシンでの可能性は極めて低く非現実的です。

的に書いてあります。

で、 200step/mmで10mの軸移動のだと、、、、と。。

多分GRBLと同じルーチンでSTEPパルスを生成しているNCコントローラーは同じなのでしょう。


LinuxCNCの場合、コントローラーであるPCのスレッドのジッタによって、この誤差が大きくなる場合があるので、私がLinuxCNC作動用のとして使用しているPCに比べBeagleBoneはこのジッタが大きいのでもしかして?と思い測ってみました。

もちろん、GRBLと同様に、極端に大きなNCフレームの場合、この誤差が大きく出る事もありえないとも。。
そもそもそんなに大きなフレームであれば、どこかで長さのフィードバックを掛けると思います、が。


オープンソースであること、とは単にソフトウエアのコストを掛けずに使える事が重要なことではなく、そのソフトウエアがどのように動いているかを理解して使うことが重要なんだな、と思います。

スポンサーサイト

テーマ : 自作・改造
ジャンル : コンピュータ

DIYリニアドライブにプリントヘッドセンサの精度



なるほ、ど。


字幕が入っているので字幕を日本語に設定すると日本語の字幕で見ることができます。

テーマ : 自作・改造
ジャンル : コンピュータ

タッチ付き液晶パネルと手製のリニアエンコーダー




以前から触っているebayやAliで今、安価に入手できるILI9341を液晶パネルのコントローラーとして持つ、中華液晶パネルをSTM32F410RBを使用して簡易的なDigitalReadOutを作りました。
この安価に入手出来るILI9341のSPIインターフェースの液晶パネル、マイコンから単純にSPI通信を使って単純に通信を行って制御すると、描画速度がとても遅く、リアルタイムの表示に近い速い表示はできません。
どうも、マイコン側が表示速度のネックとなるようで、DMAを通したSPIマスターとすると高速に送信できるようです(STM32の場合)

このあたりの液晶パネルの表示速度に関しては、通信の速度に依存していて、私が触った中では、STM32F4の100ピン以上の物に付いているFSMCとゆうメモリコントローラーを使い、16bit幅のパラレルで通信(ILI9325を使用)した時が最も速かったです。

ただ、国内で販売されているこのような小型液晶パネル、パラレル接続、SPI接続共良いお値段なので、そうそうバカスカ使うわけにもいかずですし、また、海外で何故かSPIインターフェースのILI9341がとても安価だったので数枚購入してあります。
また、ILI9341の液晶パネル、タッチパネルとタッチパネルコントローラーであるSPI接続のADC、SDカードスロットが付いているものと、SDカードスロットだけの物があり、SDカードスロットのみの物の方が若干お求めやすいのですが、タッチパネルとタッチパネルコントローラーの付いたものの方が他にスイッチ等を付けなくとも、選択入力が可能なので、タッチパネル付きを使いました。

載っているタッチパネルコントローラーはADS7843ピン互換のSPT2046。もちろんマイコンのADCを使用してタッチパネル制御(とゆうかADCでの読取り)も出来るのですが、コントローラーICはタッチパネルにタッチした時に信号が出るので、この信号で外部割り込みを起こし、SPI通信にてX,Y軸のADCの値を読みこみます。


参考リンク(ebay)
2.4" 240x320 SPI TFT LCD Touch Panel Serial Port Module with PBC ILI9341 3.3V
2.2 inch 2.2" SPI TFT LCD Display module 240x320 ILI9341 51/AVR/STM32/ARM/PIC


使用したMCUはSTM32F410RB。たまたま出荷初期の物だったようで現在の価格よりお求めやすい価格で購入できました。
STM32F4を選んだのは、単純に以前からF4を触っていてF4のスタンダードペリフェラルライブラリに慣れていたからからとゆうのが大きな理由ですが、このILI9341のSPIインターフェースのものをSTM32F4のDMAを通したバースト?SPI通信が出来るライブラリがWeb上に公開されていました。

http://stm32f4-discovery.net/より
Library 08- ILI9341 LCD for STM32F4

このページ内にあるライブラリをEm::Blocks IDEのプロジェクトにインポートして使わさせていただきました。

ところで、このEm::Blocks、私自身入力補完とかがとても便利で使いやすいのですが、新しいバージョンへの移行なのかどうか解りませんが極最近発売されたMCUの設定がありません。もちろんSTM32F410自体新しいもの、なので、設定は有りませんでしたが、STM32F401RBの設定でプロジェクトを作成、メモリサイズが違うのでビルド時に使うファイル内のメモリサイズを変更してビルド、書き込みをしました。F4シリーズ内では、メモリマップされたI/O部分はほぼ同じで、小変更でのプログラムの使い回しが利きやすいです(要データシートでの確認)

このSTM32F410、F4品種内での各種機能削除された廉価品とゆう位置づけで、USBとかの機能が削減されています、が、エンコーダーの出力信号を直接受けて、32bitのカウンタで計数できる直交エンコーダーインターフェースが載っています。
STM32F410自体の最大作動周波数は100Mhzで、このカウンタの最大作動周波数も100Mhzです。モーション系の制御に直交エンコーダーを使うときに、エンコーダーパルスの落ちによる計数不良は出したくないので、ハードウエアとして載っている直交エンコーダーインターフェースを使いました。

STM32に限らず、他のMCUでも直交エンコーダーインターフェースの載っているものが沢山あるので、同じ事を他のMCUでもできると思います。

液晶パネルの載っているMCU基板は、液晶パネルが簡単に載るように基板CADのEagleで作図、中華基板作成会社に発注しました。
DigitalReadOutとするため、、に基板を作りましたが必要なものを作るために割と汎用的にSTM32F410RBの全てのピンを引き出し、シルクにて各ポート番号を両面に書いてあります。
基板の回路としては、各ピン引き出しと、液晶パネル取り付け用の配線と引き出し、LDOにての電源と、電源周りのバイパスコンデンサとアナログ電源へのフィルタの追加程度で、内部OSCを使用しているためメインクロック生成用のクリスタルすら載ってません(取り付けは可能)。

パスコンの数、容量等々は、基本、STM32F410RBのデータシートに記載されてます。

このようなボードを作ると収まりが良いのですが、秋月電子で売っているSTM32の、タイマ/カウンタに直交インターフェースの載っているものであれば、ほぼ同じことが出来ると思います。

Nucleoや、STM32Discoボードなど、書き込みに必要なSTlinkが付いているので別途書き込みにSTLinkV2などを購入する必要が有りません。また、自作MCUボードを作った場合、NucleoやDiscoボード上のターゲットデバイスとSTLinkをジャンパで接続を切り離し、STLink単体としても使用できるのでお得です。
このボードにも、STM32F3Discovery上のSTLinkと、STMicroがMCU書き込み用に公開しているSTlink-utilityを使用して書き込んでいます。

テーマ : 自作・改造
ジャンル : コンピュータ

DIYリニア駆動の精度



方法は違えどベアリングを競らすのとか、正確に動かすことに関しては思考的にこのブログで公開してるベニヤ合板製のNCルーターと同じ。いかにガタを無くす、か。色々と方法はあると思います。

テーマ : 自作・改造
ジャンル : コンピュータ

RaspberryPi3でMachinekit/LinuxCNC 今度はSPI-PlutoServo

RaspberryPI3で無事Machinekit/LinuxCNCを使い、SPI-PlutoStepがちゃんと作動したので、ちょーしこいて今度はSPI-PlutoServoをAlteraのFPGA、MAX10に公開されているSPI-PlutoServoを書き込みテスト。

ini、halファイルをちょこちょこイジっての作動検証です。

SPI-PlutoStepとは出力のピン数が違うのと、何度も書き込むのが面倒だったので、以前中華基板屋さんで作って頂いた残り(とはいえども、使ったのはSPI-PlutoStepを作った1枚だけ)の基板を使い新たにSPI-PlutoServo専用の基板としました。


使ったMAX10は一番LEの少ない10M02SCE144。LE数だけでいけばMAXⅡの570の100ピンの物で事足りるし、SPI-Plutoの公開されているページ内では、MaxⅡ用のファイルが公開されています、が、海外通販での価格がLE数ほぼ4倍で、ピン数が144本のMAX10の方がお求めやすい価格になっているので、自作したほうが楽、、といいますか^^;
MAX10の10M02SCE144のブレイクアウトボードのEagle6.5のファイルはパスコン等の数値が入ってるか定かじゃないファイルですが、Akirahitoshi/10m02_breakoutboardに置いておきます。JTAGのプルアップ抵抗すら書いてないピン番号をシルクで自分が間違えないように書いただけのファイルですので、必要であれば電源等も記入し変更、ガーバー出力をして、基板屋さんに発注してみてください。

動画上、まだ、モーター制御部分のPIDの数値を詰めていない単なる作動チェックですので、DCモーターの動きがぎこちないです^^;

DCモーター自体は以前の記事「ギヤードDCモーターをLinuxCNCのパラレルポート入出力で制御する。」で使用した朱雀技研さんから購入させて頂いたエンコーダー付きギヤードモーターKS5N-IG36Pを使用しました。
負荷がギヤしかない状態なので、余りトルクが掛からないので電流量も少ないので、モータードライバには東芝製のTB6643KQを使用。エンコーダー部分には5V電源を供給し、AHC541を使い5Vから3.3Vに信号電圧をレベル変換して使用しました。



動画自体、携帯からのUPだったので、解像度は低いのですが、LinuxCNC付属のHALスコープにてポジションコマンドの数値やエラーの数値、実際の制御信号の数値をグラフ化して見ながら調整できます。
この辺が、他NCコントローラーとの違いで、各種設定自体はテキスト形式で慣れが必要ですが慣れてしまえば、他NCコントローラーになぜこの設定項目が無いか不思議に思うようにも、、、。

3軸NCとして、だけじゃなく、何らかの順番によって次々作動してくような加工機などの制御などにも対応出来るはずです。

テーマ : 自作・改造
ジャンル : コンピュータ

ライセンス
アクセスカウンター
プロフィール

あきらひとし。

Author:あきらひとし。
木工用CNCルーターフレームと、ステッピングモータードライバを作ってみました。
たぶん記事は一般的な人には殆ど必要のない事ばかりなの、かも。

モーターは回るだけでも楽しい。制御(速度、トルク、位置)できるともっと楽しい!

メールフォーム

名前:
メール:
件名:
本文:

リンク
最新記事
カテゴリ
スポンサードリンク
スポンサードリンク 
スポンサードリンク
オンラインカウンター
現在の閲覧者数:
検索フォーム
RSSリンクの表示
最新トラックバック
最新コメント
月別アーカイブ