Windows for IoT で SPI 通信 & サーボ モーターを動かしてみました。
サーボのドライバは秋月で売っていた AE-L6470DRV です。
基本的には以下のサイト様のコードを丸ごといただいています。
L6470ステッピングモータドライバキットでマイクロステップ
Arduino のコードから修正箇所は極めて少なく、C++ なのでプロトタイプ宣言しておくくらい。
(忘れて “c3861: 識別子が見つかりませんでした” で 3 分くらい悩みました。)
SPI.h をインクルードして普通に Arduino 感覚でという感じですね。
// Main.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "arduino.h" #include "SPI.h" #define PIN_SPI_SS 10 #define PIN_SPI_MOSI 11 #define PIN_SPI_MISO 12 #define PIN_SPI_SCK 13 void L6470_send(unsigned char add_or_val); void L6470_setup(); int _tmain(int argc, _TCHAR* argv[]) { return RunArduinoSketch(); } void setup() { // TODO: Add your code here pinMode(PIN_SPI_MISO, OUTPUT); pinMode(PIN_SPI_MOSI, INPUT); pinMode(PIN_SPI_SCK, OUTPUT); pinMode(PIN_SPI_SS, OUTPUT); SPI.begin(); SPI.setDataMode(SPI_MODE3); SPI.setBitOrder(MSBFIRST); //前のコマンドの引数を消去 L6470_send(0x00);//nop L6470_send(0x00); L6470_send(0x00); L6470_send(0x00); //デバイスリセットコマンド L6470_send(0xc0);//ResetRevice L6470_setup();//L6470を設定 delay(1000); //連続運転 L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転 L6470_send(0x00);//SPD値(20bit) L6470_send(0x40); L6470_send(0x00); delay(10000); L6470_send(0xB0);//SoftStop delay(1000); L6470_send(0x50);//Run(DIR,SPD),0x51:正転,0x50:逆転 L6470_send(0x00);//値(20bit) L6470_send(0x40); L6470_send(0x00); delay(4000); L6470_send(0xB0);//SoftStop delay(5000); L6470_send(0x50);//Run(DIR,SPD),0x51:正転,0x50:逆転 L6470_send(0x01);//値(20bit) L6470_send(0x00); L6470_send(0x00); delay(1000); L6470_send(0xB0);//SoftStop delay(5000); L6470_send(0x50);//Run(DIR,SPD),0x51:正転,0x50:逆転 L6470_send(0x01);//値(20bit) L6470_send(0x00); L6470_send(0x00); delay(1000); L6470_send(0xB8);//HradStop delay(5000); L6470_send(0x70);//GoHome delay(8000); } // the loop routine runs over and over again forever: void loop() { } void L6470_send(unsigned char add_or_val){ digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(add_or_val); // アドレスもしくはデータ送信。 digitalWrite(PIN_SPI_SS, HIGH); } void L6470_setup(){ //最大回転スピード L6470_send(0x07);//レジスタアドレス L6470_send(0x00);//値(10bit),デフォルト0x41 L6470_send(0x30); //モータ停止中の電圧設定 L6470_send(0x09);//レジスタアドレス L6470_send(0x20);//値(8bit),デフォルト0x29 //モータ定速回転時の電圧設定 L6470_send(0x0a);//レジスタアドレス L6470_send(0x40);//値(8bit),デフォルト0x29 //加速中の電圧設定 L6470_send(0x0b);//レジスタアドレス L6470_send(0x40);//値(8bit),デフォルト0x29 //減速中の電圧設定 L6470_send(0x0c);//レジスタアドレス L6470_send(0x40);//値(8bit),デフォルト0x29 //フ ル ス テ ッ プ,ハ ー フ ス テ ッ プ,1/4, 1/8,…,1/128 ステップの設定 L6470_send(0x16);//レジスタアドレス L6470_send(0x00);//値(8bit)< }
その他、Windows for IoT 用のプロジェクト作成手順とか、デバッグするホスト名の設定については Windows for IoT on Intel Galileoで L チカ を確認してください。
VS のプロジェクト ファイルも念のためおいておきます。Servo4IoT.zip