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

Dependents:   L6470_daisy_chain l6470

Committer:
Yajirushi
Date:
Tue Jun 09 06:10:11 2015 +0000
Revision:
2:2af83d3ccd97
Parent:
1:db64ad30b4b3
Child:
3:486fb90dc7d5
add comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yajirushi 0:e1964b6e160c 1 #include "mbed.h"
Yajirushi 0:e1964b6e160c 2
Yajirushi 0:e1964b6e160c 3 #ifndef L6470SDC_H
Yajirushi 0:e1964b6e160c 4 #define L6470SDC_H
Yajirushi 0:e1964b6e160c 5
Yajirushi 0:e1964b6e160c 6 //デバッグモード(GetParamやSetParamの値をシリアル出力する)
Yajirushi 0:e1964b6e160c 7 //ONにするとそれなりに動作が遅くなる
Yajirushi 0:e1964b6e160c 8 //デバッグモードOFF:コメントアウトする
Yajirushi 0:e1964b6e160c 9 //#define DEBUG_L6470SDC
Yajirushi 0:e1964b6e160c 10
Yajirushi 0:e1964b6e160c 11 //L6470のSPI通信のクロック周波数(1MHz以上、5MHz未満であること)
Yajirushi 0:e1964b6e160c 12 #define L6470_SPI_FREQ 4960000
Yajirushi 0:e1964b6e160c 13
Yajirushi 0:e1964b6e160c 14 #define CMD_NOP 0x0
Yajirushi 0:e1964b6e160c 15 #define CMD_SETPARAM 0x00
Yajirushi 0:e1964b6e160c 16 #define CMD_GETPARAM 0x20
Yajirushi 0:e1964b6e160c 17 #define CMD_RUN_PLUS 0x51
Yajirushi 0:e1964b6e160c 18 #define CMD_RUN_MINUS 0x50
Yajirushi 0:e1964b6e160c 19 #define CMD_STEP_PLUS 0x59
Yajirushi 0:e1964b6e160c 20 #define CMD_STEP_MINUS 0x58
Yajirushi 0:e1964b6e160c 21 #define CMD_ADDSTEP_PLUS 0x41
Yajirushi 0:e1964b6e160c 22 #define CMD_ADDSTEP_MINUS 0x40
Yajirushi 0:e1964b6e160c 23 #define CMD_GOTO 0x60
Yajirushi 0:e1964b6e160c 24 #define CMD_GOTO_DIR_PLUS 0x69
Yajirushi 0:e1964b6e160c 25 #define CMD_GOTO_DIR_MINUS 0x68
Yajirushi 0:e1964b6e160c 26 #define CMD_GO_UNTIL_PLUS 0x83
Yajirushi 0:e1964b6e160c 27 #define CMD_GO_UNTIL_MINUS 0x82
Yajirushi 0:e1964b6e160c 28 #define CMD_RELEASE_SW_PLUS 0x93
Yajirushi 0:e1964b6e160c 29 #define CMD_RELEASE_SW_MINUS 0x92
Yajirushi 0:e1964b6e160c 30 #define CMD_GO_HOME 0x70
Yajirushi 0:e1964b6e160c 31 #define CMD_GO_MARK 0x78
Yajirushi 0:e1964b6e160c 32 #define CMD_RESET_POS 0xD8
Yajirushi 0:e1964b6e160c 33 #define CMD_RESET_DEVICE 0xC0
Yajirushi 0:e1964b6e160c 34 #define CMD_SOFT_STOP 0xB0
Yajirushi 0:e1964b6e160c 35 #define CMD_HARD_STOP 0xB8
Yajirushi 0:e1964b6e160c 36 #define CMD_SOFT_HIZ 0xA0
Yajirushi 0:e1964b6e160c 37 #define CMD_HARD_HIZ 0xA8
Yajirushi 0:e1964b6e160c 38 #define CMD_GET_STATUS 0xD0
Yajirushi 0:e1964b6e160c 39
Yajirushi 0:e1964b6e160c 40 #define REG_NOTHING 0x0
Yajirushi 0:e1964b6e160c 41 #define REG_ABS_POS 0x01
Yajirushi 0:e1964b6e160c 42 #define REG_EL_POS 0x02
Yajirushi 0:e1964b6e160c 43 #define REG_MARK 0x03
Yajirushi 0:e1964b6e160c 44 #define REG_SPEED 0x04
Yajirushi 0:e1964b6e160c 45 #define REG_ACC 0x05
Yajirushi 0:e1964b6e160c 46 #define REG_DEC 0x06
Yajirushi 0:e1964b6e160c 47 #define REG_MAX_SPEED 0x07
Yajirushi 0:e1964b6e160c 48 #define REG_MIN_SPEED 0x08
Yajirushi 0:e1964b6e160c 49 #define REG_KVAL_HOLD 0x09
Yajirushi 0:e1964b6e160c 50 #define REG_KVAL_RUN 0x0A
Yajirushi 0:e1964b6e160c 51 #define REG_KVAL_ACC 0x0B
Yajirushi 0:e1964b6e160c 52 #define REG_KVAL_DEC 0x0C
Yajirushi 0:e1964b6e160c 53 #define REG_INT_SPD 0x0D
Yajirushi 0:e1964b6e160c 54 #define REG_ST_SLP 0x0E
Yajirushi 0:e1964b6e160c 55 #define REG_FN_SLP_ACC 0x0F
Yajirushi 0:e1964b6e160c 56 #define REG_FN_SLP_DEC 0x10
Yajirushi 0:e1964b6e160c 57 #define REG_K_THERM 0x11
Yajirushi 0:e1964b6e160c 58 #define REG_ADC_OUT 0x12
Yajirushi 0:e1964b6e160c 59 #define REG_OCD_TH 0x13
Yajirushi 0:e1964b6e160c 60 #define REG_STALL_TH 0x14
Yajirushi 0:e1964b6e160c 61 #define REG_FS_SPD 0x15
Yajirushi 0:e1964b6e160c 62 #define REG_STEP_MODE 0x16
Yajirushi 0:e1964b6e160c 63 #define REG_ALARM_EN 0x17
Yajirushi 0:e1964b6e160c 64 #define REG_CONFIG 0x18
Yajirushi 0:e1964b6e160c 65 #define REG_STATUS 0x19
Yajirushi 0:e1964b6e160c 66
Yajirushi 1:db64ad30b4b3 67 /** Library for STMicroelectronics dSPIN L6470 stepper driver. "daisy-chain" supported.
Yajirushi 1:db64ad30b4b3 68 *
Yajirushi 1:db64ad30b4b3 69 * Example:
Yajirushi 1:db64ad30b4b3 70 * @code
Yajirushi 1:db64ad30b4b3 71 * #include "mbed.h"
Yajirushi 1:db64ad30b4b3 72 * #include "L6470SDC.h"
Yajirushi 1:db64ad30b4b3 73 *
Yajirushi 1:db64ad30b4b3 74 * L6470SDC l6470(USBTX, USBRX, SPI_MOSI, SPI_MISO, SPI_SCK, D10);
Yajirushi 1:db64ad30b4b3 75 *
Yajirushi 1:db64ad30b4b3 76 * int main() {
Yajirushi 1:db64ad30b4b3 77 * //initialize
Yajirushi 1:db64ad30b4b3 78 * l6470.init();
Yajirushi 1:db64ad30b4b3 79 *
Yajirushi 1:db64ad30b4b3 80 * //set maximum speed
Yajirushi 1:db64ad30b4b3 81 * l6470.setMaximumSpeed(1, l6470.calcMaxSpd(100));
Yajirushi 1:db64ad30b4b3 82 *
Yajirushi 1:db64ad30b4b3 83 * //run 300step/s,clockwise
Yajirushi 1:db64ad30b4b3 84 * l6470.run(1, l6470.calcSpd(300), true);
Yajirushi 1:db64ad30b4b3 85 * wait(5.0);
Yajirushi 1:db64ad30b4b3 86 *
Yajirushi 1:db64ad30b4b3 87 * //motor stop
Yajirushi 1:db64ad30b4b3 88 * l6470.stop(1);
Yajirushi 1:db64ad30b4b3 89 *
Yajirushi 1:db64ad30b4b3 90 * //motor return home position.
Yajirushi 1:db64ad30b4b3 91 * l6470.home(1);
Yajirushi 1:db64ad30b4b3 92 * }
Yajirushi 1:db64ad30b4b3 93 * @endcode
Yajirushi 1:db64ad30b4b3 94 */
Yajirushi 0:e1964b6e160c 95 class L6470SDC{
Yajirushi 0:e1964b6e160c 96 public:
Yajirushi 1:db64ad30b4b3 97 /** Constructor:(Serial, SPI, CS) PinName
Yajirushi 1:db64ad30b4b3 98 *
Yajirushi 1:db64ad30b4b3 99 * @param tx Serial USB_TX PinName
Yajirushi 1:db64ad30b4b3 100 * @param rx Serial USB_RX PinName
Yajirushi 1:db64ad30b4b3 101 * @param mosi SPI Master-out PinName
Yajirushi 1:db64ad30b4b3 102 * @param miso SPI Slave-out PinName
Yajirushi 1:db64ad30b4b3 103 * @param sclk SPI Clock PinName
Yajirushi 1:db64ad30b4b3 104 * @param csel SPI ChipSelect PinName
Yajirushi 1:db64ad30b4b3 105 */
Yajirushi 0:e1964b6e160c 106 L6470SDC(PinName tx, PinName rx, PinName mosi, PinName miso, PinName sclk, PinName csel);
Yajirushi 1:db64ad30b4b3 107
Yajirushi 1:db64ad30b4b3 108 /** Constructor:(Serial, SPI, CS) PinName & DigitalOut*
Yajirushi 1:db64ad30b4b3 109 *
Yajirushi 1:db64ad30b4b3 110 * @param tx Serial USB_TX PinName
Yajirushi 1:db64ad30b4b3 111 * @param rx Serial USB_RX PinName
Yajirushi 1:db64ad30b4b3 112 * @param mosi SPI Master-out PinName
Yajirushi 1:db64ad30b4b3 113 * @param miso SPI Slave-out PinName
Yajirushi 1:db64ad30b4b3 114 * @param sclk SPI Clock PinName
Yajirushi 1:db64ad30b4b3 115 * @param *csel SPI ChipSelect
Yajirushi 1:db64ad30b4b3 116 * Example:
Yajirushi 1:db64ad30b4b3 117 * DigitalOut my_cs(D10);
Yajirushi 1:db64ad30b4b3 118 * L6470SDC stepper(USBTX, USBRX, SPI_MOSI, SPI_MISO, SPI_SCLK, &my_cs);
Yajirushi 1:db64ad30b4b3 119 */
Yajirushi 0:e1964b6e160c 120 L6470SDC(PinName tx, PinName rx, PinName mosi, PinName miso, PinName sclk, DigitalOut *csel);
Yajirushi 1:db64ad30b4b3 121
Yajirushi 1:db64ad30b4b3 122 /** Constructor:(Serial, SPI, CS) Serial* & PinName
Yajirushi 1:db64ad30b4b3 123 *
Yajirushi 1:db64ad30b4b3 124 * @param *serial Serial
Yajirushi 1:db64ad30b4b3 125 * @param mosi SPI Master-out PinName
Yajirushi 1:db64ad30b4b3 126 * @param miso SPI Slave-out PinName
Yajirushi 1:db64ad30b4b3 127 * @param sclk SPI Clock PinName
Yajirushi 1:db64ad30b4b3 128 * @param csel SPI ChipSelect PinName
Yajirushi 1:db64ad30b4b3 129 * Example:
Yajirushi 1:db64ad30b4b3 130 * Serial usb_serial(USBTX, USBRX);
Yajirushi 1:db64ad30b4b3 131 * L6470SDC stepper(&usb_serial, SPI_MOSI, SPI_MISO, SPI_SCLK, D10);
Yajirushi 1:db64ad30b4b3 132 */
Yajirushi 0:e1964b6e160c 133 L6470SDC(Serial *serial, PinName mosi, PinName miso, PinName sclk, PinName csel);
Yajirushi 1:db64ad30b4b3 134
Yajirushi 1:db64ad30b4b3 135 /** Constructor:(Serial, SPI, CS) Serial* & PinName & DigitalOut*
Yajirushi 1:db64ad30b4b3 136 *
Yajirushi 1:db64ad30b4b3 137 * @param *serial Serial
Yajirushi 1:db64ad30b4b3 138 * @param mosi SPI Master-out PinName
Yajirushi 1:db64ad30b4b3 139 * @param miso SPI Slave-out PinName
Yajirushi 1:db64ad30b4b3 140 * @param sclk SPI Clock PinName
Yajirushi 1:db64ad30b4b3 141 * @param *csel SPI ChipSelect
Yajirushi 1:db64ad30b4b3 142 * Example:
Yajirushi 1:db64ad30b4b3 143 * Serial usb_serial(USBTX, USBRX);
Yajirushi 1:db64ad30b4b3 144 * DigitalOut my_cs(D10);
Yajirushi 1:db64ad30b4b3 145 * L6470SDC stepper(&usb_serial, SPI_MOSI, SPI_MISO, SPI_SCLK, &my_cs);
Yajirushi 1:db64ad30b4b3 146 */
Yajirushi 0:e1964b6e160c 147 L6470SDC(Serial *serial, PinName mosi, PinName miso, PinName sclk, DigitalOut *csel);
Yajirushi 1:db64ad30b4b3 148
Yajirushi 1:db64ad30b4b3 149 /** Constructor:(Serial, SPI, CS) Serial* & SPI* & PinName
Yajirushi 1:db64ad30b4b3 150 *
Yajirushi 1:db64ad30b4b3 151 * @param *serial Serial
Yajirushi 1:db64ad30b4b3 152 * @param *spi SPI
Yajirushi 1:db64ad30b4b3 153 * @param csel SPI ChipSelect PinName
Yajirushi 1:db64ad30b4b3 154 * Example:
Yajirushi 1:db64ad30b4b3 155 * Serial usb_serial(USBTX, USBRX);
Yajirushi 1:db64ad30b4b3 156 * SPI my_spi(SPI_MOSI, SPI_MISO, SPI_SCLK);
Yajirushi 1:db64ad30b4b3 157 * L6470SDC stepper(&usb_serial, &my_spi, D10);
Yajirushi 1:db64ad30b4b3 158 */
Yajirushi 0:e1964b6e160c 159 L6470SDC(Serial *serial, SPI *spi, PinName csel);
Yajirushi 1:db64ad30b4b3 160
Yajirushi 1:db64ad30b4b3 161 /** Constructor:(Serial, SPI, CS) Serial* & SPI* & DigitalOut*
Yajirushi 1:db64ad30b4b3 162 *
Yajirushi 1:db64ad30b4b3 163 * @param *serial Serial
Yajirushi 1:db64ad30b4b3 164 * @param *spi SPI
Yajirushi 1:db64ad30b4b3 165 * @param *csel SPI ChipSelect
Yajirushi 1:db64ad30b4b3 166 * Example:
Yajirushi 1:db64ad30b4b3 167 * Serial usb_serial(USBTX, USBRX);
Yajirushi 1:db64ad30b4b3 168 * SPI my_spi(SPI_MOSI, SPI_MISO, SPI_SCLK);
Yajirushi 1:db64ad30b4b3 169 * DigitalOut my_cs(D10);
Yajirushi 1:db64ad30b4b3 170 * L6470SDC stepper(&usb_serial, &my_spi, &my_cs);
Yajirushi 1:db64ad30b4b3 171 */
Yajirushi 0:e1964b6e160c 172 L6470SDC(Serial *serial, SPI *spi, DigitalOut *csel);
Yajirushi 1:db64ad30b4b3 173
Yajirushi 1:db64ad30b4b3 174 /** Constructor: without Debug Serial (SPI, CS) PinName
Yajirushi 1:db64ad30b4b3 175 *
Yajirushi 1:db64ad30b4b3 176 * @param mosi SPI Master-out PinName
Yajirushi 1:db64ad30b4b3 177 * @param miso SPI Slave-out PinName
Yajirushi 1:db64ad30b4b3 178 * @param sclk SPI Clock PinName
Yajirushi 1:db64ad30b4b3 179 * @param csel SPI ChipSelect PinName
Yajirushi 1:db64ad30b4b3 180 */
Yajirushi 0:e1964b6e160c 181 L6470SDC(PinName mosi, PinName miso, PinName sclk, PinName csel);
Yajirushi 1:db64ad30b4b3 182
Yajirushi 1:db64ad30b4b3 183 /** Constructor: without Debug Serial (SPI, CS) PinName & DigitalOut*
Yajirushi 1:db64ad30b4b3 184 *
Yajirushi 1:db64ad30b4b3 185 * @param mosi SPI Master-out PinName
Yajirushi 1:db64ad30b4b3 186 * @param miso SPI Slave-out PinName
Yajirushi 1:db64ad30b4b3 187 * @param sclk SPI Clock PinName
Yajirushi 1:db64ad30b4b3 188 * @param *csel SPI ChipSelect
Yajirushi 1:db64ad30b4b3 189 * Example:
Yajirushi 1:db64ad30b4b3 190 * DigitalOut cs1(D10);
Yajirushi 1:db64ad30b4b3 191 * L6470SDC stepper(SPI_MOSI, SPI_MISO, SPI_SCLK, &cs1);
Yajirushi 1:db64ad30b4b3 192 */
Yajirushi 0:e1964b6e160c 193 L6470SDC(PinName mosi, PinName miso, PinName sclk, DigitalOut *csel);
Yajirushi 1:db64ad30b4b3 194
Yajirushi 1:db64ad30b4b3 195 /** Constructor: without Debug Serial (SPI, CS) SPI* & PinName
Yajirushi 1:db64ad30b4b3 196 *
Yajirushi 1:db64ad30b4b3 197 * @param *spi SPI
Yajirushi 1:db64ad30b4b3 198 * @param csel SPI ChipSelect PinName
Yajirushi 1:db64ad30b4b3 199 * Example:
Yajirushi 1:db64ad30b4b3 200 * SPI spi1(SPI_MOSI, SPI_MISO, SPI_SCLK);
Yajirushi 1:db64ad30b4b3 201 * L6470SDC stepper(&spi1, D10);
Yajirushi 1:db64ad30b4b3 202 */
Yajirushi 0:e1964b6e160c 203 L6470SDC(SPI *spi, PinName csel);
Yajirushi 1:db64ad30b4b3 204
Yajirushi 1:db64ad30b4b3 205 /** Constructor: without Debug Serial (SPI, CS) SPI* & DigitalOut*
Yajirushi 1:db64ad30b4b3 206 *
Yajirushi 1:db64ad30b4b3 207 * @param *spi SPI
Yajirushi 1:db64ad30b4b3 208 * @param *csel SPI ChipSelect
Yajirushi 1:db64ad30b4b3 209 * Example:
Yajirushi 1:db64ad30b4b3 210 * SPI spi1(SPI_MOSI, SPI_MISO, SPI_SCLK);
Yajirushi 1:db64ad30b4b3 211 * DigitalOut cs1(D10);
Yajirushi 1:db64ad30b4b3 212 * L6470SDC stepper(&spi1, &cs1);
Yajirushi 1:db64ad30b4b3 213 */
Yajirushi 0:e1964b6e160c 214 L6470SDC(SPI *spi, DigitalOut *csel);
Yajirushi 0:e1964b6e160c 215
Yajirushi 0:e1964b6e160c 216 private:
Yajirushi 0:e1964b6e160c 217 Serial *pc;
Yajirushi 0:e1964b6e160c 218 SPI *spi;
Yajirushi 0:e1964b6e160c 219 DigitalOut *cs;
Yajirushi 0:e1964b6e160c 220
Yajirushi 0:e1964b6e160c 221 bool hasSerial;
Yajirushi 1:db64ad30b4b3 222 int motor_count;
Yajirushi 0:e1964b6e160c 223
Yajirushi 1:db64ad30b4b3 224 void setCmd(int motorNumber, unsigned char cmdAddress, unsigned long value, int bitLen);
Yajirushi 1:db64ad30b4b3 225 void setParam(int motorNumber, unsigned char regAddress, unsigned long value, int bitLen);
Yajirushi 1:db64ad30b4b3 226 unsigned long getParam(int motorNumber, unsigned char regAddress, int bitLen);
Yajirushi 1:db64ad30b4b3 227 void sendCMD(unsigned char cmd);
Yajirushi 0:e1964b6e160c 228
Yajirushi 0:e1964b6e160c 229 public:
Yajirushi 1:db64ad30b4b3 230 /** Initialize L6470
Yajirushi 1:db64ad30b4b3 231 *
Yajirushi 1:db64ad30b4b3 232 * @param initSPI If initialize SPI parameters.(e.g. clockspeed and mode) = true(default)
Yajirushi 1:db64ad30b4b3 233 */
Yajirushi 1:db64ad30b4b3 234 void init(bool initSPI = true);
Yajirushi 1:db64ad30b4b3 235
Yajirushi 1:db64ad30b4b3 236 /** Get connected(daisy-chained) motor count.
Yajirushi 1:db64ad30b4b3 237 *
Yajirushi 1:db64ad30b4b3 238 * @returns Connected(daisy-chained) motor count. If not using daisy-chain, return always 1. maybe...
Yajirushi 1:db64ad30b4b3 239 */
Yajirushi 1:db64ad30b4b3 240 int getMotorCount();
Yajirushi 0:e1964b6e160c 241
Yajirushi 2:2af83d3ccd97 242 /** Get motor Busy-flag status
Yajirushi 1:db64ad30b4b3 243 *
Yajirushi 1:db64ad30b4b3 244 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 1:db64ad30b4b3 245 * @returns Busy status.(false = Busy-flag 0, true = Busy-flag 1)
Yajirushi 1:db64ad30b4b3 246 */
Yajirushi 0:e1964b6e160c 247 bool isBusy(int motorNumber);
Yajirushi 1:db64ad30b4b3 248
Yajirushi 2:2af83d3ccd97 249 /** Run motor rotate
Yajirushi 1:db64ad30b4b3 250 *
Yajirushi 1:db64ad30b4b3 251 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 1:db64ad30b4b3 252 * @param hex_speed Motor rotate speed(hex_value Step/s). -> please use "calcSpd(stepPerSecond)" method.
Yajirushi 2:2af83d3ccd97 253 * @param isClockwise Rotate direction. true = clockwise. false = counter-clockwise.
Yajirushi 2:2af83d3ccd97 254 * Example:
Yajirushi 2:2af83d3ccd97 255 * unsigned long calculatedValue = motor.calcSpd(200);
Yajirushi 2:2af83d3ccd97 256 * motor.run(1, calculatedValue, true); //200step/s, clockwise
Yajirushi 1:db64ad30b4b3 257 */
Yajirushi 0:e1964b6e160c 258 void run(int motorNumber, unsigned long hex_speed, bool isClockwise);
Yajirushi 1:db64ad30b4b3 259
Yajirushi 2:2af83d3ccd97 260 /** Run motor steps
Yajirushi 2:2af83d3ccd97 261 *
Yajirushi 2:2af83d3ccd97 262 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 263 * @param count Steps count. If using Microstep-mode, "count" must be multiplied by Microstep-value.
Yajirushi 2:2af83d3ccd97 264 * @param isClockwise Rotate direction. true = clockwise. false = counter-clockwise.
Yajirushi 2:2af83d3ccd97 265 * Example:
Yajirushi 2:2af83d3ccd97 266 * motor.stop(1);
Yajirushi 2:2af83d3ccd97 267 * motor.setStepMode(1, 0x07); //set microstep-mode 0x07 = 1/128 microstep.
Yajirushi 2:2af83d3ccd97 268 * motor.step(1, 256, false); //(256/128)=2 step, counter cloclwise.
Yajirushi 2:2af83d3ccd97 269 */
Yajirushi 0:e1964b6e160c 270 void step(int motorNumber, unsigned int count, bool isClockwise);
Yajirushi 2:2af83d3ccd97 271
Yajirushi 2:2af83d3ccd97 272 /** Run motor move
Yajirushi 2:2af83d3ccd97 273 *
Yajirushi 2:2af83d3ccd97 274 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 275 * @param stepsCount Steps count. If using Microstep-mode, "stepsCount" must be multiplied by Microstep-value.
Yajirushi 2:2af83d3ccd97 276 * @param isClockwise Rotate direction. true = clockwise. false = counter-clockwise.
Yajirushi 2:2af83d3ccd97 277 * If less than 5step -> Please use the "step(int motorNumber, unsigned int count, bool isClockwise)".
Yajirushi 2:2af83d3ccd97 278 * If greater than 5step -> Please use this method.
Yajirushi 2:2af83d3ccd97 279 */
Yajirushi 0:e1964b6e160c 280 void move(int motorNumber, unsigned long stepsCount, bool isClockwise);
Yajirushi 2:2af83d3ccd97 281
Yajirushi 2:2af83d3ccd97 282 /** Go to motor ABS position (shortest path)
Yajirushi 2:2af83d3ccd97 283 *
Yajirushi 2:2af83d3ccd97 284 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 285 * @param ABSPos Motor Absolute position.
Yajirushi 2:2af83d3ccd97 286 * CAUTION: This method a motion to ABS position through the shortest path. Rotate direction is not constant.
Yajirushi 2:2af83d3ccd97 287 */
Yajirushi 0:e1964b6e160c 288 void goto1(int motorNumber, unsigned long ABSPos);
Yajirushi 2:2af83d3ccd97 289
Yajirushi 2:2af83d3ccd97 290 /** Go to motor ABS position (Specify the rotate direction)
Yajirushi 2:2af83d3ccd97 291 *
Yajirushi 2:2af83d3ccd97 292 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 293 * @param ABSPos Motor Absolute position.
Yajirushi 2:2af83d3ccd97 294 * @param isClockwise Rotate direction. true = clockwise. false = counter-clockwise.
Yajirushi 2:2af83d3ccd97 295 */
Yajirushi 0:e1964b6e160c 296 void goto2(int motorNumber, unsigned long ABSPos, bool isClockwise);
Yajirushi 2:2af83d3ccd97 297
Yajirushi 2:2af83d3ccd97 298 /** ???Run motor rotate. Until external switch status change???
Yajirushi 2:2af83d3ccd97 299 *
Yajirushi 2:2af83d3ccd97 300 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 301 * @param hex_speed Motor rotate speed(hex_value Step/s). -> please use "calcSpd(stepPerSecond)" method.
Yajirushi 2:2af83d3ccd97 302 * @param isClockwise Rotate direction. true = clockwise. false = counter-clockwise.
Yajirushi 2:2af83d3ccd97 303 * @param setMark External switch status?...??.. Sorry... I could not understand. Please see L6470 datasheet.
Yajirushi 2:2af83d3ccd97 304 */
Yajirushi 0:e1964b6e160c 305 void goUntil(int motorNumber, unsigned long hex_speed, bool isClockwise, bool setMark);
Yajirushi 2:2af83d3ccd97 306
Yajirushi 2:2af83d3ccd97 307 /** ???Release external switch???
Yajirushi 2:2af83d3ccd97 308 *
Yajirushi 2:2af83d3ccd97 309 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 310 * @param isClockwise Rotate direction. true = clockwise. false = counter-clockwise.
Yajirushi 2:2af83d3ccd97 311 * @param setMark External switch status?...??.. Sorry... I could not understand. Please see L6470 datasheet.
Yajirushi 2:2af83d3ccd97 312 */
Yajirushi 0:e1964b6e160c 313 void releaseSwitch(int motorNumber, bool isClockwise, bool setMark);
Yajirushi 2:2af83d3ccd97 314
Yajirushi 2:2af83d3ccd97 315 /** Go to motor home-position
Yajirushi 2:2af83d3ccd97 316 *
Yajirushi 2:2af83d3ccd97 317 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 318 */
Yajirushi 0:e1964b6e160c 319 void home(int motorNumber);
Yajirushi 2:2af83d3ccd97 320
Yajirushi 2:2af83d3ccd97 321 /** Go to motor home-position [alias: home(int motorNumber)]
Yajirushi 2:2af83d3ccd97 322 *
Yajirushi 2:2af83d3ccd97 323 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 324 */
Yajirushi 0:e1964b6e160c 325 void zero(int motorNumber);
Yajirushi 2:2af83d3ccd97 326
Yajirushi 2:2af83d3ccd97 327 /** Go to motor marked-position
Yajirushi 2:2af83d3ccd97 328 *
Yajirushi 2:2af83d3ccd97 329 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 330 * Mark Position: -> Please use setMarkPosition(int motorNumber, unsigned long value).
Yajirushi 2:2af83d3ccd97 331 */
Yajirushi 0:e1964b6e160c 332 void gotoMark(int motorNumber);
Yajirushi 2:2af83d3ccd97 333
Yajirushi 2:2af83d3ccd97 334 /** Reset the ABS_POS register to zero (ABS_POS zero = home-position)
Yajirushi 2:2af83d3ccd97 335 *
Yajirushi 2:2af83d3ccd97 336 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 337 */
Yajirushi 0:e1964b6e160c 338 void resetHome(int motorNumber);
Yajirushi 2:2af83d3ccd97 339
Yajirushi 2:2af83d3ccd97 340 /** Reset the ABS_POS register to zero [alias: resetHome(int motorNumber)]
Yajirushi 2:2af83d3ccd97 341 *
Yajirushi 2:2af83d3ccd97 342 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 343 */
Yajirushi 0:e1964b6e160c 344 void resetZero(int motorNumber);
Yajirushi 2:2af83d3ccd97 345
Yajirushi 2:2af83d3ccd97 346 /** Reset motor device.(software reset)
Yajirushi 2:2af83d3ccd97 347 *
Yajirushi 2:2af83d3ccd97 348 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 349 */
Yajirushi 0:e1964b6e160c 350 void motorReset(int motorNumber);
Yajirushi 2:2af83d3ccd97 351
Yajirushi 2:2af83d3ccd97 352 /** Stop rotation (soft-stop)
Yajirushi 2:2af83d3ccd97 353 *
Yajirushi 2:2af83d3ccd97 354 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 355 */
Yajirushi 0:e1964b6e160c 356 void stop(int motorNumber);
Yajirushi 2:2af83d3ccd97 357
Yajirushi 2:2af83d3ccd97 358 /** Stop rotation. Ignore deceleration (hard-stop)
Yajirushi 2:2af83d3ccd97 359 *
Yajirushi 2:2af83d3ccd97 360 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 361 */
Yajirushi 0:e1964b6e160c 362 void stopImmidiate(int motorNumber);
Yajirushi 2:2af83d3ccd97 363
Yajirushi 2:2af83d3ccd97 364 /** Stop rotation (soft-stop) state sets HighImpedance.
Yajirushi 2:2af83d3ccd97 365 *
Yajirushi 2:2af83d3ccd97 366 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 367 */
Yajirushi 0:e1964b6e160c 368 void stop_HighImpedance(int motorNumber);
Yajirushi 2:2af83d3ccd97 369
Yajirushi 2:2af83d3ccd97 370 /** Stop rotation. Ignore deceleration (hard-stop) state sets HighImpedance.
Yajirushi 2:2af83d3ccd97 371 *
Yajirushi 2:2af83d3ccd97 372 * @param motorNumber Chained motor-number. If not using daisy-chain, you must be motorNumber = 1.
Yajirushi 2:2af83d3ccd97 373 */
Yajirushi 0:e1964b6e160c 374 void stopImmidiate_HighImpedance(int motorNumber);
Yajirushi 0:e1964b6e160c 375
Yajirushi 0:e1964b6e160c 376 // calc method -----------------------------------------------------------------------------
Yajirushi 0:e1964b6e160c 377 unsigned long calcSpd(float stepPerSecond); //回転速度(step/s)をParam形式に変換
Yajirushi 0:e1964b6e160c 378 unsigned short calcAcc(float stepPerSecond_2); //加速(step/s^2)をParam形式に変換
Yajirushi 0:e1964b6e160c 379 unsigned short calcDec(float stepPerSecond_2); //減速(step/s^2)をParam形式に変換
Yajirushi 0:e1964b6e160c 380 unsigned short calcMaxSpd(float stepPerSecond); //最大回転速度(step/s)をParam形式に変換
Yajirushi 0:e1964b6e160c 381 unsigned short calcMinSpd(float stepPerSecond); //最低回転速度(step/s)をParam形式に変換
Yajirushi 0:e1964b6e160c 382 unsigned short calcIntSpd(float stepPerSecond); //加減速曲線の切り替わる速度(step/s)をParam形式に変換
Yajirushi 0:e1964b6e160c 383 unsigned short calcFullStepSpd(float stepPerSecond); //フルステップに切り替わる速度(step/s)をParam形式に変換
Yajirushi 0:e1964b6e160c 384
Yajirushi 0:e1964b6e160c 385 // set method ------------------------------------------------------------------------------
Yajirushi 0:e1964b6e160c 386 void setAbsPosition(int motorNumber, unsigned long value); //絶対座標設定
Yajirushi 0:e1964b6e160c 387 void setElecPosition(int motorNumber, unsigned short value); //マイクロステップ位置設定
Yajirushi 0:e1964b6e160c 388 void setMarkPosition(int motorNumber, unsigned long value); //ホームポジション設定
Yajirushi 0:e1964b6e160c 389 void setAcceleration(int motorNumber, unsigned short value); //加速設定
Yajirushi 0:e1964b6e160c 390 void setDeceleration(int motorNumber, unsigned short value); //減速設定
Yajirushi 0:e1964b6e160c 391 void setMaximumSpeed(int motorNumber, unsigned short value); //最大回転速度設定
Yajirushi 0:e1964b6e160c 392 void setMinimumSpeed(int motorNumber, unsigned short value); //最低回転速度設定(普通はゼロ)
Yajirushi 0:e1964b6e160c 393 void setHoldingKVAL(int motorNumber, unsigned char value); //モーター停止中の電圧
Yajirushi 0:e1964b6e160c 394 void setRunningKVAL(int motorNumber, unsigned char value); //モーター駆動中の電圧
Yajirushi 0:e1964b6e160c 395 void setAccelerationKVAL(int motorNumber, unsigned char value); //モーター加速中の電圧
Yajirushi 0:e1964b6e160c 396 void setDecelerationKVAL(int motorNumber, unsigned char value); //モーター減速中の電圧
Yajirushi 0:e1964b6e160c 397 void setKVAL( //モーターの電圧(一度に設定)
Yajirushi 0:e1964b6e160c 398 int motorNumber,
Yajirushi 0:e1964b6e160c 399 unsigned char holdVal, unsigned char runVal,
Yajirushi 0:e1964b6e160c 400 unsigned char accVal, unsigned char decVal
Yajirushi 0:e1964b6e160c 401 );
Yajirushi 0:e1964b6e160c 402 void setInterpolateSpeed(int motorNumber, unsigned short value); //加減速補間を開始するスピード
Yajirushi 0:e1964b6e160c 403 void setInterpolateSlope(int motorNumber, unsigned char value); //加減速補間の傾き
Yajirushi 0:e1964b6e160c 404 void setAccSlopeFinal(int motorNumber, unsigned char value); //加速最終時の補間の傾き
Yajirushi 0:e1964b6e160c 405 void setDecSlopeFinal(int motorNumber, unsigned char value); //減速最終時の補間の傾き
Yajirushi 0:e1964b6e160c 406 void setThermoCorrect(int motorNumber, unsigned char value); //高温時の補正
Yajirushi 0:e1964b6e160c 407 void setOCThreshold(int motorNumber, unsigned char value); //オーバーカレントの電流閾値
Yajirushi 0:e1964b6e160c 408 void setStallThreshold(int motorNumber, unsigned char value); //ストールの電流閾値
Yajirushi 0:e1964b6e160c 409 void setFSSpeed(int motorNumber, unsigned short value); //フルステップ駆動に切り替えるスピード
Yajirushi 0:e1964b6e160c 410 void setStepMode(int motorNumber, unsigned char value); //マイクロステッピングモード指定
Yajirushi 0:e1964b6e160c 411 void setAlermEnable(int motorNumber, unsigned char value); //アラームの有効無効
Yajirushi 0:e1964b6e160c 412 void setSystemConfig(int motorNumber, unsigned short value); //ドライバシステム設定
Yajirushi 0:e1964b6e160c 413
Yajirushi 0:e1964b6e160c 414 // get method ------------------------------------------------------------------------------
Yajirushi 0:e1964b6e160c 415 unsigned long getSpeed(int motorNumber); //現在の回転スピード
Yajirushi 0:e1964b6e160c 416 unsigned short getADC(int motorNumber); //ADCの取得
Yajirushi 0:e1964b6e160c 417 unsigned short getStatus(int motorNumber); //ステータス読み取り
Yajirushi 0:e1964b6e160c 418 unsigned long getAbsPosition(int motorNumber); //絶対座標
Yajirushi 0:e1964b6e160c 419 unsigned short getElecPosition(int motorNumber); //マイクロステップ位置
Yajirushi 0:e1964b6e160c 420 unsigned long getMarkPosition(int motorNumber); //ホームポジション
Yajirushi 0:e1964b6e160c 421 unsigned short getAcceleration(int motorNumber); //加速
Yajirushi 0:e1964b6e160c 422 unsigned short getDeceleration(int motorNumber); //減速
Yajirushi 0:e1964b6e160c 423 unsigned short getMaximumSpeed(int motorNumber); //最大回転速度
Yajirushi 0:e1964b6e160c 424 unsigned short getMinimumSpeed(int motorNumber); //最低回転速度(普通はゼロ)
Yajirushi 0:e1964b6e160c 425 unsigned char getHoldingKVAL(int motorNumber); //モーター停止中の電圧
Yajirushi 0:e1964b6e160c 426 unsigned char getRunningKVAL(int motorNumber); //モーター駆動中の電圧
Yajirushi 0:e1964b6e160c 427 unsigned char getAccelerationKVAL(int motorNumber); //モーター加速中の電圧
Yajirushi 0:e1964b6e160c 428 unsigned char getDecelerationKVAL(int motorNumber); //モーター減速中の電圧
Yajirushi 0:e1964b6e160c 429 unsigned short getInterpolateSpeed(int motorNumber); //加減速補間を開始するスピード
Yajirushi 0:e1964b6e160c 430 unsigned char getInterpolateSlope(int motorNumber); //加減速補間の傾き
Yajirushi 0:e1964b6e160c 431 unsigned char getAccSlopeFinal(int motorNumber); //加速最終時の補間の傾き
Yajirushi 0:e1964b6e160c 432 unsigned char getDecSlopeFinal(int motorNumber); //減速最終時の補間の傾き
Yajirushi 0:e1964b6e160c 433 unsigned char getThermoCorrect(int motorNumber); //高温時の補正
Yajirushi 0:e1964b6e160c 434 unsigned char getOCThreshold(int motorNumber); //オーバーカレントの電流閾値
Yajirushi 0:e1964b6e160c 435 unsigned char getStallThreshold(int motorNumber); //ストールの電流閾値
Yajirushi 0:e1964b6e160c 436 unsigned short getFSSpeed(int motorNumber); //フルステップ駆動に切り替えるスピード
Yajirushi 0:e1964b6e160c 437 unsigned char getStepMode(int motorNumber); //マイクロステッピングモード
Yajirushi 0:e1964b6e160c 438 unsigned char getAlermEnable(int motorNumber); //アラームの有効無効
Yajirushi 0:e1964b6e160c 439 unsigned short getSystemConfig(int motorNumber); //ドライバシステム設定
Yajirushi 0:e1964b6e160c 440 };
Yajirushi 0:e1964b6e160c 441
Yajirushi 0:e1964b6e160c 442 #endif