Library for STMicroelectronics dSPIN L6470 stepper driver. "daisy-chain" supported.
Dependents: L6470_daisy_chain l6470
L6470SDC.h@2:2af83d3ccd97, 2015-06-09 (annotated)
- 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?
User | Revision | Line number | New 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 |