Library for STMicroelectronics dSPIN L6470 stepper driver. "daisy-chain" supported.
Dependents: L6470_daisy_chain l6470
L6470SDC.h
- Committer:
- Yajirushi
- Date:
- 2015-05-30
- Revision:
- 0:e1964b6e160c
- Child:
- 1:db64ad30b4b3
File content as of revision 0:e1964b6e160c:
#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