Library for STMicroelectronics dSPIN L6470 stepper driver. "daisy-chain" supported.

Dependents:   L6470_daisy_chain l6470

Revision:
0:e1964b6e160c
Child:
1:db64ad30b4b3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/L6470SDC.h	Sat May 30 14:32:48 2015 +0000
@@ -0,0 +1,184 @@
+#include "mbed.h"
+
+#ifndef L6470SDC_H
+#define L6470SDC_H
+
+//デバッグモード(GetParamやSetParamの値をシリアル出力する)
+//ONにするとそれなりに動作が遅くなる
+//デバッグモードOFF:コメントアウトする
+//#define DEBUG_L6470SDC
+
+//L6470のSPI通信のクロック周波数(1MHz以上、5MHz未満であること)
+#define L6470_SPI_FREQ 4960000
+
+#define CMD_NOP 0x0
+#define CMD_SETPARAM 0x00
+#define CMD_GETPARAM 0x20
+#define CMD_RUN_PLUS 0x51
+#define CMD_RUN_MINUS 0x50
+#define CMD_STEP_PLUS 0x59
+#define CMD_STEP_MINUS 0x58
+#define CMD_ADDSTEP_PLUS 0x41
+#define CMD_ADDSTEP_MINUS 0x40
+#define CMD_GOTO 0x60
+#define CMD_GOTO_DIR_PLUS 0x69
+#define CMD_GOTO_DIR_MINUS 0x68
+#define CMD_GO_UNTIL_PLUS 0x83
+#define CMD_GO_UNTIL_MINUS 0x82
+#define CMD_RELEASE_SW_PLUS 0x93
+#define CMD_RELEASE_SW_MINUS 0x92
+#define CMD_GO_HOME 0x70
+#define CMD_GO_MARK 0x78
+#define CMD_RESET_POS 0xD8
+#define CMD_RESET_DEVICE 0xC0
+#define CMD_SOFT_STOP 0xB0
+#define CMD_HARD_STOP 0xB8
+#define CMD_SOFT_HIZ 0xA0
+#define CMD_HARD_HIZ 0xA8
+#define CMD_GET_STATUS 0xD0
+
+#define REG_NOTHING 0x0
+#define REG_ABS_POS 0x01
+#define REG_EL_POS 0x02
+#define REG_MARK 0x03
+#define REG_SPEED 0x04
+#define REG_ACC 0x05
+#define REG_DEC 0x06
+#define REG_MAX_SPEED 0x07
+#define REG_MIN_SPEED 0x08
+#define REG_KVAL_HOLD 0x09
+#define REG_KVAL_RUN 0x0A
+#define REG_KVAL_ACC 0x0B
+#define REG_KVAL_DEC 0x0C
+#define REG_INT_SPD 0x0D
+#define REG_ST_SLP 0x0E
+#define REG_FN_SLP_ACC 0x0F
+#define REG_FN_SLP_DEC 0x10
+#define REG_K_THERM 0x11
+#define REG_ADC_OUT 0x12
+#define REG_OCD_TH 0x13
+#define REG_STALL_TH 0x14
+#define REG_FS_SPD 0x15
+#define REG_STEP_MODE 0x16
+#define REG_ALARM_EN 0x17
+#define REG_CONFIG 0x18
+#define REG_STATUS 0x19
+
+class L6470SDC{
+public:
+    //充実のコンストラクタ
+    L6470SDC(PinName tx, PinName rx, PinName mosi, PinName miso, PinName sclk, PinName csel);
+    L6470SDC(PinName tx, PinName rx, PinName mosi, PinName miso, PinName sclk, DigitalOut *csel);
+    L6470SDC(Serial *serial, PinName mosi, PinName miso, PinName sclk, PinName csel);
+    L6470SDC(Serial *serial, PinName mosi, PinName miso, PinName sclk, DigitalOut *csel);
+    L6470SDC(Serial *serial, SPI *spi, PinName csel);
+    L6470SDC(Serial *serial, SPI *spi, DigitalOut *csel);
+    L6470SDC(PinName mosi, PinName miso, PinName sclk, PinName csel);
+    L6470SDC(PinName mosi, PinName miso, PinName sclk, DigitalOut *csel);
+    L6470SDC(SPI *spi, PinName csel);
+    L6470SDC(SPI *spi, DigitalOut *csel);
+
+private:
+    Serial *pc;
+    SPI *spi;
+    DigitalOut *cs;
+
+    bool hasSerial;
+    int motor_count;                                                                                //モーターの総数
+
+    void setCmd(int motorNumber, unsigned char cmdAddress, unsigned long value, int bitLen);        //コマンド実行
+    void setParam(int motorNumber, unsigned char regAddress, unsigned long value, int bitLen);      //パラメーター設定
+    unsigned long getParam(int motorNumber, unsigned char regAddress, int bitLen);                  //パラメーター取得
+    void sendCMD(unsigned char cmd);                                                                //コマンド送信
+
+public:
+    void init();                                                                                    //初期化
+    int getMotorCount();                                                                            //モーター個数
+
+    // cmd method ------------------------------------------------------------------------------
+    bool isBusy(int motorNumber);
+    void run(int motorNumber, unsigned long hex_speed, bool isClockwise);
+    void step(int motorNumber, unsigned int count, bool isClockwise);
+    void move(int motorNumber, unsigned long stepsCount, bool isClockwise);
+    void goto1(int motorNumber, unsigned long ABSPos);
+    void goto2(int motorNumber, unsigned long ABSPos, bool isClockwise);
+    void goUntil(int motorNumber, unsigned long hex_speed, bool isClockwise, bool setMark);
+    void releaseSwitch(int motorNumber, bool isClockwise, bool setMark);
+    void home(int motorNumber);
+    void zero(int motorNumber);
+    void gotoMark(int motorNumber);
+    void resetHome(int motorNumber);
+    void resetZero(int motorNumber);
+    void motorReset(int motorNumber);
+    void stop(int motorNumber);
+    void stopImmidiate(int motorNumber);
+    void stop_HighImpedance(int motorNumber);
+    void stopImmidiate_HighImpedance(int motorNumber);
+
+    // calc method -----------------------------------------------------------------------------
+    unsigned long calcSpd(float stepPerSecond);                                                     //回転速度(step/s)をParam形式に変換
+    unsigned short calcAcc(float stepPerSecond_2);                                                  //加速(step/s^2)をParam形式に変換
+    unsigned short calcDec(float stepPerSecond_2);                                                  //減速(step/s^2)をParam形式に変換
+    unsigned short calcMaxSpd(float stepPerSecond);                                                 //最大回転速度(step/s)をParam形式に変換
+    unsigned short calcMinSpd(float stepPerSecond);                                                 //最低回転速度(step/s)をParam形式に変換
+    unsigned short calcIntSpd(float stepPerSecond);                                                 //加減速曲線の切り替わる速度(step/s)をParam形式に変換
+    unsigned short calcFullStepSpd(float stepPerSecond);                                            //フルステップに切り替わる速度(step/s)をParam形式に変換
+
+    // set method ------------------------------------------------------------------------------
+    void setAbsPosition(int motorNumber, unsigned long value);                                      //絶対座標設定
+    void setElecPosition(int motorNumber, unsigned short value);                                    //マイクロステップ位置設定
+    void setMarkPosition(int motorNumber, unsigned long value);                                     //ホームポジション設定
+    void setAcceleration(int motorNumber, unsigned short value);                                    //加速設定
+    void setDeceleration(int motorNumber, unsigned short value);                                    //減速設定
+    void setMaximumSpeed(int motorNumber, unsigned short value);                                    //最大回転速度設定
+    void setMinimumSpeed(int motorNumber, unsigned short value);                                    //最低回転速度設定(普通はゼロ)
+    void setHoldingKVAL(int motorNumber, unsigned char value);                                      //モーター停止中の電圧
+    void setRunningKVAL(int motorNumber, unsigned char value);                                      //モーター駆動中の電圧
+    void setAccelerationKVAL(int motorNumber, unsigned char value);                                 //モーター加速中の電圧
+    void setDecelerationKVAL(int motorNumber, unsigned char value);                                 //モーター減速中の電圧
+    void setKVAL(                                                                                   //モーターの電圧(一度に設定)
+        int motorNumber,
+        unsigned char holdVal, unsigned char runVal,
+        unsigned char accVal, unsigned char decVal
+    );
+    void setInterpolateSpeed(int motorNumber, unsigned short value);                                //加減速補間を開始するスピード
+    void setInterpolateSlope(int motorNumber, unsigned char value);                                 //加減速補間の傾き
+    void setAccSlopeFinal(int motorNumber, unsigned char value);                                    //加速最終時の補間の傾き
+    void setDecSlopeFinal(int motorNumber, unsigned char value);                                    //減速最終時の補間の傾き
+    void setThermoCorrect(int motorNumber, unsigned char value);                                    //高温時の補正
+    void setOCThreshold(int motorNumber, unsigned char value);                                      //オーバーカレントの電流閾値
+    void setStallThreshold(int motorNumber, unsigned char value);                                   //ストールの電流閾値
+    void setFSSpeed(int motorNumber, unsigned short value);                                         //フルステップ駆動に切り替えるスピード
+    void setStepMode(int motorNumber, unsigned char value);                                         //マイクロステッピングモード指定
+    void setAlermEnable(int motorNumber, unsigned char value);                                      //アラームの有効無効
+    void setSystemConfig(int motorNumber, unsigned short value);                                    //ドライバシステム設定
+
+    // get method ------------------------------------------------------------------------------
+    unsigned long getSpeed(int motorNumber);                                                        //現在の回転スピード
+    unsigned short getADC(int motorNumber);                                                         //ADCの取得
+    unsigned short getStatus(int motorNumber);                                                      //ステータス読み取り
+    unsigned long getAbsPosition(int motorNumber);                                                  //絶対座標
+    unsigned short getElecPosition(int motorNumber);                                                //マイクロステップ位置
+    unsigned long getMarkPosition(int motorNumber);                                                 //ホームポジション
+    unsigned short getAcceleration(int motorNumber);                                                //加速
+    unsigned short getDeceleration(int motorNumber);                                                //減速
+    unsigned short getMaximumSpeed(int motorNumber);                                                //最大回転速度
+    unsigned short getMinimumSpeed(int motorNumber);                                                //最低回転速度(普通はゼロ)
+    unsigned char getHoldingKVAL(int motorNumber);                                                  //モーター停止中の電圧
+    unsigned char getRunningKVAL(int motorNumber);                                                  //モーター駆動中の電圧
+    unsigned char getAccelerationKVAL(int motorNumber);                                             //モーター加速中の電圧
+    unsigned char getDecelerationKVAL(int motorNumber);                                             //モーター減速中の電圧
+    unsigned short getInterpolateSpeed(int motorNumber);                                            //加減速補間を開始するスピード
+    unsigned char getInterpolateSlope(int motorNumber);                                             //加減速補間の傾き
+    unsigned char getAccSlopeFinal(int motorNumber);                                                //加速最終時の補間の傾き
+    unsigned char getDecSlopeFinal(int motorNumber);                                                //減速最終時の補間の傾き
+    unsigned char getThermoCorrect(int motorNumber);                                                //高温時の補正
+    unsigned char getOCThreshold(int motorNumber);                                                  //オーバーカレントの電流閾値
+    unsigned char getStallThreshold(int motorNumber);                                               //ストールの電流閾値
+    unsigned short getFSSpeed(int motorNumber);                                                     //フルステップ駆動に切り替えるスピード
+    unsigned char getStepMode(int motorNumber);                                                     //マイクロステッピングモード
+    unsigned char getAlermEnable(int motorNumber);                                                  //アラームの有効無効
+    unsigned short getSystemConfig(int motorNumber);                                                //ドライバシステム設定
+};
+
+#endif