メディア

実践! ご主人様とメイドがステッピングモーターを動かす江端さんのDIY奮闘記 EtherCATでホームセキュリティシステムを作る(7)(5/7 ページ)

» 2016年01月28日 09時30分 公開
[江端智一EE Times Japan]

"simple_test.c"の改造

 では、これより、"simple_test.c"の改造を開始します(改造前のsimple_test.cは、念のため、別のファイル名で保存しておいてください)。

 といっても、要するに、EtherCATスレーブのIO出力を、"simple_test.c"から、コントロールできるようにすれば良いだけのことです(なお、ステッピングモーターの動作原理については、ここでは説明しませんので、がんばって勉強*)してくださいね)。

*)編集注:そんな皆さまに送りたい、EDN Japan関連記事。まずはここから「「ステッピングモーター」で学ぶエンコーダの活用法

イメージ画像

 今回は「ステッピングモーターを動かせればいい」という観点のみに注力して、考え得る最小の改造とします。


■37行目の下に、以下を追加
char stepping_Signal = 1; //00000001
/* Stepping motor value */
void CALLBACK Motorthread(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1,  DWORD_PTR dw2)
{
	if (stepping_Signal == 1) 
		stepping_Signal = 2;  // 00000010 
	else if ( stepping_Signal == 2)
		stepping_Signal = 4;  // 00000100
	else if ( stepping_Signal == 4)
		stepping_Signal = 8;  // 00001000  
	else if ( stepping_Signal == 8)
		stepping_Signal = 1;  // 00000001 
}
■41行目の”IOmap[0]++;” を以下の様に変更
	IOmap[0] = stepping_Signal;   // ここがLEDを点滅させるパラメータ
	// 必要に応じてslaveinfoの情報を使って、”[0]”を, "[2]"とか”[4]”とかに変更する
■128行目の” UINT mmResult;”の下に、以下を追加
    UINT mmResult2;
■194行目の” mmResult = timeSetEvent(1, 0, RTthread, 0, TIME_PERIODIC);”の下に、以下を追加
		 mmResult2 = timeSetEvent(100, 0, Motorthread, 0, TIME_PERIODIC); // この”100”の値を小さくすると、モーターの速度が上がる
■252行目の"         timeKillEvent(mmResult);"の下に、以下を追加
         timeKillEvent(mmResult2);

 これだけの変更で、とりあえず、モーターを動かす信号を作り出せます。

 この”simple_test.c”では、一度キックすると、一定の時間間隔でずっと動き続ける、コールバック関数が重要な役割をしています。

 常にプロセスデータをEthernetに流し続ける処理と、IOMap[]の内容を替え続ける処理を、コールバック関数に丸投げしておくという方法を採用しています。

説明画像

 もっとも、SOEMやこのプログラムは、非リアルタイムOSであるWindows7の上で動いているので、厳密な意味でのリアルタイム制御はできません。

 EtherCATを、産業用ロボットの製造ラインや、ドローン撃退システムに使うには、ベンダー(ベッコフ社さんなど)が提供するマスタを購入した方が良いと思います。

 しかし、江端家のホームセキュリティシステムに使うには、Windows7の上で動くSOEMでも、十分すぎるスペックなのです。

 ソースコードを変更して、LEDの点滅パターンを自由に変えられるようになったら、前回の最初にご紹介した物品や回路図を使って、EtherCATスレーブとの接続を行ってください。

 このプログラムによって動くはずの、ステッピングモーターの動画を再掲しておきます。

動画が取得できませんでした

 (回路図はこちら

 では、あなたの家のパトランプやステッピングモーターも、上手く動くことをお祈りしております。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.