スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

HandWheelManualPulseGeneratorをLinuxCNCに入力する。

前記事 LinuxCNCのArduinoでのモーション以外のインターフェース。にて、LinuxCNCのPythonによるユーザーコンポーネントを使用したLinuxCNCへのデータ入力を試してみたわけですが、ソースコードが公開されていることも有り、今海外通販でわりとと安価に入手出来るHand WheelManualPulseGeneratorの出力信号をLinuxCNCのHALに入力、PyVCPを使用し表示してみました。



動画上右側がパルスカウント値、左側は接続に使用したPSoC5LP内での数値をただ、+1してるものを確認のために表示させてます。

前記事内のリンクに有るPythonで書かれたLinuxCNCのユーザーコンポーネント、HALファイル、PyVCP用のXMLファイルの内容を書き換えただけです。
ADC入力部分に渡す数値を、PSoC5LPのUDBで生成されたQuadDecoderのカウント数値に置き換え、他の余分な入出力部分を削除しました。

Linux側、マイコン側のUARTでの送受信のフォーマットさえ守れば、Arduinoを使おうが、PSoCを使おうが、大体の数値入力は可能だと思われます。

ArduinoではなくPSoC5LPを使用したのは、ペリフェラルに小規模のPLDを使うことができ、エンコーダー入力のカウントをハードウエアで行うことができるから。
数十Mhzレベルのクロックで作動するハードウエアカウンタなので、作動クロック以下の周波数でのカウントの取りこぼしがありません。

他MCU、私が触ってるSTM32シリーズのタイマ/カウンタにも、QuadEncoderの読取り用の仕組みが付いているので、同じ作動をさせることは可能だと思います。

今回はBeagleboneBlack/Greenでの作動はしてません。最初、PSoC5LPに付いているUSBに直接接続できるUSB_UARTを使用しようと思いましたが、私のWindowsの環境化で上手くドライバをインストールすることが出来ず、こりゃ、Linuxでも、、、と思い秋月で売ってるFTDIのFT232のモジュールを使用。BeagleboneBlackにてテストしようと思ったのですがこれもまた、上手くドライバをインストールすることが出来ず、、、Orz,,,.
結局LinuxCNCがインストールされているPCにての作動となりました。
手持ちのUSB UARTなデバイスがFTDIのモノしか無かったために、BeagleboneBlack/Greenでの作動は試すことができませんでした。
BeagleboneBlack/Greenも、ArduinoIDEをインストールしておけば、ArduinoIDEのパッケージ内にFTDIのUSBドライバ等入ってるかも?とは思います。入ってませんでした。。
中華Arduinoクローンに使われているCH340とゆうUSB UARTは、特にドライバ、ArduinoIDEをインストールせずとも認識、使用ができたので、今の所憶測でしかありませんが、CH340を使えばBeagleboneBlack/Greenでの作動も出来ると思われます。




自作NCや、市販のNCフレームの使用時の精度確保、基本的には各軸を動かすモーターがきちんと設定されたステップを刻む事と機械自体のガタやバックラッシュを押さえる事、フレームの剛性によってモーションの正確さを担保するものだと思うのですが、NCは数値制御コントローラーなので、LinuxCNCやMach3にはバックラッシの補正も有りますが、送りネジの補償も可能です。

参考URL
Mach3 Z Axis Screw Mapping, version 1.2 (PDF)
Screw compensation files, axes and joints.(LinuxCNCフォーラムより)
Screw Compensation


もちろん、作動速度によるモーションプランの有効誤差云々等々、正確なモーションに関しては「どこまで?」とゆう疑問もありますが、そもそもの基準となる計測ができていないと、その誤差がモーションによるものなのか、フレームの特性に依るものなのか、はたまた刃物のたわみによるものなのかの区別もつきません。

今回接続したエンコーダーは、単なるハンドパルスジェネレーターですが、コレを精度が高いリニアエンコーダー、リニアスケールとすると、補正値の計測が可能で、駆動モーター用のパルス列司令に対する移動量を測ることが出来ます。

また、モーションに掛かることなので、今回のUSBUARTのデータ入力ではアレですが、LinuxCNCの場合、モーションループを1ms単位で、NCコントローラーがフィードバックループ出来るので、MesaのPCI、PCIeでのFPGAカード等をとリニアスケールを利用すれば、位置フィードバックもできぬことでは無いと思います。


把握しきれない程の機能と自由度が有るLinuCNC、私も機能の極一部しか使ってませんが、単に安価に導入できるソフトウエアNCコントローラー、、、、、ってだけではないのです。


私はハードウエアもソフトウエアも不得手で、さっぱりなのでこの程度ですが、双方出来る人が触ると、相当凄いんだろうなぁ、と思ってます。機械、電気、ソフトウエアハードウエア、、、相当な分野横断が必要になりますが、高機能なこのようなソフトが公開されているとゆうことで、、、また、Web上へのフィードバックもあれば、尚の事、、と思います。




追記

BeagleboneGreenのボード上に有るUART器を使い(USB-UART変換を介さず)、この記事内のPSoCを繋ぎ軽くテストをした所、データ転送が出来てるご様子。Beagleboneでも、PySerialを使ったUARTでのデータ入出力は可能です。




スポンサーサイト

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

中華NanoとCMOSカメラOV7670(FIFO無し)と小型液晶パネルST7735Rで、、ライブカメラ。



ebayやAliで安価に手に入る、ArduinoNanoクローンと、CMOSカメラのOV7670(FIFO無し)、そして、小型TFT液晶パネルののST7735Rを使ってのライブカメラを作りました。

実は元ネタが有り、この動画を見て、この動画のコメント欄のソースコードを利用させていただきました。


ソースコードはGithub上に有り、ソース内に有る回路図通りの配線をしました。

結構なフレームレート(動画では10fpsと、、)での液晶画面へ表示されています。

ソースコードの使い方は元動画コメント欄のリンク先のGithubに行くと表示されるReadmeに書いてあります。


カメラ自体の最大速度は30fpsのようで、更に最大解像度は640x480ですが、液晶パネル自体の解像度が160x128となっており、カメラからの取り込み解像度もソレに合わせて160x120となっているご様子。
更に、ATmegaの作動速度もネックとなり10fpsとなってます。

ただ、この描画速度、割とパラパラとした画像ではなく、ちゃんと動画として見れるので、用途によっては実用だと思います。
このOV7670(FIFO無し)のモジュールとして販売されているもの、M12とゆう規格(Sマウント?)のレンズが付いている物が大半なので、防犯カメラ用の広角レンズ等々も使えるようです。

私個人としては、レーザー加工時に直接レーザーの光を見ないでレーザーが射出されているのを確認する用途として、、。
もちろん、カメラのレンズの前に、光の強さを調整するようなフィルタを取り付けなければなりませんが、視力を失う事を考えれば、カメラ代替が効きますから、、。。


ちなみに、作例どおり作っても上記の通り動きますが、カメラのOV7670からのデータ線とタイミング用のクロック線は3.3V出力のため、5V駆動のATMegaの入力Highのスレッシュホールド(High入力とする電圧の下限値)電圧との差が少ないので、5Vロジックでの入力時よりも誤動作する確率が高いです。
また、カメラ設定用のI2C互換のSCCB(Serial Camera Control Bus)とゆうインタフェースも、一応Nanoからの送信Onlyなようなのでアレですが、相互通信用のレベルシフタ(信号線2本なので、N-chFETを使っても)でレベル変換しておくと良いでしょう。
ですので、余裕をもたせた安定的な作動を、、となると、3.3V→5Vのレベル変換ICを噛まして置いたほうが安心です。

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

久々にGRBLを。。

少し思う所があり、久々にGRBLを触ってみました。

GRBLを入れたのは最近数百円程度で、購入できる中華ArduinoNano互換の小さな基板。
もう、ATMega328とUSBシリアルICを購入してユニバーサル基板で組むことすら、、ってくらいの価格で今、ebayやAliで出回っています。
この基板にGRBLのファームウエアをインストールするのですが、多分、他サイト、ブログでも記事となっていると思いますが、、、


Flashing Grbl to an Arduino
上記リンクページに各種環境からの書き込み方法が記載されてます。

今回私はWin環境から作業を行いました。
上記ページ内リンクにてXLoderをダウンロード、解凍。

https://github.com/grbl/grblにて、ファームウエア(現在のMasterBranchはGrbl v0.9j Atmega328p 16mhz 115200baud with generic defaults (2016-03-17))をダウンロード。ソースコードから、ATMega328用にコンパイルして、生成されたバイナリファイルで、HEXファイルです。

XLoderを起動し、ダウンロードしたHEXファイルを指定し、デバイスはDuemilanove/Nano(ATmega328)を指定。中華NanoのUSBCOMポート番号を指定しUploadボタンを押すだけです。
ボーレートはテキトウに。。


とりあえず作動確認が出来ればOKなので、Universal-G-Code-Senderのページを開き、1.0.9をダウンロード。
ダウンロードされたファイルを解凍して開き、Javaで書かれているようなので、.UniversalGcodeSender.jarのファイルをダブルクリックで起動。

中華Nanoを繋ぎ、USB seialのCOMポートを指定し、ボーレート(Baud:)115200に指定しOpenボタンを押すとPCとのシリアル通信が始まります。

かなり前に触ったときに比べて、GRBLもUniversalGcodeSenderも安定している印象。

さてさて、今回GRBLを触ってみているのは、最近秋月電子で取扱の始まった東芝製フォトカプラTLP2361を使ってステッピングモーターへの司令用の信号、Step/Dir EnableをGRBLがインストールされたNano基板と絶縁したかったから。

USB接続なGRBLがインストールされたNano基板、電気的にPCと繋がっています。
今回使用したフォトカプラTLP2361、リンクした商品ページを見れば解ると思いますが最大データ転送速度15MBdとなっており、フォトカプラの類では結構高速。高速タイプでよく使われる6N137と同程度のデータ転送速度で、データ自体の遅延も、同程度。

入力LED側のアノードにGrblをインストールしたNanoの出力を1kΩの抵抗を介してつなぎカソードはNano側のGND。別電源を用意して、出力側に5VとGNDを。コレで出力側出力ピンにて、絶縁された出力がロジック反転で出てきます。
反転したロジックは、Grbl側の設定で、InvertMaskとゆうのがあったので、ここのbitを立てて設定し反転すると、元々出力される理論値と同じとなるはずです。

上記5V1kΩの入力で、ほぼ、データシート記載の標準値、H/Lの遅延50ns、L/Hの遅延40nsをオシロスコープにて確認出来ました。

このフォトカプラ、オープンコレクタ、オープンドレイン出力と違い、インバートロジック出力なので、出力側に電源と、電源にパスコン(セラミックの0.1μF程度)を取り付けるだけで、絶対最大定格10mA迄(実際の使用は半分程度?)取り出すことが出来るので、ロジック入力な、モータードライバ等々、USBの電源電圧以上の物をUSB接続された機器にぶら下げるときに、USBポート、PCの安全確保の為に使うのにとても便利です。秋月電子などで取り扱って頂けるのはホントに有り難いです。

あと、この手の物でUSB接続な物で気になっていた所なのですが、PCから電源を取っている、とゆうことは、PCからモーター迄グランドが繋がるって所。
電気の回路として、+から-への電流のループ(カレントループ)はノイズ等々の視点から見ても、短い方が良いので、電流のループを一旦Grbl迄として、フォトカプラにて絶縁、信号のみの転送として、モータードライバ以降は別の電流ループとしたいと。。

もちろん、モータードライバをコネコネ触っていると解るのですが、モーター自体コイルなので、モーターに急峻な動きをさせるときに、電源電流と逆向きに、電流を流そうとする、逆起電力によるサージのように見えるモーターから電源に戻る回路に載る電圧の立ち上がり等々、モータードライバIC自体にモータードライバICに掛けている電圧以上の電圧が電源に戻っている事もしばしば。

このブログで主に取り上げているステッピングモーター自体、構造としてモーターとしての効率が悪い部類でなので、逆起電力で発生するサージのようなものの電圧自体は、効率の良いDCブラシモーター、ブラシレスモーターのソレに較べて低いと思いますが、それでも、モーター電源電圧以上となりうる場合が有るので、用心に越したことは無いと思うのです。

モータードライバやマイコン、その他電子部品。安価に入手できて、Web上に作例が沢山ありますが、動けば良いと、過電流保護や電源の逆接続等々の安全装置部分を端折った作例が多いのもまた事実で、何が足りてて何が足りてないかを見極めることができるだけの力が必要なのかも。
今回作ってみた物、どう考えても中華Nano基板よりも、数個のフォトカプラの方が入手した価格は上な訳で、アレなのですが、安定作動を保証する産業用の電子回路等々は沢山の試験と安全に振った回路の為に、あのお値段になるのだなぁ、と。

もちろん、コレは回路図のみならず、公開されているMCU等のソースコードとかも、時と場合によりけりで、???となる物もあります。

何事も見極める目を養うのは大事ですね。。


ところでGrbl、Reprapとかのファームウエアと違い、SDカードやMMCカードからあGコードを読み込み、Gコードをモーションに、、とゆう、スタンドアロン的な使い方が出来ません、が、Grbl自体、PC上に有るGコードのファイルの文字をアスキーコードでUSB UARTに載せて送信しているだけ(フロー制御はしてると思いますが)なので、別マイコンにて、SD/MMCカード内に置いたファイルを読取り、随時UARTにフロー制御しながら送信する物を作れば、PCレスでの作動も可能になると思います。



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

フォトカプラ。&追記。





速くてお値打ち?
GRBLとかも安価にIsolate出来そう。

追記



私はLattice使ってないのですが、安価ですね。。

も一つ追記。




パスコンは?


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

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




以前から触っている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を使用して書き込んでいます。

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

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

あきらひとし。

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

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

メールフォーム

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

リンク
最新記事
カテゴリ
スポンサードリンク
スポンサードリンク 
スポンサードリンク
オンラインカウンター
現在の閲覧者数:
検索フォーム
RSSリンクの表示
最新トラックバック
最新コメント
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。