ステッピングモータを制御するためステッピングモータコントローラL6470を使っています。なかなか高機能なコントローラで、以下の特徴を持ちます。
- 1相をフルステップ、1/4、1/8、1/16、1/32、1/64、1/128ステップ(マイクロステップ)に細分可能
- マイコンのSPIインタフェイスで2相バイポーラステッピングモータの正・逆転、加・減速、ブレーキ、速度制御、位置制御が可能
パソコン上でプログラムを組み、そのプログラムからUSBを通してステッピングモータを回してみたかったので、贅沢にもArduinoをUSBシリアル<ーー>SPIコンバータとして使ってみました。 Arduino内のプログラムはこんな感じです。
#include <SPI.h>
#define SPI_MOSI 11
#define SPI_MISO 12
#define SPI_SCK 13
#define SPI_SS 10
#define LED_PIN1 3
#define LED_PIN2 2
#define CLOCKOUT 9
void setup() {
Serial.begin(9600);
pinMode( SPI_MOSI, OUTPUT );
pinMode( SPI_MISO, INPUT );
pinMode( SPI_SCK, OUTPUT );
pinMode( SPI_SS, OUTPUT );
digitalWrite( SPI_SS, HIGH );
SPI.begin();
SPI.setDataMode( SPI_MODE3 );
SPI.setBitOrder( MSBFIRST );
pinMode( CLOCKOUT, OUTPUT );
TCCR1A = bit( COM1A0);
TCCR1B = bit( WGM12 ) | bit( CS11 ) | bit( CS10 );
OCR1A = 0xFFFF; //7 = 1MHz, 15 = 0.5MHz
pinMode( LED_PIN1, OUTPUT );
pinMode( LED_PIN2, OUTPUT );
onLed();
delay(100);
offLed();
delay(500);
onLed();
delay(100);
offLed();
}
void loop() {
unsigned char c;
unsigned char rc;
if( Serial.available() ){
onLed();
c = Serial.read();
digitalWrite( PIN_SPI_SS, LOW );
rc = SPI.transfer( c );
digitalWrite( PIN_SPI_SS, HIGH );
Serial.write( rc );
offLed();
}
}
void onLed(){
digitalWrite( LED_PIN1, HIGH );
digitalWrite( LED_PIN2, LOW );
}
void offLed(){
digitalWrite( LED_PIN1, LOW );
digitalWrite( LED_PIN2, HIGH );
}
SPI制御は基本的にこれだけでできるので、便利ですね。
SPI.begin();
SPI.setDataMode( SPI_MODE3 );
SPI.setBitOrder( MSBFIRST );
SPI.transfer( c );
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。