実装機フロントトレイ制作中です

TM2x0には、大きい部品を置くためのフロントトレイがあります。16mm角のくぼみが10個、18mmピッチでおいてあって、左上に寄せて部品を置いてピックするように使うことを想定しているようです。

しかしながら、左上に寄せて部品を置いても本体の振動で動いてしまうし、なんとなく手動で左上に寄せているのでちょっとのミスで位置精度ががた落ちします。カメラがない、元々置いてある位置がそのまま設置位置精度になるこの機械ではこれは致命的です。

ということで、その代替になるトレイを今制作中です。土台から交換してしまって、部品を置いたトレイを上に載せる形を想定しています。部品を置いたトレイごと交換できれば、部品サイズに合わせたトレイを用意しておくだけですぐにフロントトレイの部品一式を交換することが出来て効率も精度もあげられるはずです。

現状はIllustratorでざっくり外形と切削外形を作って、Cut2Dで切削パスを生成したところで、部材を発注したところです。さすがに20mm厚の樹脂板はうちの在庫にはありませんでした。

Cut2D preview

一応いくつか作るつもりでいます。Cut2Dから出力した切削パス(Mach2/3用のGコードです)も、実際に切削出来ることが確認出来たら公開の予定です。

 

LPC1114でSWDが使えなくなったら

NYA-05は制御にLPC1114を(贅沢に)使っています。目下ファームウェアを開発中なのですが、うっかりしたことでSWDが使えなくなる事象に遭遇しましたのでメモしておきます。

環境

LPCXpresso5、OSX10.7.5、LPCXpressoを半分に切ったLPCLinkを使用してSWDにて書き込み&デバグ。CMSIS使用。

現象

SWDのクロック線に使っているポート(SWCLK/PIO0_10/ SCK0/ CT16B0_MAT2)をプログラム先頭にて下記コードでGPIOとして動作するようにしたところ、LPCLinkからターゲットが見えなくなりました。

LPC_IOCON->SWCLK_PIO0_10 = 0b11010001; // PIO0_10

さらに、なんとかしようとISPモードにしてみましたがやはりターゲットは見つからないまま。うっかりどこかのピンを短絡して焼いてしまったのかと思ったのですが、実はそうではありませんでした。

原因

「LPCLinkがSWDコネクションを確立する前にユーザコードでSWDを無効にしてしまうと、SWDコネクションが確立できなくなってしまう」ということが原因でした。当然コネクションが確立できないとターゲットが見えなくなってしまいます。こちらのドキュメント(UM10398)のP410、Fig.90にブートシーケンスがありますが、確かにブートシーケンス中にSWDの記載はありません。

また、ISPモード動作中はSWDは動作しないため、ISPモードで起動してもSWDコネクションは確立出来ません。

こちらでは確認していませんが、問題解決のためにググった限りではJTAGのピンもSWD同様ユーザコードで使えなくすると認識されなくなってしまうようです。

対策

一度SWDを殺すユーザコードを書いてしまうと、UARTやUSB、CAN経由のISPを使わないとSWDを復活させることが出来ません。今回のケースではUART経由のISPを起動して、FlashMagicを使って修正後のファームウェアを書き込み事なきを得ました。ISPはユーザコードでどのように設定していてもCRP(Code Red Protection)で殺していないかぎりは使うことが出来ますので、SWDがいくら便利でもISP書き込みができる環境は別に用意しておくと良いでしょう。

根本的には、SWDでデバグしたいターゲットであればSWDのポートはSWD以外に使わないのが一番いいように思います。SWDを書き込みにしか使わないのであれば、起動時に数秒のウェイトを入れるとそのウェイトの間にLPCLinkがターゲットを掴むので書き込みだけ可能、という形にもできるようですが今の所未検証です。ただ、LPC8xxのようなピン数の少ないデバイスを使うときにはウェイトを入れるようなテクニックは大切になってくるかもしれません。

教訓としては、ひとまず基板を起こすときはUARTのピンは出しておく、PIO0_0(RESET)、PIO0_1(ISP)は必ずあけておいてタクトスイッチをつけられるようにしておく、SWCLKとSWDIOは使わないでおく、という感じでしょうか。

色々検証いただいた@tedd_okano氏、@ytsuboi氏に感謝、です!

実装機位置決め精度

引き続き誰が得するのかわからないメモ。

TM220Aは光学式位置補正がありません。そのため、購入前にもどの程度の精度でパーツを配置できるのかは気になる点の1つでした。ということで、どの程度の位置精度が出るのか試してみました。参考になる人は僅かだと思いますが、使用したデータをお見せします。1番のフィーダに1608のパーツが入っていれば試すことが出来ます。読み方、書き方はswitch-scienceのwikiのこのページに書いてあります。

[wpdm_file id=2]

で、これを動かすとこんな感じに配置されました。例によって動作速度は50%で動かしています。

TM220A 位置決め精度

一部、0.2mmほどずれているように見えるのもあって気になるものもありますね。この辺りはリール側の隙間の都合などもありますし、ノウハウの蓄積が重要になってくる部分でしょう。ひとまず1608より大きな部品ならさほど問題なく配置できそうな気がします。

次はQFN/QFP部品の配置、でしょうか。引き続きテストしていきます。

後日追記:

気になって、とりあえず重ねてみました。こんな感じです。参考まで。

tm220a-accuracy

さらに後日追記:

1005も載せてみました。どうもこれを見る限り、設置位置がぶれる理由のうち、リールのポケットと部品の間の遊びに起因するものが大半、のような感じがします。参考まで。

TM220A-1005