Lチカ、PWM、サーボモータ

LチカからPWM、サーボモータ

Lチカプログラムをいじる

#include "mbed.h"

DigitalOut myled(LED1); // ピンのモード設定/プログラム上での名前/ピンの呼び名

int main() {
  while (1) {
    myled = 1; // LEDを光らせる
    wait_ms(1000); // 1000ms停止
    myled = 0; // LEDを消す
    wait_ms(1000); // 1000ms停止
  }
}

wait_ms() は括弧の中の値/ミリ秒マイコンを停止させる関数です。LEDをONにしては停止、OFFにしては停止が while 文で繰り返されるのでLEDがチカチカするわけです。 引数をいじってみましょう。特に引数を十分小さくすると、面白いことが起こります。

PWM

引数を小さくしていくとある時点で点滅が感じられなくなります。(私は両方の引数を10msにすると感じられません)そして少し暗くなったように感じます。(分かりにくければ、ON時間を1ms, OFF時間を19msにしてみてください) これがPWMを理解するうえでとても大事なことです。

PWMは疑似的なアナログ値を作るツールです。 PWMを生成するには、Lチカのプログラムからもわかる通り、十分小さい時間で、ON時間とOFF時間を決めればよいですね。ON時間とOFF時間の和とON時間でも生成することができますね。ON時間とOFF時間の和を周期と呼び、ON時間をパルス幅と言ったり、ON時間/周期をデューティー比といいます。

mbedにはPWMを生成するAPIが備わっているので、それを利用しましょう。

今後mbedでどうやってコードを書けばいいんだ?となったら mbed (機能名::今回はPWM) でググりましょう。

mbed 私家リファレンス PWM

初期化、周期、パルス幅をそれぞれどうやって書けばよいのかの説明が書いてあります。

サーボモータ

#include "mbed.h"

PwmOut PWM(LED1); //初期化
int main() {
    PWM.period_us(20000);  //周期設定
    while (1) {
                PWM.pulsewidth_us(500); //パルス幅変更
                wait(1);
                PWM.pulsewidth_us(1450);
                wait(1);
                PWM.pulsewidth_us(500);
                wait(1);
                PWM.pulsewidth_us(2400);
                wait(1);
    }
}

PWMで制御する一般的なサーボモータは周期を20msに設定し、パルス幅(0.5→2.4ms)とサーボモータの角度(0度→180度)に一次関数的な関係があるので、上記のコードは0度→90度→0度→180度を繰り返します。

koke688.hatenablog.com

mbedをはじめよう

mbedへのアカウント登録とLチカ

アカウント作成

Arm Mbed OS developer site からアカウントの登録を行います。 右上の'Login/Signin'からSigninを選択し、必要情報を記入します。

右上にユーザー名が表示されていれば登録完了です。

f:id:koke688:20180527120245p:plain

アカウントが作成出来たら右上中央のCompilerをクリックしましょう。

次の画面に移動します。

f:id:koke688:20180527120529p:plain

右上のデバイス未選択をクリックすると

f:id:koke688:20180527120745p:plain

↑のタブが出てくるのでAdd Board をクリックしてください。

たくさんのマイコンが表示されますが、その中からNucleo- F446RE を選択してください。 見つからなかったら以下のリンクを使ってください。

Nucleo-F446RE

f:id:koke688:20180527121459p:plain

右側のAdd to your Mbed Compilerをクリックすると、

f:id:koke688:20180527121651p:plain

↑のように緑のタブが出てきたらOKです。今後新しいマイコンボードを使うときは同じ方法で追加します。Compiler画面の右上に現在設定されているマイコンが表示されます。

再び Compiler をクリックしましょう。

移動後の画面で左上の新規をクリックしましょう。

プログラム名は適当に決めましょう。(今後同じ名前のプログラムファイルは作れません。同じ名前のまま作ろうとすると、エラーになります。)

f:id:koke688:20180527122221p:plain

OKボタンを押して次の画面が表示されたら、''main.cpp'をクリックしてください。すでに何かコードが書かれていますが、消して大丈夫です。ここにコードを書いていきます。

Lチカ

以下のコードを書きましょう。

#include "mbed.h"

DigitalOut myled(LED1); // ピンのモード設定/プログラム上での名前/ピンの呼び名

int main() {
  while (1) {
    myled = 1; // LEDを光らせる
    wait_ms(1000); // 1000ms停止
    myled = 0; // LEDを消す
    wait_ms(1000); // 1000ms停止
  }
}

とりあえずかけたと思ったらCtrl + B キーを押しましょう。 下部に緑色でSuccess と表示されればOKです。 Successしたら上部のコンパイル を押しましょう。ブラウザにもよりますが、ファイルのダウンロードが始まります。

NucleoF446REとパソコンをつなぎ、先ほどダウンロードしたバイナリァイルをドラッグアンドドロップで突っ込みましょう。

マイコンボードの中央のLEDが2秒周期で点滅します。

今後以上の方法でマイコンを動かすことができます。

koke688.hatenablog.com