« 「誰でもわかるマイコン入門」パルスモーターのプログラム説明 | トップページ | 「誰でもわかるマイコン入門」オートガイド対応 »

2015年1月10日 (土)

「誰でもわかるマイコン入門」スイッチをつける

前回、パルスモーターを回すとこまでできました。

今日は、スライドスイッチを2つ付けて、0.5倍速モードと回転方向切り替えをできるようにします。

まずは、ハードの工作からです。

1501101
速度スイッチの一方をP5に接続します。片方をGNDに接続します。方向スイッチの方は一方をP6、片方をGNDに接続します。

さらに、回転方向の切り替え信号をドライバに送るため、白い線のようにmbed側はp7、ドライバ側は6番のピンを接続します。

1501102
これで完了です。

次にプログラムですが、プログラム構成方法としてスイッチの要求仕様は2つ考えられます。

1 動作中でもスイッチの切り替えに対応する
2 電源投入時のスイッチ状態を反映する。状態を変えたい場合は電源を再投入する

後者の方が簡単なので、後者の方で紹介しますが、前者もそれほど難しいわけではありません。そのうちやり方を紹介します。

プログラムは以下のページにアップロードしました。

http://developer.mbed.org/users/Honmaka/code/PulseMotor2/

それではプログラムを解説します。

DigitalIn   MotorSpeedSw(p5);
p5をデジタル入力として使用し、名前をMotorSpeedSwと名づける。

DigitalIn   MotorDirectionSw(p6);
p6をデジタル入力として使用し、名前をMotorDirectionSwと名づける。

DigitalOut  MotorDirectionOut(p7);
p7をデジタル出力として使用し、名前をMotorDirectionOutと名づける。

MotorSpeedSw.mode(PullUp);
MotorDirectionSw.mode(PullUp);

この2つの命令はとても重要です。p5、p6をプルアップしています。プルアップはpicのときに説明しました。スイッチがONの場合は、p5、p6はGNDに接続されるから0になります。ところがスイッチがOFFの場合は、p5、p6は解放状態になります。解放だjから0だと思ってはだめです。解放状態は非常に不安定で0か1かサイコロを振る状態と同じで、ランダムです。それを避けるために抵抗を介して+5Vに接続するのが、プルアップです。

このmbedはプルアップ抵抗を内蔵していて上記のように命令でプルアップを有効にすることができます。これによりスイッチがOFFの場合の入力は1になります。

MotorDirectionOut = MotorDirectionSw;
この命令は方向スイッチの状態(0か1)をそのままモータードライバの方向設定ピン(6番)に送っています。

   if (MotorSpeedSw == 1) { //Normal Speed
        PulseMotor.period_us(83140);
        PulseMotor.pulsewidth_us(83140/2);
    }
    else {                     //Half Speed
        PulseMotor.period_us(83140*2);
        PulseMotor.pulsewidth_us((83140*2)/2);
    }

最後です。ちょっと長いですが、ここではスイッチの状態を読み込んでいます。

if というのは条件判定文です。

if (条件) {
条件成立場合はここを実行
}
else {
条件不成立の場合はここを実行
}

スイッチがONの場合(0のとき)は、0.5倍速にしますので、パルス周期を2倍に伸ばしています。いわゆる星景写真モードですね。

さて、次回はプッシュスイッチを付けて、押している間だけ、回転速度を変えられるようにします。これにより、オートガイド対応にできます。

|

« 「誰でもわかるマイコン入門」パルスモーターのプログラム説明 | トップページ | 「誰でもわかるマイコン入門」オートガイド対応 »

コメント

こんにちは
「誰でもわかる・・・」楽しみに見させていただいてます。電子工作全く苦手なのですが^^;一行ずつ解説していただいて、こんな私にもわかる気がします・・・早速mbed買って回しています^^ まわる!感動です! ここで一つ質問なんですが mbed一つドライバ2台でステッピングモーター2台を同時に別々の速度で回すことは可能なのでしょうか?なにせど素人な者で・・・くだらない質問で申し訳ありませんが教えてください。
よろしくお願いします。

投稿: 星観る | 2015年1月11日 (日) 13時18分

星観るさん、
モーター回りましたか、それはおめでとうございます。

モーター同時2台はもちろんできます。

まったく同じようにつなげるだけです。ただし、一個目のモータをつないだP21のところはP22にします。これで2つのモーターを区別します。
プログラム的には次のようになります。
PwmOut PulseMotor1(p21);
PwmOut PulseMotor2(p22);
int main() {
PulseMotor1.period_us(83140);
PulseMotor1.pulsewidth_us(83140/2);
PulseMotor2.period_us(xxxx);
PulseMotor2.pulsewidth_us(xxxx/2);

また2個目のモータを赤緯軸に使うなら、通常は停止しているので、停止中はマイクロステップドライバも停止させた方が、省エネですが、方法はそのうち説明したいと思います。
それでは。


投稿: ほんまか | 2015年1月11日 (日) 18時13分

コメントを書く



(ウェブ上には掲載しません)




« 「誰でもわかるマイコン入門」パルスモーターのプログラム説明 | トップページ | 「誰でもわかるマイコン入門」オートガイド対応 »