CPLDを使ってのNCコントローラーの出力パルス数を計測。

AlteraのMaxⅡCPLDを使用してアップダウンカウンタを作成してみました。

なぜ、アップダウンカウンタかとゆうと、NCコントローラーのSTEPパルス数を外部ハードウエアで計測し、NCコントローラー内の数値と合っているか確認をするためです。

たとえば、100mm動かして、100mm戻した場合、行って来いで数値的に0に戻ってないとおかしいので、それを確認するために、高速カウント可能なCPLDを使用してみました。

CPLD駆動用の40Mhzの発振器をStep信号入力に入れた所、ちゃんと計数しているようなので、最大50kHzのBeagleBoneBlack LinuxCNCのパルスならしっかり計数してくれるでしょう?^^;



以前、ATMegaを使用して同じようなものを作りましたが、一部NCコントローラーでG0x0y0z0でゼロに戻らない物があり、さMCUの作動周波数が問題で??と思い、再度もっと高速に計数できる物を作りました。


MaxⅡ内のデータ作成にはAlteraのツールを使い、SchematicとPinplannerだけで作成。

一応VHDLとVerilogHDLを気持ち程度読むことが出来るのですが、一切HDL言語を使用せずにデータを作りました。

ツール内のプリミティブと呼ばれる機能ブロック的なものの中に、ロジックICをエミュレートする物があり、その辺を接続するだけの、わりと簡単な作業。

74168十進アップダウンカウンタと、74247BCDto7SEGとマルチプレクサとかとかを使用しての回路記述です。

たぶんロジックICを組み合わせても作ることが出来るはず、ですが、ロジックICを探して入手するのも結構手間なので、CPLDやFPGA内にそれと同等な回路を作成したほうが、簡単にできるはず。

もちろん、LED7SEGはダイナミック点灯させてあります。




動画はBeagleboneBlackのLinuxCNCを使用してのSteo/Dir信号の計測です。

この動画の状態では、DIR信号の理論が逆になっているので、Step信号が入ると数値が減っていきます^^;
アップダウンカウンタであるゆえんです。。
最終的にG0x0y0すると、カウンタは0に戻ります。





こちらは、CPLD内のDirection信号にnotを入れた状態です。

きちんとX軸が+方向に移動すると、数値も増えていき、-方向に移動すれば減っていきます。

こちらも最終的にG0x0y0すると、カウンタで計数している数値も、LinuxCNC内の数値も0に戻ってます。




あなたのNCコントローラーは正確ですか??^^;

特に、オープンループ制御である、ステッパモーターを使用したNC制御はきちんと動いているかの確認が重要に思います。
加工を失敗すると、材料がゴミになってしまうので。。



ちなみに使用したMaxⅡ基板はOptimizeさんのMAX2 CPLDボードで、書き込みに使ったのはByte Blaster MV互換(JTAGライター)です。

プリミティブを使用した回路記述なので、元になるロジックICの機能そのままなので、今回のアップダウンカウンタに必要のない機能部分のロジックも入っているせいか、このCPLD内に同じ回路が2つしか入りません。

当然の事ながらマイコンを使ったアップダウンカウンタを作ったほうがコスト的に安く作れると思いますが、パルスの取りこぼしの無いように、今回はこのように作成してみました。

カウンタをUPだけにして、別カウンタで時間を区切ってカウントすると、周波数カウンタとかも、割りと手軽につくれるのでは??


UPDOWNKAIRO.jpg

スポンサーサイト

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

コメントの投稿

非公開コメント

BBBのパルス測定

管理人様

初めまして
管理人様のページを参考にBBBにインストールしたlinuxcncのパルスを測定したのですが、1~2パルスほど余計にカウントされまてしまいまいます。
記事のように”言って来い”の計算ではゼロになるのですが、一定の距離(1㎜とか10㎜)を送り、計算通りのパルス数が計測できるか測定してみると、計算値より、1~2パルス分余計に計測されてしまい、原因がまったくわかりません。

もしよろしければアドバイスいただけると助かります。



症状から、カウンターの製作ミスかと思ったので、実際にモーターを回転させてみると、余分なパルスが確かに出ているようで、徐々にズレていきます。
また、USBCNCのパルスを自作カウンターで測定するとこのようなズレは生じないので、カウンターの不具合でもなさそうです。

ちなみにlinuxcncの設定はインストール直後の状態でも同じ症状が出るのでlinuxcncの設定ミスではないようです。

使用したconfigはXylotexとBeBoPe-Bridgeの2種類試しましたが、どちらも同じ不具合が生じます。

管理人様のBBBはこのような不具合は発生しないのでしょうか?よろしくお願いいたします。


Re: BBBのパルス測定

書き込みありがとうございます。

LinuxCNCを3軸で起動させ、Machineメニュー内のHalMeterでaxis.x.f-error(xは操作する軸)を選択、数値を観察してください。

ManualControlを使って単軸で+-のボタンを使っての移動の場合、このf-errorの数値が出てきます。
もしかしたら余分なパルスの原因はコレではないかと。。

次にファイルメニューの下のLinuxCNCの仮想電源ボタンをOffOnし、フィードエラーをリセットします。
この状態ですべての軸をホームポジションにし、ManualControlではなく、MDI(ManualDataInput?)タブにし、
G0 x100
とGコードを直接入力しEnter。すると軸移動しますが、フィードエラーの最終的な数値は0となります。

記事のようにパルスカウンタを繋いで試して確認している訳ではないのでアレですが、多分パルス数の誤差が出てないはず、です。

コレでも出るようでしたら、速度加速度パルス数等々内部数値を見ながら数値を見なおして運用するほかないと思われます。


ご質問内容に細かい作動手順等々が無いので、コレで問題が解決するのかどうか解りませんが、ご確認していただけると有り難いです。


オープンソースなNCコントローラーは多々ありますが、LinuxCNCは処理の内部数値を観察したり変更したりできるソフトウエアNCコントローラーなので、内部数値を確認したりしてテスト、運用してみると、コンピュータ数値制御がどれだけ正確か、また、どれだけ誤差があるのかが、観察出来るので解りやすいです。

話はそれますが、LinuxCNCに限らず、台形加速時の加速度の数値等々、割り切れない数値がたくさん出てくるのでどのNCコントローラーでも、軸移動時にはある程度のフィードエラーが発生しているものと思ってます。




この記事を書いた頃、オープンソースとして使えるNCコントローラーが数種出てきたところで、パルス数のちょっと疑問があったので、記事内のようにパルスカウンタを作り、実際のパルス数との比較をしてみました。
パルス制御部分、数値の誤差の吸収?の仕方等々そのコントローラーの考え方によりマチマチで、記事にはできませんでした。

大本であるLinuxCNC自体設定ファイルのINIファイル内でFERRORとMIN_FERRORとゆう設定項目があり、フィードエラーを許容してたりします。

不具合、、とゆうか仕様とゆうか、、、。



> 初めまして
> 管理人様のページを参考にBBBにインストールしたlinuxcncのパルスを測定したのですが、1~2パルスほど余計にカウントされまてしまいまいます。
> 記事のように”言って来い”の計算ではゼロになるのですが、一定の距離(1㎜とか10㎜)を送り、計算通りのパルス数が計測できるか測定してみると、計算値より、1~2パルス分余計に計測されてしまい、原因がまったくわかりません。
>
> もしよろしければアドバイスいただけると助かります。
>
>
>
> 症状から、カウンターの製作ミスかと思ったので、実際にモーターを回転させてみると、余分なパルスが確かに出ているようで、徐々にズレていきます。
> また、USBCNCのパルスを自作カウンターで測定するとこのようなズレは生じないので、カウンターの不具合でもなさそうです。
>
> ちなみにlinuxcncの設定はインストール直後の状態でも同じ症状が出るのでlinuxcncの設定ミスではないようです。
>
> 使用したconfigはXylotexとBeBoPe-Bridgeの2種類試しましたが、どちらも同じ不具合が生じます。
>
> 管理人様のBBBはこのような不具合は発生しないのでしょうか?よろしくお願いいたします。








BBBのパルス測定

丁寧に返信して頂きありがとうございます。
アドバイスを元に検証してみます。
結果は後程報告いたします。取り急ぎ、お礼まで。

検証結果の報告

昨日はアドバイスありがとうございました。

アドバイス通りGコードによるパルスを測定したところ、誤差は明らかに小さくなるものの、ゼロにはなりませんでした。
コメント欄では図などを添付できないので検証結果は私のサイトで公開しました。
(何か根本的なミスを犯しているような気がするので、お気づきの点がありましたらご指摘いただけると助かります。)


ちなみに、私のパルス測定器はDir端子は接続せず、純粋にパルスだけを割り込みトリガーにして測定してみました
(DirとStepの割り込みが干渉しているのではないかと思い、Dirは外しました。)
http://jisaku-koubou.com/archives/3323

Re: 検証結果の報告

g0x100でも、フィードエラーは出ませんでしたよ。私の持ってるBBBでは。ちなみにiniファイルはCRAMPS

インストールの手順から、使ったMachinekitのバージョンまで記載したほうが良いと思われます。

検証結果 追加報告

お返事ありがとうございます。
f-errrorはなぜかBBBを再起動したらエラーが出なくなりました。
ただし、やはりパルス異常は続いております。

インストール手順やバージョンについても情報不足だったようですね。
コメントでは長くなってしまいますので、いずれもブログの方にまとめて記載してしまいました。
個別のURLも列挙すると諄いと思い、一つにまとめてしまいました。



インストール方法はこちらのURLの通りに行いました。
SDカードブートです。
http://jisaku-koubou.com/archives/2962

BBBにインストールしたLinuxCNCのバージョンもブログに記載した通り、bone-debian-8.5-machinekit-armhf-2016-06-19-4gbです。
Machinekitoのバージョンは「Help」→「About AXIS」から参照できる
「Machinekit AXIS version 0.1」で良いのでしょうか?

インストールしたイメージはこれです↓
https://rcn-ee.com/rootfs/bb.org/testing/2016-06-19/machinekit/bone-debian-8.5-machinekit-armhf-2016-06-19-4gb.img.xz


さらに、LinuxCNCをクリーンインストールし、管理人様が利用しているCRAMPSで試してみました。
パルス異常の頻度は大きく下がっているように感じます。
また、傾向として出力される異常パルスは必ず2パルスセットになって出力されています。
一回目は576000パルス目まで異常が見られませんでした。
二回目は960000パルス目まで異常が見られませんでした。
三回目は512000パルス目まで以上が見られませんでした。
※測定方法はGコードです。

パルス異常の出現頻度は感覚的にBeBoPr-Bridge > Xylotex > CRAMPSのように感じられます。
出現頻度はランダムの様です。

この結果から、ソフトウェア的な要因が考えられます。


それと 今、思い出したのですが、私の使っているBBBはElement14製の様です。
秋月電子で購入したのですが、どうやら製造メーカーが変わった?ようです。
可能性としては低いのですが、製造メーカーが変わったことによる設変の影響もあるかもしれませんね。

購入したBBBはこちらになります。
http://akizukidenshi.com/catalog/g/gM-09914/



ソフトとハードの両方の可能性があるものの、以上の結果よりソフトウェアのバージョンの違いによる影響が大きいかもしれません。

厚かましいお願いで恐縮しておりますが、もしよろしければ、管理人様のインストールしているOSイメージをいただけませんでしょうか?

取り急ぎ、、。

細かい事はさておいて、余分なパルスが出るのが異常だ、とされているので、アレですが、ソフトウエアでもハードウエアでも自然数値をデジタルの中に落とし込んでいる以上、私は誤差がでて当たり前で、異常でもなんでもないと思っております。


実際の所、オープンソースで公開されているソフトウエアNCコントローラーを自作パルスカウンタで見てみたところ、合わない数値が出てきたことも有りました。
ですが、これはそのコントローラーの計算の仕方、であって、、、、と私は思います。




それを踏まえて。

PSoC5LPを使用して作った液晶パネル表示のパルスカウンタ
http://woodcnc300.blog.fc2.com/blog-entry-905.html
を使い試した所、余分なパルスは一切出ませんでした。

後に動画を上げたいと思います。

インストールしてあるイメージは
http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
のページのBBW/BBB (All Revs) Machinekit
microSD/Standalone: (machinekit) Classic

の方の4月頃ダウンロードしたものです。

多分コード自体は何ら変わりないと思われます。

誤差が2パルスとゆうことですが、もしかしたら、、、なのですが、作成されたパルスカウンタのカウントするエッジ(立ち上がり、立ち下がり)と、BBBが出力するパルスの極性が違うのでは??と。

あと、パルスカウンタの入力部分、プルアップなりプルダウンなりで、High,Lowどちらかに引っ張って有りますか?使用したロジックICのスレッショルド電圧は??BBBからの出力パルス、オシロなりなんなりで確認しましたか?

公開されている情報で気になる事はこんな感じです。


私の自作物、自分の自作物ゆえ絶対に正確だとは思ってません。
ですので、ブログ上での公開が「できる、よ?」程度なのです。

今回のBBBのLinuxCNC/Machinekitの件ですが、BBBでのソフトウエアの作動、私がLinuxCNCを動かしているPCよりもスレッドのジッタが多いのでもしかしたら、1パルス程度多く出ててもおかしくないのかな?とは思ってました、が。。



検証ありがとうございます。

検証して頂いてありがとうございます。

同じソフトとハードを使って私だけにエラーが出るということは、カウンターに問題がありそうですね。
Lunuxcncの中身が分からないので誤差が出るのが正常なのか異常なのか判断できませんが、管理人様と同じものを使っている以上、同じようなデータにならないと、おかしいのでは?と考えています。

もう一度カウンターを確認してみました。
プルアップはテスターで確認し、とスレッショルド電圧はマニュアルをもう一度確認しましたが問題ありあせんでした。BBBのパルスもオシロで確認済みです。

>>、BBBが出力するパルスの極性が違うのでは??
とのことですが、BBBのパルスは立ち上がりと立下がりがワンセットで出力されていると思うのですが、パルスの極性が違うとカウントする数字にも影響するのでしょうか?

プログラムを書くときに、この点が疑問だったのですが、適当に立下がりをトリガーにしてカウントしてみました。
ご指摘があったので立ち上がりをトリガーに変更してみましたが、パルスに関しては変化がありませんでした。

何かロジック的な理由があるのでしょうか?



最後に・・・
ここまでの経緯から、マイコン側のプログラムに問題がありそうです。
これ以上は文字ではどうしても伝わらないと思いますので自力で何とかしてみようと思います。

管理人様の環境では誤パルスが出力されていないということが判明しただけでも大変貴重な判断材料になります。

この度は丁寧に対応して頂きありがとうございました。

Re: 検証ありがとうございます。

> 同じソフトとハードを使って私だけにエラーが出るということは、カウンターに問題がありそうですね。
> Lunuxcncの中身が分からないので誤差が出るのが正常なのか異常なのか判断できませんが、管理人様と同じものを使っている以上、同じようなデータにならないと、おかしいのでは?と考えています。

私が作ったカウンタがアレかもしれませんので、結果が違ってもおかしくは無いと思います。


> もう一度カウンターを確認してみました。
> プルアップはテスターで確認し、とスレッショルド電圧はマニュアルをもう一度確認しましたが問題ありあせんでした。BBBのパルスもオシロで確認済みです。

マニュアルを見て、ではなく、データシートを読み実測で確認したほうが良いと思われます。


> >>、BBBが出力するパルスの極性が違うのでは??
> とのことですが、BBBのパルスは立ち上がりと立下がりがワンセットで出力されていると思うのですが、パルスの極性が違うとカウントする数字にも影響するのでしょうか?

理屈では問題無いと思いますが、問題が起きた時に原因特定をしようとした時に余計な検査をせぬように予め揃えておいたほうが、、とゆう程度です。BBB側の実装の仕方が解らないのであれば尚更です。


> ここまでの経緯から、マイコン側のプログラムに問題がありそうです。
> これ以上は文字ではどうしても伝わらないと思いますので自力で何とかしてみようと思います。

コメントをして頂いたこの記事のパルスカウンタはMCUを使用せず、CPLDを使用し、ロジック回路でパルスを拾ってます。

実はこの記事以前に、記事にしてないのですがAVRを使用しパルスカウンタを作ろうとしましたが上手くいかず、今でもパルスカウントにMCUを使う場合、ハードウエアで外部入力のUP/DOWNカウンタの付いているSTM32か、プログラマブルロジックデバイス載ったMCU,PSoC5LPにて、ハードウエアUP/Downカウンタを作り、計数してます。

マイコン自体で計数出来ぬことはないとは思いますが、C言語でのマイコンのプログラムはこのようなカチカチと確実に動いてもらわないと困るような物の作成に関して、実際に命令が実行されるサイクルを確認したりなんなりで、シロートに近い私のような者には非常に手間で難しいです。


あまり手間も掛けていられないのと、上記のクロックの極性等々、不確実性に繋がることを排除してくと、私の場合こうなりました。

確実にカチカチ動くような物を作りたい場合、FPGAやCPLDに比べロジック部分の遅延が多少大きいですが、比較的速めなCortexM3なMCUで、PLDが載っているPSoC5LPは非常に便利です。
IDE自体もPLD部分が有るのでデバイスメーカー提供の物があり、サンプル記述が豊富で、I/Oバンク毎に電源電圧を設定(規制のボードでは難しいかもしれませんが)できるので、ホビーNC系の3.3V5V混在な信号でも扱えます。


>
> 管理人様の環境では誤パルスが出力されていないということが判明しただけでも大変貴重な判断材料になります。
>
> この度は丁寧に対応して頂きありがとうございました。


いえいえ。こちらこそ。


ただ、ブログのタイトルに「BeagleBoneBlackのLinuxCNCから誤パルスを検出!!」と記載されますと、記事タイトルだけで判断されて、BBBアウト、LinuxCNCアウト、、とする方が出てきてもおかしくはないと思います。
Web上、公の場で、どんな人が読んでいるか、は、記事を書く側からは選べませんので。

折角、日本国内でのLinuxCNC普及の為?にご厚意でWeb上にマニュアルの翻訳等々をUPされている方々や、他BBBでMachinekitの記事を上げられてる方々の、、と。。


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

あきらひとし。

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

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

メールフォーム

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

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