ラベル MakeCode の投稿を表示しています。 すべての投稿を表示
ラベル MakeCode の投稿を表示しています。 すべての投稿を表示

2019/09/08

micro:bit + LV8548MC (ステッピング モーター編)

責任感ゼロ、いじり放題の趣味のプログラミングやブログの書き込みは気楽でイイですよ。

さて、お待たせしました!ステッピング(ステッパ)モーター編です。micro:bit と LV8548MC を使って回してみます。ほとんど新しくなった LV8548MC のパッケージの解説となります。

ハードウェアの準備

モーターを除けば DC モーターと同じです。まずは前の記事を。

モーターはバイポーラ型ステッピングモーター MDP-35A を使いました。ググると仕様書が見つかると思いますが、4端子 A, A(上の線つき), B, B(上の線つき)で、A, B 二つのコイルそれぞれブレッドボードに刺さるようにピンヘッダを半田しました。


これを DC ブラシモーターのときに組んだブレッドボードに刺します。


LV8548MC の OUT1, OUT2, OUT3, OUT4 に先程のピンヘッダを刺します。
ハードの準備はこれでおしまいです。

ソフトウェアの準備

これも DC のソフトウェアで説明した通り。同じパッケージにステッピングモーターのブロックを追加しました。以下の GitHub の URL を拡張機能の追加で指定してください。詳しくは前回の記事で。

https://github.com/ttrsato/pxt-lv8548mc.git

ステッピングモーターブロックの説明

DC からいっぱい追加したので迷うかもしれませんが、最低限必要なものは STEP カテゴリーの最初の三つだけです。


ちなみに DC 用と混在できません。間違わないよう先頭に S: と書かれているのがステッピングモーター用。D: が DC モーター用です。

設定

set stepper で IN1〜IN4 の設定をすれば準備完了です。どのピンでもそれぞれが被らなければ構いません。プルダウンメニューから選んでください。全部のピンが見当たらない場合はマウスのスクロールで残りが見えると思います。
回したいモーターの仕様書をみて、A, B コイルの端子を調べて、それぞれのコイルの両端を A-A', B-B' に割り振れば良いです。

あと、Excitation(励磁)方法を選びますが、よくわからなければ 1/1(Full step, 2相励磁) を選んでおけば良いです。1/2 は(Half step, 1-2相励磁)。LV8548MC はこの2種類の励磁方法のみ選べます。マイクロステップをしたい方は別な IC を選んだ方がいいです。オンセミの Solution Kit なら、LV8702 か LV8714 ですね。
ちなみに 1/1 の場合、48ステップで軸が一回転するステッピングモーターの場合、48ステップで一周。1/2 の場合は倍の 96ステップで軸が一周します。

初めてのステッピングモータープログラム


3つのブロックを使っただけの簡単なプログラム。
ボタン A を押したら Forward 方向に48ステップ回って、Reverse(反対方向)に48ステップ回って、Forward に 24ステップ、Reverse に24ステップ回って終了します。


こんな感じ。


この run stepper ブロックは回転する方向 (Forward/Reverse) と動かすステップ数、速度を指定することができます。ms/step は 1ステップを動かす時間です。ms (1秒の1/1000) で指定します。最短は 1ms/step です。ただこの速度で動くかどうかはモーターと負荷次第です。プログラムの処理速度もどうだか。ちなみに負荷が重いなど期待した速度で回らなくなることを脱調と言います。


最後に指定しているのが stop stepper。ここでは Free(励磁無し) と Hold(励磁保持) を選択できます。run stepper では回し終わった後に Hold(励磁保持)状態になっています。電流が流れたままなので、コイルは磁力を持ち、軸は弱い力では動きません。Free ではコイルの磁力は無くなるので、軸は弱い力で回すことが出来るようになります。Hold 状態は電流を消費しますし、モーターがとても熱くなるので、位置を保持する必要がなければ Free しておいた方が良いかもしれません。

とりあえずこれらを組み合わせれば大体好きなことは出来るのではないかと思います。

残りの基本ブロック


run stepper accel と run stepper trap の二つがあります。

run stepper accel
加速、減速を実現するブロック。start の速度から stop の速度まで、段階的に steps で指定したステップ数回転します。

run accel デモ

run stepper trap
台形駆動します。台形駆動は、だんだん速く回転し、一定速度で回った後、止まる前に徐々に速度を遅くする機能です。グラフを書くと台形なのでそんな名前です。

run trap デモ

変換ブロック

残りは変換ブロックです。回す単位や、速度の単位を変えたい時に使います。物によっては STEPPER units ブロックで初期設定を入れる必要があります。
おまじないというわけではないのですが、


set steps/round を設定しておきましょう。今回使用した MDP-35A はステップ数 48 なので、48を設定します。ステップ角は 7.5° (360/48) なので、


set deg/step で設定しても同じです。これらを指定することによって、回転を角度や回転数で指定したり、速度を rpm で指定すると期待通りに動くようになります。つまり以下のブロックがようやく使えるようになるわけです。もちろん 1ステップ以下の動作は出来ないので丸められます。


これらのうち、STEPPER to steps 使うと最初のプログラムはこういう風に書き直せるわけです。


2周、1周、180°、90°など、直感的に値を設定することが出来るようになります。
応用編として、回転するステージがギアを介してステッピングモーターに繋がっていて、1 ステップで 0.1° 動くシステムなら、set 0.1 deg/step を設定すればステージの回転角度を与えて動かすことが出来ます。ちなみに set mm/step を設定しておくと、mm to steps を使えるようになります。これはスライダーなどのボールネジを使った直線駆動する機構に対する設定で、1ステップで移動する距離を mm でセットすると、mm to steps で移動したい距離を与えるとステップ数を返すようになり、上記の角度指定のように直感的な指定が可能になります。

STEPPER to ms/step は、速度の単位を変換するブロックです。
Hz や、rpm でステップの変化速度を与えたい場合はこれらを使ってください。

速度を周波数 Hz で与える

ちなみに上記のコードを実行すると、あれ?となりませんか。1Hz は 1秒間に回転する回数なので、1Hz だったら 1秒で 1回転するはずじゃんと。残念ながら 1ステップ移動する速度が 1Hz(1秒) です。一周するのに 48ステップなので遅いんです。rpm 指定も同様です。仕様です。いやいや、一周単位での Hz やら rpm で設定したいという方は Hz または rpm で与える数を rounds to steps で囲ってから Hz/rpm to ms/step に与えてください。


rounds to steps は一周のステップ数を掛けた答えを返すので、辻褄が合うんですね。

以上、で LV8548MC を使ったステッピングモーター駆動のためのブロックの説明はおしまいです。残念ながら micro:bit が一生懸命駆動パルスを生成しているので、モーターを回している最中は何も出来ませんので悪しからず。

おまけ

あっているかどうかわからないけど、台形駆動のパラメータの計算に苦労したので晒しておきます。面倒臭いのでバグがあると言われないと見直したくないです。間違いがあったら教えてね。

台形駆動は、トータルカウント(ステップ)数 Ca と、トータル時間 Ta、加減速時間 T1 と初期スピード S1 のみを与えて、残りは計算で求めています。

加速期間は速度 S1(ms/step) から S2(ms/step) まで徐々に1ステップの時間が短く(長く)なります。この時間を全部足したのが T1 になります(8)。また、T2 の時間をその時の1ステップ速度 S2 で割ったのが T2 という二つの方程式を解けばいい(4)。なんだけど意外に面倒臭い。答えは (10)。

台形駆動

余談。ステップ時間で見ると、台形じゃなく、上記のように台形の逆さま。じゃぁと速度に直すと 1/S1 とか逆数になるので、直線じゃないです。ただ周波数に変換すると S1 は実際は時間です。1/t=f なので周波数にすると台形になって、しかも直線になります。そういうこと?

今回から数式を埋め込めるように TeX のコード解釈できるようにした。TeX なんて学生の頃以来ですよ。でも数式書くならいまだに TeX いいよね。最高です!クヌース先生。

\begin{align}
T_{ams}=2 T1_{ms}+T2_{ms}
\end{align}
\begin{align}
C_{asteps}=2 C1_{steps}+C2_{steps}
\end{align}
\begin{align}
\Delta s=\dfrac {S1_{msps}-S2_{msps}}{C1_{steps}}
\end{align}
\begin{align}
C2_{steps}=\dfrac {T2_{ms}}{S2_{msps}}
\end{align}
\begin{align}
T1_{ms}&=(S2_{msps}+\Delta s)+(S2_{msps}+2\Delta s)+\cdots +(S2_{msps}+C_{asteps}\Delta s)\\
&= \sum^{C_{asteps}}_{i=1} (S2_{msps} + i \Delta s)\\
&= C_{asteps}S2_{msps} + (1 + 2 + \cdots + C_{asteps})\Delta s\\
&= C_{asteps}S2_{msps} + \dfrac {C_{asteps}(C_{asteps} + 1)}{2} \Delta s
\end{align}
\begin{align}
(C_{asteps} - 2)S2_{msps}^{2} + (C_{asteps}S1_{msps} - 4T1_{ms} - T2_{ms})S2_{msps} - T2_{ms}S1_{msps}
\end{align}
\begin{align}
S2_{msps} = \dfrac{-(C_{asteps}S1_{msps} - 4T1_{ms} - T2_{ms}) \pm \sqrt{(C_{asteps}S1_{msps} - 4T1_{ms} - T2_{ms})^{2} +4(C_{asteps} - 2)T2_{ms}S1_{msps}}}{2(C_{asteps} - 2)}
\end{align}



2019/09/01

micro:bit + LV8548MC (DC モーター編:プログラミング)

前回、micro:bit + LV8548MC (DC モーター編:とりあえず ハード)ではハードウェアに関してクドクド書きましたが今回は micro:bit に拡張機能で LV8548MC のパッケージを追加して、LV8548MC のブロックを使ってモーターを回してみます。プログラミングと言いつつ、単なるパッケージのブロック説明ですが。

ステッピングモーターブロックの追加に伴って内容アップデートしました。

拡張機能のインストール


GitHub に上げたパッケージを指定してインストールします(オリジナル)。
ブラウザーで MakeCode を開きます。既存のプロジェクトを開いてもいいですし、新規のプロジェクトを開いてもいいです。ちなみに iPhone 上でもプログラム作れますよ!

ちなみにこの拡張機能は LV8548MCSLDGEVK の機能を参考にはしていますが、完全にゼロから作っていますし、インターフェースも異なります。オシロスコープの私物が無いので、思ったような波形が出ているのかやや不安ですが、動作的にはまぁ、そんなに間違いは無いだろうといった感触です。

プロジェクトを開きます

拡張機能をインストールするために、高度なブロック、拡張機能のタブをクリックします。

拡張機能のインストール

LV8548MC の拡張機能を探します。検索ウィンドウに、
https://github.com/ttrsato/pxt-lv8548mc.git
を入力します。

拡張機能の検索ウィンドウ

検索すると lv8548mc が見つかります。クリックすると一瞬でインストールされます。

lv8548mc が見つかった!

MakeCode のエディターに LV8548MC のタブが増えています。
あとは使うだけ。


ブロックについて


LV8548MC の DC モーター用ブロックは3つあります(減りました)。残念ながらローカライズはやり方がいまいちわからなく(以前トライしたときにうまくいかなかった)、そのうち対応します。誰か知ってたら教えてー。

  • 初期化ブロック

Set DC Motor は LV8548MC のCH1 (IN1, IN2) または、CH2 (IN3, IN4) に繋ぐ micro:bit の端子を指定します。一つのチャネルに一つの初期化ブロックが必要です。DriveMode は PWM 駆動時の非通電時の動作の指定です。Open または Brake の指定ができます。
ちなみに DC モーター用のブロックの頭には D: が書かれています。ステッピングモーター用ブロック(S: で始まるブロック)とは共用出来ませんのでご注意を。

  • 速度指定ブロック

モーターを回すブロックはこれ一つです。ステッピングモーターブロックの追加の時に見直されました。

モーターの回る方向は Forward または Reverse (反転) で指定。速度は 0〜100 の割合 (duty) で与えることができます。ある一定以上の速度になるとモーターが回転を始めます。ほどほどに。定格外の電圧を加えている時は注意です。

  • 停止ブロック

 モーターを停止させます。
止めるときには Open または Brake を選ぶことができます。Open はモーターは慣性に従い緩やかに停止しますが、Brake はモーターを急激に停止させます。

サンプルプログラム


簡単なサンプルプログラムです。
徐々に速度をあげて、徐々に速度を下げるを繰り返すだけのプログラムです。




次はいよいよ ステッパー (ステッピング)モーターです。



2017/10/21

micro:bit ノススメ



micro:bit のポテンシャルの高さに興奮してるここ数日。
早速紹介しますよー。

存在自体はなんとなく知ってたんだけど、「たまたま」秋月の前を通りかかったら、表に置かれてた micro:bit が目に入っちゃったんで、とりあえず買ってみました。遊び始めてみたら非常に面白いことに気づいたところです。

micro:bit とは英国放送協会(BBC)が主体となって作った教育向けの小型マイコンボードで、イギリスでは11-12歳の子供に無償で配られているようです(うらやましい。日本でも配ろう!)。

なんだけど、子供向けにしておくには勿体ない。
大人でもかなり楽しめるポテンシャルを秘めてます。

世の中には Raspberry Pi やら Arduino やら IchigoJam などなどのプログラミング可能な小さなコンピューターというのはいくつもありますが、micro:bit はその中でもコスパとバランス高いなと感じます(MIPS とコストで比較すれば Raspberry Pi がダントツでなんですが)。

micro:bit の気に入ってるところは、
  • ボタン入力
  • 5x5 のLEDマトリクス表示(文字列をスクロールで表示出来る。秀逸!)
  • 無線機能 (BLE 含む)
  • UART/SPI/I2C のシリアルインターフェイス
  • 各種センサー搭載(光、温度、加速度、コンパス)
  • スピーカーを繋げて音が出る
  • バッテリー駆動
  • ディジタル・アナログI/O を使え拡張性
  • モバイルプログラミング可 (iPhone などが必要だけど)
  • プログラミング環境の MicroCode が意外に使える(シミュレータ付き)
  • MicroCode の便利なファンクション(無線、音、ゲーム、などなど)
  • JavaScript/Python でのプログラミング環境サポート
  • mbed としてプログラミングできる (C/C++)
これら機能が小さな基板(4x5cm)に実装されていて 2000円程度ならお安くないですか?BLE も搭載してるんですよ! マイコン自身が Nordic の Cortex-M0 搭載した RF SoC ですから当然と言えば当然なんだけど。

しかも電池駆動で2個のボタンと5x5 の LED 表示は単体でモバイル用途にバッチリ。他に無い強みです。小さな基板にバッテリーつないだだけで遊べるオモチャです。



というわけで、

「買い」

ですよ! 大人も子供も。
micro:bit 同士で無線通信できるので二個大人買いしましょう。自分はまだですが。

ところで、自分にとってはモバイル環境でプログラミングできるってのは結構重要な要素で、過去は PC-1360K(BASIC)に始まり、HP200LX(DOS+TurboC)、MobileGear(FreeBSD+Peal) の後はこれといって面白い環境なかったんですが、これは久々のヒットです。

まぁ、mobile:bit 単体でプログラミングできないんですがそれはよしとします。似たようなもので IchigoJam があってこちらも電池駆動可能で、単体でプログラミング(BASIC)出来るという強みがあるのですが、基本的に入出力は外部に頼る構成なんですよね。センサーも特に搭載してないし、もちろん無線も無し。総合的に micro:bit の方がバランス的に気に入りました。無限の可能性を感じます。

プログラミングの画面(MakeCode)はこんな感じで、ちょっともたつくけど iPhone でも編集可能。iPhone だとコード書くよりはこっちの方が相性いいかも。


シミュレータもそこそこよくできてるっぽい。キャラクター表示するし、ボタンにも反応。音を出すコード書くと音も出る。ただしオフラインではコンパイルは出来るけどシミュレータは動かない模様。

#microbit #makecode #mbed