Windows for IoT + AE-L6470DRV でサーボを動かす


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


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください