- TB6674PG (1)
参照:http://webpark1772.sakura.ne.jp/toki_no_katachi_2016/actuator.html
TB6674PG_1.inc
/* Stepper */
#include
const int STEPS = 48;
const int PIN_1 = 6;
const int PIN_2 = 7;
Stepper MyStepper(STEPS, PIN_1, PIN_2);
void setup() {
MyStepper.setSpeed(10);
}
void loop() {
MyStepper.step(1);
}
- TB6674PG (2)
参照:https://www.hiramine.com/physicalcomputing/arduino/steppingmotordriver.html
TB6674PG_2.inc
#define INAPIN (7)
#define INBPIN (6)
#define VOLUMEPIN (0)
// 真理値表
// IN │ φ : φ~
// ──┼──┼──
// LOW│ LOW: HIGH
// ──┼──┼──
// HIGH│HIGH: LOW
#define BASESTEPANGLE (1.8) // 基本ステップ角度:1ステップで動く角度
void setup()
{
pinMode(INAPIN, OUTPUT);
pinMode(INBPIN, OUTPUT);
Serial.begin(9600);
}
void step_forward( int iRpm )
{
// ・1ステップにかけるべき時間は、
// (基本ステップ角度) * (rpmから求まる1度うごくのにかける時間)
// ・rpmから求まる1度うごくのにかける時間は、
// 1 / ( iRpm[rpm] * 360[deg] / 60[s] ) = 1 / (iRpm * 6)
// = 1 / (iRpm * 6)
// ・1ステップ時間[s]は
// StepTime = BASESTEPANGLE / (iRpm * 6)
int iStepTime_milli = (int)(1000.0 * BASESTEPANGLE / (iRpm * 6));
Serial.println(iStepTime_milli);
// P1:ON, P2:ON, P1B:off, P2B:off
digitalWrite(INAPIN, HIGH);
digitalWrite(INBPIN, HIGH);
delay(iStepTime_milli);
// P1:off, P2:ON, P1B:ON, P2B:off
digitalWrite(INAPIN, LOW);
digitalWrite(INBPIN, HIGH);
delay(iStepTime_milli);
// P1:off, P2:off, P1B:ON, P2B:ON
digitalWrite(INAPIN, LOW);
digitalWrite(INBPIN, LOW);
delay(iStepTime_milli);
// P1:ON, P2:off, P1B:off, P2B:ON
digitalWrite(INAPIN, HIGH);
digitalWrite(INBPIN, LOW);
delay(iStepTime_milli);
}
void step_reverse( int iRpm )
{
int iStepTime_milli = (int)(1000.0 * BASESTEPANGLE / (iRpm * 6));
Serial.println(iStepTime_milli);
// P1:off, P2:off, P1B:ON, P2B:ON
digitalWrite(INAPIN, LOW);
digitalWrite(INBPIN, LOW);
delay(iStepTime_milli);
// P1:off, P2:ON, P1B:ON, P2B:off
digitalWrite(INAPIN, LOW);
digitalWrite(INBPIN, HIGH);
delay(iStepTime_milli);
// P1:ON, P2:ON, P1B:off, P2B:off
digitalWrite(INAPIN, HIGH);
digitalWrite(INBPIN, HIGH);
delay(iStepTime_milli);
// P1:ON, P2:off, P1B:off, P2B:ON
digitalWrite(INAPIN, HIGH);
digitalWrite(INBPIN, LOW);
delay(iStepTime_milli);
}
void step_stop()
{
}
void loop()
{
// int iValue = analogRead(VOLUMEPIN);
//Serial.println(iValue);
// iValue = iValue / 8; // [0 1023] -> [0 127]
// if( 64 + 2 < iValue )
// {
// iValue : 64 127
// rpm : 1 64
// step_forward( iValue - 63 );
// }
// else if( 63 - 2 > iValue )
// {
// iValue : 0 63
// rpm : 64 1
// step_reverse( 64 - iValue );
// }
// else
// {
// step_stop();
// }
step_forward( 10 );
}
- L6470
マイクロステップ:1/128
制御入力:SPIでコマンド送信
参照:https://qiita.com/nakagawa1017/items/dcf67d9ceb384715f7ee
参照:http://tyokota.hateblo.jp/entry/2017/06/16/191852
参照:http://spinelify.blog.fc2.com/blog-entry-41.html
参照:https://kogakubu.com/?p=2918
Arduino の SPI 使用方法
参照:https://stupiddog.jp/note/archives/976
AE-L6470 4CN | Arduino UNO |
1:#BUSY/SYNC | 9: |
2:FLAG | |
3:GND | GND |
4:EXT-VDD | 3.3V |
5:SDO | 12:(SPI[MISO]) |
6:CK | 13:(SPI[SCK]) |
7:SDI | 11:(SPI[MODSI]) |
8:#CS | 10:(SPI[SS]) |
9:STCK | |
10:#STBY/#RST | |
#include
//#include
// ピン定義。
#define PIN_SPI_MOSI 11
#define PIN_SPI_MISO 12
#define PIN_SPI_SCK 13
#define PIN_SPI_SS 10
#define PIN_BUSY 9
void setup()
{
delay(1000);
pinMode(PIN_SPI_MOSI, OUTPUT);
pinMode(PIN_SPI_MISO, INPUT);
pinMode(PIN_SPI_SCK, OUTPUT);
pinMode(PIN_SPI_SS, OUTPUT);
pinMode(PIN_BUSY, INPUT);
SPI.begin();
SPI.setDataMode(SPI_MODE3);
SPI.setBitOrder(MSBFIRST);
Serial.begin(9600);
digitalWrite(PIN_SPI_SS, HIGH);
L6470_resetdevice(); //L6470リセット
L6470_setup(); //L6470を設定
// MsTimer2::set(50, fulash);//シリアルモニター用のタイマー割り込み
// MsTimer2::start();
delay(4000);
Serial.println("指定方向に指定数ステップする");
L6470_move(1,1600);//指定方向に指定数ステップする
L6470_busydelay(5000); //busyフラグがHIGHになってから、指定ミリ秒待つ。
Serial.println("指定方向に連続回転");
L6470_run(0,10000);//指定方向に連続回転
delay(6000);
Serial.println("回転停止、保持トルクあり");
L6470_softstop();//回転停止、保持トルクあり
L6470_busydelay(5000);
Serial.println("指定座標に最短でいける回転方向で移動");
L6470_goto(0x6789);//指定座標に最短でいける回転方向で移動
L6470_busydelay(5000);
L6470_run(0,0x4567);
delay(6000);
Serial.println("回転急停止、保持トルクなし");
L6470_hardhiz();//回転急停止、保持トルクなし
}
void loop(){
}
void L6470_setup(){
L6470_setparam_acc(0x40); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
L6470_setparam_dec(0x40); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
L6470_setparam_maxspeed(0x40); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
L6470_setparam_minspeed(0x01); //[R, WS]最小速度default 0x000 (1+12bit) (0.238*val[step/s])
L6470_setparam_fsspd(0x3ff); //[R, WR]μステップからフルステップへの切替点速度default 0x027 (10bit) (15.25*val+7.63[step/s])
L6470_setparam_kvalhold(0x50); //[R, WR]停止時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
L6470_setparam_kvalrun(0x50); //[R, WR]定速回転時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
L6470_setparam_kvalacc(0x50); //[R, WR]加速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
L6470_setparam_kvaldec(0x50); //[R, WR]減速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
L6470_setparam_stepmood(0x03); //ステップモードdefault 0x07 (1+3+1+3bit)
}
void fulash(){
Serial.print("0x");
Serial.print( L6470_getparam_abspos(),HEX);
Serial.print(" ");
Serial.print("0x");
Serial.println( L6470_getparam_speed(),HEX);
}
- TB67S249FTG
設定:ピン3本
マイクロステップ:1/32
制御入力:回転方向(DIR)、クロック(STEP)
特徴:Arduinoとセットで3Dプリンタ制御用として売られている
参照:http://akizukidenshi.com/catalog/g/gK-14791/
- DRV8825
設定:ピン3本
マイクロステップ:1/32
制御入力:回転方向(DIR)、クロック(STEP)
参照:https://www.amazon.co.jp/gp/product/B078SHRSKH/
- ST820
設定:ピン3本
マイクロステップ:1/256
制御入力:回転方向(DIR)、クロック(STEP)
参照:https://wiki.fysetc.com/ST820_V1.0/
参照:https://www.amazon.co.jp/gp/product/B07P81QHCH/
// ピン定義
#define PIN_MS0 13
#define PIN_MS1 12
#define PIN_MS2 11
#define PIN_EN 10
#define PIN_STEP 9
#define PIN_DIR 8
#define PIN_RST 7
//1回転させるための値
#define stepsPerRevolution 200 //1ステップ1.8度の場合
#define microstep 256 //逆数
#define reductionratio 1 //減速比
#define DELAY 256/microstep
//#define DELAY 2000
/*
* MS2 MS1 MS0
* 0 0 0 full step
* 0 0 1 1/2 step
* 0 1 0 1/4 step
* 0 1 1 1/8 step
* 1 0 0 1/16 step
* 1 0 1 1/32 step
* 1 1 0 1/128 step
* 1 1 1 1/256 step
*/
void setup() {
// put your setup code here, to run once:
pinMode(PIN_EN, OUTPUT);
pinMode(PIN_STEP, OUTPUT);
pinMode(PIN_DIR, OUTPUT);
delay(500);
digitalWrite(PIN_MS0, HIGH);
digitalWrite(PIN_MS1, HIGH);
digitalWrite(PIN_MS2, HIGH);
digitalWrite(PIN_EN, HIGH);
digitalWrite(PIN_DIR, LOW);
digitalWrite(PIN_RST, HIGH);
Serial.begin(9600);
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("時計回り");
digitalWrite(PIN_DIR, LOW);
for (int i = 0; i < reductionratio; i++) {
for (int j = 0; j < stepsPerRevolution; j++) {
for (int k = 0; k < microstep; k++) {
digitalWrite(PIN_STEP, HIGH);
delayMicroseconds(DELAY);
digitalWrite(PIN_STEP, LOW);
delayMicroseconds(DELAY);
}
}
}
delay(1000);
Serial.println("反時計回り");
digitalWrite(PIN_DIR, HIGH);
for (int i = 0; i < reductionratio; i++) {
for (int j = 0; j < stepsPerRevolution; j++) {
for (int k = 0; k < microstep; k++) {
digitalWrite(PIN_STEP, HIGH);
delayMicroseconds(DELAY);
digitalWrite(PIN_STEP, LOW);
delayMicroseconds(DELAY);
}
}
}
delay(1000);
}
- UNL2003
参照:http://qqtrading.com.my/stepper-motor-driver-unipolar-bipolar-module-uln2003
- A4988
ドライバ名:
設定:ピン3本
マイクロステップ:1/16
制御入力:回転方向(DIR)、クロック(STEP)
参照:https://www.switch-science.com/products/582
参照:https://iot.keicode.com/arduino/arduino-stepper-motor-a4988.php
- TMC2209
設定:ピン3本
マイクロステップ:1/16
制御入力:回転方向(DIR)、クロック(STEP)
参照:https://www.switch-science.com/products/582
参照:https://iot.keicode.com/arduino/arduino-stepper-motor-a4988.php