無線送り装置はarduino+CNCシールド+TWELITE無線モジュールで構成される送り制御器と、これをTWELITEのzigbee無線経由で操作する操作器で構成します。送り制御器のハードはケースのパネル穴あけを残して完成したのでこれを動かすTWELITEのソフトを書いて動作を確認しました。モーターの制御はすべてarduino上で動作するGRBLがやってくれるので、TWELITEのソフトがするのはarduino上の二つのMCU(16U2と328P)のUARTの間の通信をリレーすると同時に、無線経由で操作器から送られてきたコマンドを328Pに投げることと、DROのデータを取込んで操作器に無線経由で転送することです。UARTのリレーとDROの取込は直ぐに完成しました。操作器との通信関連のソフトを書くには、先にユザーインターフェースを含めた操作器の仕様を決めなければなりません。そこでこのような装置にはどのようなものがあるのかを調べて見ました。
amazonやaliexpressでMPG (manual pulse generator)で検索すると色々な製品が出てきます。これらは概ね2つに分類されるようです。まずは産業機械などプロ向けの装置があって日本では
東京測定機材株式会社などが製造しています。これにはロータリーエンコーダーとXYZ切り替えスイッチ、および倍率x1,x10,x100切り替えスイッチ、他に緊急停止などの少数のスイッチが付いてます。スイッチの接点がそのままケーブルを経由して接続先の機械に繋がるようになっていて、通信プロトコルとかそういったものは存在しません。もう一つの種類はMACH3 CNCソフトを想定しているもので、こちらは産業用に加えてさらに多くのスイッチが付いています。スイッチやエンコーダーを操作したときの信号はUSB経由でPCに取り込まれてMACH3のマクロとして処理されます。マクロは予めユーザーが登録できるので自由度が高い。当方のゴールはPCを使わずにXYテーブルを操作することなので少々異なりますが大いに参考になる。
結局エンコーダーとDROの表示用LCDに加えて複数のスイッチを設けておくのが良いと判断。それでテーブルをどうやって動かすのかというと、UGS (Universal G-Code Sender)にあるジョグコントローラーという機能と同じことをすれば良い。UGSの画面に表示された矢印ボタンをクリックするとそちらの向きにテーブルが移動しますが、このときUGSはGRBLコマンドやGコードなどをarduinoに送りつけます。同じコマンド類を操作器で作ってそれをarduinoの328Pに送り込めば上がりです。
操作器のハードでは表示器をどうするかが考えどころ。色々と検討した結果、3.5 TFT LCD shieldなどという名称で販売されている物を使うことにしました。320x480でタッチパネルも付いているので何かと便利そう。amazonやaliexpressで「3.5 tft lcd arduino」で検索すると同じようなものが沢山出てきます。この中で一番安価だったaliexpressの物を購入。送料込みで1500円です。10日ほどで到着しましたがガラスにクラックが入っている。輸送中に割れたようです。販売業者にコンタクトして写真を見せたところ返金してくれるということでした。破損状態で物が届いたのは初めてですが業者の対応はすこぶる良かった。このやり取りにも3日程度掛ったので、その間にamazonで同等の製品を発注しました。こちらは送料込みで1600円。aliexpressでもamzonでも、結局は中国から直送されてくるので大した違いはありません。
arduinoにそのまま繋げるという簡便さがウリの一つのようですが、私が繋ぐのはTWELITEなのでケースなどを決める前にTWELITEとの接続動作確認をしなければなりません。セオリーとしては最初にarduinoに接続して動作するとされているソフトを動かしてハードの確認をした後にTWELITEに繋ぐべきですがarduinoの余剰がない。そこでarduinoをaliexpressに注文しました。これも入荷に10日ほど掛かるので、まずはブレッドボードにTWELITEを載せて、ガラスの割れたLCDと接続して試して見ることに。このLCDはarduinoから5Vをもらって動作するように設計されていて、ボード上のレギュレーターで3.3Vにして全体を動かしています。TWELITEは3.3V動作とするので基板上の3.3Vラインに直接外部3.3V電源を接続できるようにジャンパーを飛ばします。基板のシルクには3.3Vと印刷されていますが、実際にはこのピンはどこにも接続されていません。

LCDの動作を確認するにはソフトを用意しなければなりません。調べた結果
LCDwikiというwebは包括的に資料を置いていて、ここのProgram Downloadにある3.5inch_Arduino_8BIT_Module_ILI9486_MAR3501_V1.1が最も簡便に使えると判断しました。具体的にはダウンロードしたファイルを展開した、"1-Demo/Demo_Arduino/Example/Example_01_Simple_test/Simple test for UNO/_9486uno.ino"というスケッチです。このプログラムは単体で動作して他のライブラリなどを必要としません。非常に単純で正味250行程度で理解も容易です。やっていることはLCDコントローラにデータを書き込んで初期化した後、画面を赤青緑でクリアーするという単純なものですが、動作確認には十分。このプログラムをTWELITEのハード・ソフトに合うように書き換えますが、大した作業ではありません。
TWELITEにプログラムをダウンロードして走らせると... 動かない... ううむ、このような単純なものが動作しないと本当に困る。画面を見ると何もないわけではなくて砂の嵐が表示されている。接続を再確認するも問題なし。このLCDはデータ8本とリセットRST、チップセレクトCS、レジスターセレクトRS、ライトWR、リードRDの制御信号5本、計13本のラインで接続します。プログラム上RST信号は初期化時に1回だけLOW->HIGHとし、CS信号は画面クリアーの前にLOWにした後、クリアーしている間中LOWで、クリアーが終わるとHIGHにします。WR信号は1バイト書き込むごとにLOW->HIGHとし、RD信号は読み出しを行わないためHIGHのままです。信号をオシロで確認してもそのようになっていましたが、CSが0Vと0.3Vを行き来しているのに気付きました。書き込むバイトデータに依存していると推測されるため書き込みデータをオールゼロにするとCSは0Vで安定しています。そこでデータを1ビットだけ1にして調べるとLCD_D1がHIGHのときにCSが0.3Vに上昇することが分かりました。TWELITEのDIO割り当てではLCD_D1はDIO9でCSはDIO1、これらはそれぞれTWELITEの12ピンと25ピンでモジュール上で短絡するようなものではない。DIO9にHIGHを出力すると関係ないDIO1のLOWレベルが0.3Vに上昇するというのは一見不可解に思えますが、このようなことはシングルチップのMCUのトラブルではよくあることです。この現象から推測されるのはDIO9の接続先(LCD_D1)がトラブっていて、ここにHIGHを出力すると過大な電流がDIO9に流れるためにMCU内部でこの電流ラインに関連した回路や配線が影響受けて電位が変動してしまうのです。よってDIO9の接続先すなわち基板上でU3とマークされているバッファICの故障と診断されます。そこでこのICを見るとTM74HC245とマーキングされています。74HC245? 何でここでこのICを使うのだろうか。何という愚かな設計だろうと呆れるわけですが、まあそれは置いといて別のICに張り替えて動作確認をしなければ。
==>
その後の調査でCSの電位が上昇するのは内部の影響とは別問題で、実際にCSに電流が流れこんでいるためだと判明しました。
と言ってもそんな都合の良い部品がすぐにあるわけではないので、手持ちの74LCX541に載せ代えることにしました。245と違って短方向なのでそのままだと読み出しができなくなって、つまりはタッチパネルが使えなくなるわけですが、ガラスが割れていて結局は使わないので良しとします。ICを張り替えて電源を入れると画面クリアーが無事動作しました。これでこのLCDを使うということで操作器の設計を進められます。加えてスイッチを選んでaliexpressで発注しました。スイッチを入手したらケースの設計に入れます。
ところで私が入手したLCDシールドなる製品の設計がなぜ愚かなのかというと、74HC245にはボード上のレギュレータから3.3Vを供給していますが、arduinoは5V動作であるためHC245の入力には5V程度の信号が入力されます。このような使い方をしてラッチアップが起こると過大な電流が流れて故障に至ります。5V動作のarduinoと繋ぐ「シールド」と銘打っているのであるならば74LCX245を使わなければならない。arduinoと繋ぐと故障するarudino向けの設計は愚かで、現に当方の製品は最初から故障でした。amazonで購入した物がどうなのか楽しみです。
Posted at 2021/10/31 02:35:01 | |
トラックバック(0) |
機械工作 | その他