レビュー:安いエンコーダ付きギヤードモータ (DG01D-E)

スイッチサイエンスで購入

スイッチサイエンスで売ってるエンコーダ付きギヤードモータを試しに買ってみた。エンコーダ付きのモータが833円は超安い!

外観

よく見かける黄色いギアードモータの上位版みたいな感じ。パッと見の違いは (1)エンコーダ付き (2)出力が片軸 (3)出力軸がメタル (4)青い。

f:id:licheng:20200914144047j:plain:w400
f:id:licheng:20200914144106j:plain:w200 f:id:licheng:20200914144116j:plain:w200

ホイールは付属しない。黄色いギアードモータ用のホイールがやや固いながら装着できる。これと互換のホイールが単品で購入できたらいいのだが。

コネクタとピンアサイ

ケーブルは付属するが、JSTのPHコネクタなので自作も容易。なお、付属のケーブルは反対側はバラのジャンパ(オス)になっている。カラーコードのケーブルを使っておきながらピン番号と色が逆順なので要注意。

f:id:licheng:20200914144131j:plain:w400

エンコーダの動作確認

エンコーダは十分使えそう。雑なデータシートしかなくて、1回転あたりのパルス数がどこにも書いてないのだが、実測では出力軸1回転あたり135パルス。(A相B相の両エッジを取ると1回転で540カウント)

なお、実験にはArduinoを用い下記の記事を参考にした。

分解してみる

データシートには減速比は48と書いてあるのだけど、それだと出力軸1回転あたりパルス数は48の整数倍になるはず。計算が合わない。分解してギアの歯数を数えてみたところ、減速比は45だった。このデータシートはなんも信じられん。まさかロットによって違うなんてことないよね?

なお、ギアボックスのケースはネジ止めだが、エンコーダ部分のケースは接着剤で貼り合わせてあるので、分解はおすすめできない。

f:id:licheng:20200914144223j:plain:w400

ちなみにギアの歯数を数える時は写真を撮って必要なら見やすいようにコントラスト等を調整し、印をつけながら数えるのが便利。

f:id:licheng:20200914144337j:plain:w200

減速比の計算

ギア 歯数
ピニオン 8
一段目ダブルギア 24 / 9
二段目ダブルギア 36 / 16
三段目ダブルギア 28 / 14
ファイナルギア 30

減速比 = 24/8 × 36/9 × 28/16 × 30/14 = 45

エンコーダの磁石は極対数3で、ホールセンサからはモータ1回転あたり3パルスが出る。ギアボックスの減速比が45、したがって出力軸1回転あたり135パルスで実測値と一致した。

f:id:licheng:20200914144145j:plain:w400

モータの定格

モータの動作電圧はデータシートには3~9 Vと記載されているが、前述の通りこのデータシートは信用できない。とはいえ、モータには型番などは表記されておらず、定格を知るすべは無い。外形はマブチのFA-130両軸タイプと同形だが、たぶん別物だろう。5Vでの駆動では異常な発熱やにおいは感じられなかった。

まとめ

やや仕様不明なシロモノではあるが、国内の信用できるお店で購入できるエンコーダ付きモータとしてはすごく安い。DCモータはエンコーダが付くとぐんとできることの幅が広がるものの、高価だったり取付けが手軽でなかったりしてハードルが高いイメージがある。こういう安い製品が安定供給されたら入門用にちょうど良いのではないかと思う。

8月のまとめ

進捗

  • ICS/PWMサーボアダプタの開発
  • 技術書典9(オンライン)の原稿執筆
  • DigiCarの回路設計

動画


発表資料

所感

今月は猛暑でなかなか外に出歩けなかったこともあり、作業は捗った。

DXF形式の基板外形データをEagleに取り込む

我流のメモです。

やりたいこと

Fusion360等のCADから出力した基板外形のDXF形式データをEagleにインポートする。

準備

下記のULPスクリプト import-dxf.ulp を適当な場所に保存する。
(Windowsであれば ドキュメント/Eagle/ulps/ など)

github.com

手順

EagleのBoardのウィンドウで [File] → [Run ULP] を選択し (またはツールバーでULPのアイコンをクリックし)、 上記の import-dxf.ulp を実行する。

f:id:licheng:20200830165627p:plain

  • File name:DXFファイルを指定
  • X Origin, Y Origin:原点位置をオフセットしたいならmm単位で指定
  • Line Width:線の太さは「0」としておく
  • Import to layer:基板外形なので「20 - Dimension」を指定
  • Prefer poligon output:チェックを外す
  • Input Unit:入力単位は「Metric (mm)」を選択

上記のように設定して「OK」で実行する。
するとDXFファイルのデータがBoardに取り込まれる。

f:id:licheng:20200830173346p:plain:w700

問題点

上記の手順だけでは以下の問題点がある

  1. 基板外形以外の線も「20 - Dimension」のレイヤー上の線となっている。
  2. ドリル穴がだたの円になっている。
  3. 円弧が再現されず直線になっている。

修正

(1) 線のレイヤー移動

Change(スパナのアイコン)で「Layer」を選択し、移動先のレイヤーを指定する。例えば表面シルクにするなら「21 - tPlace」、表面コメントにするなら「51 - tDocu」を指定する。そして線を選んでいくと選んだ線のレイヤーが移動する。

複数の線のレイヤーを移動するならば、Group(点線の四角のアイコン)で範囲選択し、Changeでレイヤーの移動先を指定し、選択範囲で右クリックして「Change: Group」を選択する。(なぜかChangeを先にするとうまくいかない?)

注意点として、シルクにする場合は線の太さはゼロではだめなので、Changeで「Width」を適当に指定して線の太さを変更しておく。

(2) 円をドリル穴に変更

うまい方法が見つからない。いちおう下記の手順で実現できる。

  1. Info(丸に i のアイコン)で円を選択すると、その円のPosition(座標)とRadius(半径)が確認できる。
  2. Hole(四角に黒丸のアイコン)で円と同じ直径(半径の倍)を指定し、適当な場所にドリル穴を作る。
  3. Infoでドリル穴を選択し、円と同じPosition(座標)を指定する。
  4. すると円とドリル穴がぴったり重なる。
  5. Delete(ゴミ箱のアイコン)で円を選択(ドリル穴が選択されたら右クリックすると円が選択される)し、削除する。
(3) 直線を円弧の変更

Info(丸に i のアイコン)で直線を選択し、Curve(曲がり方)を指定する。Curveの単位は度(°)であり、-360~+360の範囲で指定する。例えば、90°の円弧であれば「90」、180°の円弧であれば「180」と指定する。

f:id:licheng:20200831103020p:plain:w320  f:id:licheng:20200831103032p:plain:w320

Fusion360から基板外形をDXF形式で出力

我流のメモです。

やりたいこと

Fusion360の3Dデータから基板外形を2Dデータに落として基板CADで読み込みたい。
※ Eagleなら上手く連携する方法があるのかもしれないが、そっちは今回は未調査。

やりかたの要旨

基板外形のボディ(立体)をプロジェクト(投影)したスケッチ(平面図)をDXF形式で保存する。

やりかたの詳細

Fusion360でデザインを開く。

f:id:licheng:20200830141801j:plain:w500

わかりやすいように基板外形のみ表示して上から見る。

f:id:licheng:20200830142030j:plain:w500

右クリックして「スケッチ」→「プロジェクト」

f:id:licheng:20200830142802p:plain:w500

f:id:licheng:20200830142837p:plain:w500

「選択フィルタ」で「ボディ」を指定し、基板のボディを選択。

f:id:licheng:20200830142907p:plain:w500

基板のボディを投影したスケッチが作成されるので適当に名前をつけておく。

f:id:licheng:20200830142938j:plain:w500

ブラウザでスケッチを右クリックして「DXF形式で保存」

f:id:licheng:20200830143009p:plain:w500

データの確認

Autodesk DWG TrueViewで開いて確認する。

f:id:licheng:20200830143028j:plain:w500

USB-MIDIコントローラをArduinoにつなぐ

やりたいこと

KORG製のUSB-MIDIコントローラ nanoKONTROL2Arduinoに接続して、スライダやノブ、ボタンの値を取りたい。

f:id:licheng:20200821200427j:plain:w600

ミニUSBホストシールドの改造

ミニUSBホストシールドは困った仕様なので改造が必要。下記の記事を参考にした。

以下に要点をまとめる。

問題点

MAX3421Eは3.3V用のICなのでVccは3.3Vでなければならないが、VccとVbusが直結されているため、USBに5Vでなく3.3Vが給電されてしまう。

解決策

VccとVbusの結線をパターンカットし、RAWとVbusをジャンパで結線する。そしてRAWに5Vを給電する。すると、Vbusは5V、Vccは3.3Vとなる。5VをRAWに給電するためにUSBシリアルアダプタも少し改造した。

f:id:licheng:20200821203143j:plain:w600

ソフトウェア

USBホストおよびUSB-MIDIのライブラリは下記のものを利用した。

実験に用いたスケッチを下記に掲げる。これは上記ライブラリのサンプルスケッチ USBH_MIDI_dump を元にしている。

MIDIメッセージの内容

USB-MIDIのメッセージは4バイトの固定長であり、2バイト目以降にMIDI本来のメッセージが格納される。詳しくは下記を参照。

nanoKONTROL2のスライダやノブ、ボタンを操作すると「コントロールチェンジ」のメッセージが送られてくる。

  • 1バイト目 : 0Bh = ケーブル番号=0, コントロールチェンジ
  • 2バイト目 : B0h = コントロールチェンジ, チャンネル番号=0
  • 3バイト目 : コントロール番号
  • 4バイト目 : データ値

f:id:licheng:20200821232131p:plain

コントロール番号の割り当て

工場出荷状態のnanoKONTROL2ではコントロール番号は下記のような割り当てになっている。

  • 00h ~ 07h : スライダ (左から順に)
  • 10h ~ 17h : ノブ (左から順に)
  • 20h ~ 27h : Sボタン (左から順に)
  • 30h ~ 37h : Mボタン (左から順に)
  • 40h ~ 47h : Rボタン (左から順に)
  • 29h : PLAYボタン [>]
  • 2Ah : STOPボタン [□]
  • 2Bh : REWボタン [<<]
  • 2Ch : FFボタン [>>]
  • 2Dh : RECボタン [〇]
  • 2Eh : CYCLEボタン [CYCLE]
  • 3Ah : PREV TRACKボタン [<]
  • 3Bh : NEXT TRACKボタン [>]
  • 3Ch : SET MARKERボタン [SET]
  • 3Dh : PREV MARKERボタン [<]
  • 3Eh : NEXT MARKERボタン [>]

スライダおよびノブのデータ値は、00h~7Fhの間で連続変化する。
ボタンのデータ値は、押した時に7Fhとなり、はなすと00hになる。

なお、スライダ、ノブ、ボタンのチャンネル番号、コントロール番号、データ値は、KORG Kontrol Editorというソフトでカスタマイズできる。

疑問点

スライダ、ノブを動かしたときにはメッセージが来るが、動かす前の初期値は取得できないものか?

MCC(MPLAB Code Configurator)の使い方

MCC(MPLAB Code Configurator)は、MPLABに無理やり統合されたUIのため、使い方がすこぶる分かりにくい。「MPLAB Code Configurator v3.xx ユーザガイド」をよく読むこと。ここでは要点をメモする。

MCCの起動

MPLABのツールバーのMCCボタンを押す。MCCが起動し、MyConfig.mc3 ファイルができるのでプロジェクトフォルダに保存する。

画面エリア

f:id:licheng:20200821155203p:plain:w640

Project Resources ここが大本。設定したい項目をここから選ぶ。
Device Resources ここで選択したペリフェラルがProject Resourcesに追加される。
Composer Area Project Resourcesで選択した項目についてここで設定する。
基本はEasy Setupタブで設定する。
Registersタブでレジスタ値を設定することもできる。
Pin Manager ピンアサインはここで設定する。
Grid View(表形式の表示)、Package View(パッケージ形状の表示)
のいずれからでも設定できる。

設定の手順

(1) システムモジュールの設定 (クロックなど)

Project ResourcesでSystem Moduleを選択して、Composer Areaで設定する。

(2) ペリフェラルの設定

Device Resourcesで使いたいペリフェラルを選択してProject Resourcesに追加する。このとき、ペリフェラルによっては「PICxx MCUs」と「Foundation Services Library」という2種類のライブラリを選択できる場合がある。「PICxx MCUs」のほうが細かい設定ができる。「Foundation Services Library」はより抽象化された単純な設定ができる。

次に、Project Resourcesでペリフェラルを選択して、Composer Areaで設定する。

(3) ピンアサインの設定

Pin Managerでピンアサインを設定する。基本的にはGrid Viewで設定するほうが分かりやすいが、ピンの配置を気にするときはPackage Viewで確認・設定する。Clock、ICD(デバッガ)、Pin Manager(GPIO) およびDevice Resourcesから追加したペリフェラルについて、各々ピンアサインを設定する。

Grid Viewでのピンの状態表示は少し分かりにくい。

緑色(施錠) 機能が既にアサインされているピン
青色(開錠) アサインのピン。
現在のピンアサインと競合せずに、機能をアサインできる。
橙色(開錠) アサインのピン。現在のピンアサインと競合する。
現在アサインされているピンに代えてこのピンを機能をアサインできる。
白色 機能をアサインできないピン

青色と橙色のちがいは、あまり意識する必要はない。また、同じピンに複数機能をアサインすると緑色で鎖の表示になるが、かなり特殊なケースである。

(4) ピンアサインの詳細設定

Project ResourcesでPin Moduleを選択して、Composer Areaで設定する。ピンの名前(Custom Name)、出力初期値(Start High)、プルアップ(WPU)、オープンドレイン(OD)などを設定する。

(5) 割り込みの設定

Project ResourcesでInterrupt Moduleを選択して、Composer Areaで設定する。割り込みの有効/無効と優先度を設定する。数字が大きいほど優先度が高いことに注意する。

コードの生成

Project ResourcesのGenerateボタンを押すとコードが生成される。コードはmcc_generated_filesフォルダに生成される。このとき、main.cも生成されることに注意する。
設定を変更して再びコード生成するとマージツールが起動するが、非常に使いにくい。mcc_generated_filesフォルダはそのつどバックアップして他のツールでマージするほうがマシな気がする。

メモ:Eagle (v6.5) のクセ

約3年ぶりにEagle使ったら操作をすっかり忘れてた。
Eagleはクセの強いソフトだし、そもそも使ってるバージョンが古い。
最新版だと改善されてるのだろうか?
とにかく、また忘れないようにメモ。

ライブラリに部品をコピー

  • まずコピー先のライブラリ(lbrファイル)を先に開いておく
  • Control Panel でコピー元のライブラリから部品を選んで、右クリックして Copy to Library
  • 開いておいてライブラリに部品がコピーされるので、File>Save (またはCtrl+S) で保存する

ライブラリの部品の名前変更

  • ライブラリ(lbrファイル)を開く
  • Library > Device/Package/Symbol から名前変更したい部品を選択して開く
  • Library > Rename で名前を変更する

ライブラリ内の部品を別名で複製

  • いったん作業用のライブラリ(例えばtemp.lbrを作成)に部品をコピーする
  • temp.lbrで部品の名前を変更する
  • 元のライブラリを開き、temp.lbrから部品をコピー

グループ(範囲選択)で移動やコピー

  • まずMoveやCopyを選択し、それからGroupを選択して図面上で範囲を選択
  • または、Groupを選択して図面上で範囲を選択してから、MoveやCopyを選択
  • 図面上で右クリックして、Group: Move/Copy

図面間のコピー

  • コピー元とコピー先の図面を開いておく
  • コピー元の図面でGroupを選択して図面上で範囲を選択してから、Copy
  • コピー先の図面でPaste

ライブラリで部品のVariantを無印にする

  • パッケージ違い(Variant)の名前を無印(空文字)にするには '' (シングルクォート2個)を指定する

部品のシンボルでGND等の同じ名前の端子を複数作る

  • 端子の名前を例えば GND@1, GND@2, GND@3 のようにする
  • @以下は回路図では表示されない