Library for STMicroelectronics dSPIN L6470 stepper driver. "daisy-chain" supported.
Dependents: L6470_daisy_chain l6470
Diff: L6470SDC.h
- 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