Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
L6470.h@0:cdf64907686d, 2021-12-25 (annotated)
- Committer:
- kannokoki
- Date:
- Sat Dec 25 12:35:05 2021 +0000
- Revision:
- 0:cdf64907686d
L6470
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kannokoki | 0:cdf64907686d | 1 | #ifndef _L6470_H_ |
| kannokoki | 0:cdf64907686d | 2 | #define _L6470_H_ |
| kannokoki | 0:cdf64907686d | 3 | |
| kannokoki | 0:cdf64907686d | 4 | #include"mbed.h" |
| kannokoki | 0:cdf64907686d | 5 | |
| kannokoki | 0:cdf64907686d | 6 | //L6470 Registers |
| kannokoki | 0:cdf64907686d | 7 | #define ABS_POS 0x01 // Current position |
| kannokoki | 0:cdf64907686d | 8 | #define EL_POS 0x02 // Electrical position |
| kannokoki | 0:cdf64907686d | 9 | #define MARK 0x03 |
| kannokoki | 0:cdf64907686d | 10 | #define SPEED 0x04 |
| kannokoki | 0:cdf64907686d | 11 | #define ACC 0x05 |
| kannokoki | 0:cdf64907686d | 12 | #define DEC 0x06 |
| kannokoki | 0:cdf64907686d | 13 | #define MAX_SPEED 0x07 |
| kannokoki | 0:cdf64907686d | 14 | #define MIN_SPEED 0x08 |
| kannokoki | 0:cdf64907686d | 15 | #define FS_SPD 0x15 |
| kannokoki | 0:cdf64907686d | 16 | #define KVAL_HOLD 0x09 |
| kannokoki | 0:cdf64907686d | 17 | #define KVAL_RUN 0x0A |
| kannokoki | 0:cdf64907686d | 18 | #define KVAL_ACC 0x0B |
| kannokoki | 0:cdf64907686d | 19 | #define KVAL_DEC 0x0C |
| kannokoki | 0:cdf64907686d | 20 | #define INT_SPEED 0x0D |
| kannokoki | 0:cdf64907686d | 21 | #define ST_SLP 0x0E |
| kannokoki | 0:cdf64907686d | 22 | #define FN_SLP_ACC 0x0F |
| kannokoki | 0:cdf64907686d | 23 | #define FN_SLP_DEC 0x10 |
| kannokoki | 0:cdf64907686d | 24 | #define K_THERM 0x11 |
| kannokoki | 0:cdf64907686d | 25 | #define ADC_OUT 0x12 |
| kannokoki | 0:cdf64907686d | 26 | #define OCD_TH 0x13 |
| kannokoki | 0:cdf64907686d | 27 | #define STALL_TH 0x14 |
| kannokoki | 0:cdf64907686d | 28 | #define STEP_MODE 0x16 |
| kannokoki | 0:cdf64907686d | 29 | #define ALARM_EN 0x17 |
| kannokoki | 0:cdf64907686d | 30 | #define CONFIG 0x18 |
| kannokoki | 0:cdf64907686d | 31 | #define STATUS 0x19 |
| kannokoki | 0:cdf64907686d | 32 | |
| kannokoki | 0:cdf64907686d | 33 | //L6470 Commands |
| kannokoki | 0:cdf64907686d | 34 | #define NOP 0x000 |
| kannokoki | 0:cdf64907686d | 35 | #define SetParam 0x0<<5 // ( | PARAM ) |
| kannokoki | 0:cdf64907686d | 36 | #define GetParam 0x01<<5 // ( | PARAM ) |
| kannokoki | 0:cdf64907686d | 37 | #define Run_Forward 0x50 |
| kannokoki | 0:cdf64907686d | 38 | #define Run_Back 0x51 |
| kannokoki | 0:cdf64907686d | 39 | #define Step_Clock_Forward 0x58 |
| kannokoki | 0:cdf64907686d | 40 | #define Step_Clock_Back 0x59 |
| kannokoki | 0:cdf64907686d | 41 | #define Move_Forward 0x40 |
| kannokoki | 0:cdf64907686d | 42 | #define Move_Back 0x41 |
| kannokoki | 0:cdf64907686d | 43 | #define GoTo 0x60 |
| kannokoki | 0:cdf64907686d | 44 | #define GoTo_DIR_Forward 0x68 |
| kannokoki | 0:cdf64907686d | 45 | #define GoTo_DIR_Back 0x69 |
| kannokoki | 0:cdf64907686d | 46 | //#define GoUntill |
| kannokoki | 0:cdf64907686d | 47 | //#define ReleseSW |
| kannokoki | 0:cdf64907686d | 48 | #define GoHome 0x70 |
| kannokoki | 0:cdf64907686d | 49 | #define GoMark 0x78 |
| kannokoki | 0:cdf64907686d | 50 | #define ResetPos 0xD8 |
| kannokoki | 0:cdf64907686d | 51 | #define ResetDevice 0xC0 |
| kannokoki | 0:cdf64907686d | 52 | #define SoftStop 0xB0 |
| kannokoki | 0:cdf64907686d | 53 | #define HardStop 0xB8 |
| kannokoki | 0:cdf64907686d | 54 | #define SoftHiZ 0xA0 |
| kannokoki | 0:cdf64907686d | 55 | #define HardHiz 0xA8 |
| kannokoki | 0:cdf64907686d | 56 | #define GetStatus 0xD8 |
| kannokoki | 0:cdf64907686d | 57 | |
| kannokoki | 0:cdf64907686d | 58 | |
| kannokoki | 0:cdf64907686d | 59 | |
| kannokoki | 0:cdf64907686d | 60 | |
| kannokoki | 0:cdf64907686d | 61 | class L6470 |
| kannokoki | 0:cdf64907686d | 62 | { |
| kannokoki | 0:cdf64907686d | 63 | SPI spi; |
| kannokoki | 0:cdf64907686d | 64 | DigitalOut cs; |
| kannokoki | 0:cdf64907686d | 65 | |
| kannokoki | 0:cdf64907686d | 66 | public: |
| kannokoki | 0:cdf64907686d | 67 | L6470(PinName mosi, PinName miso, PinName sclk, PinName cs):spi(mosi, miso, sclk),cs(cs) |
| kannokoki | 0:cdf64907686d | 68 | { |
| kannokoki | 0:cdf64907686d | 69 | spi.format(8,2); |
| kannokoki | 0:cdf64907686d | 70 | spi.frequency(4960000); |
| kannokoki | 0:cdf64907686d | 71 | } |
| kannokoki | 0:cdf64907686d | 72 | |
| kannokoki | 0:cdf64907686d | 73 | //~L6470(); |
| kannokoki | 0:cdf64907686d | 74 | |
| kannokoki | 0:cdf64907686d | 75 | |
| kannokoki | 0:cdf64907686d | 76 | //L6470(PinName mosi, PinName miso, PinName sclk, PinName ssel); |
| kannokoki | 0:cdf64907686d | 77 | |
| kannokoki | 0:cdf64907686d | 78 | void init() |
| kannokoki | 0:cdf64907686d | 79 | { |
| kannokoki | 0:cdf64907686d | 80 | // L6470のspi通信の有効化 |
| kannokoki | 0:cdf64907686d | 81 | //_spi.format(8,2); |
| kannokoki | 0:cdf64907686d | 82 | //_spi.frequency(4960000); |
| kannokoki | 0:cdf64907686d | 83 | |
| kannokoki | 0:cdf64907686d | 84 | // nopを送ることで残留している命令を排除 |
| kannokoki | 0:cdf64907686d | 85 | cs = 1; |
| kannokoki | 0:cdf64907686d | 86 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 87 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 88 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 89 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 90 | cs = 0; |
| kannokoki | 0:cdf64907686d | 91 | |
| kannokoki | 0:cdf64907686d | 92 | //リセット |
| kannokoki | 0:cdf64907686d | 93 | cs = 1; |
| kannokoki | 0:cdf64907686d | 94 | spi.write(0xC0); |
| kannokoki | 0:cdf64907686d | 95 | cs = 0; |
| kannokoki | 0:cdf64907686d | 96 | |
| kannokoki | 0:cdf64907686d | 97 | // MAX_SPEED設定。 |
| kannokoki | 0:cdf64907686d | 98 | cs = 1; |
| kannokoki | 0:cdf64907686d | 99 | spi.write(0x07); |
| kannokoki | 0:cdf64907686d | 100 | // 最大回転スピード値(10bit) 初期値は 0x41 |
| kannokoki | 0:cdf64907686d | 101 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 102 | spi.write(0x23); |
| kannokoki | 0:cdf64907686d | 103 | cs = 0; |
| kannokoki | 0:cdf64907686d | 104 | |
| kannokoki | 0:cdf64907686d | 105 | // KVAL_HOLD設定。 |
| kannokoki | 0:cdf64907686d | 106 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 107 | cs = 1; |
| kannokoki | 0:cdf64907686d | 108 | spi.write(0x09); |
| kannokoki | 0:cdf64907686d | 109 | spi.write(0xFF); |
| kannokoki | 0:cdf64907686d | 110 | cs = 0; |
| kannokoki | 0:cdf64907686d | 111 | |
| kannokoki | 0:cdf64907686d | 112 | // KVAL_spiUN設定。 |
| kannokoki | 0:cdf64907686d | 113 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 114 | cs = 1; |
| kannokoki | 0:cdf64907686d | 115 | spi.write(0x0A); |
| kannokoki | 0:cdf64907686d | 116 | spi.write(0xFF); |
| kannokoki | 0:cdf64907686d | 117 | cs = 0; |
| kannokoki | 0:cdf64907686d | 118 | |
| kannokoki | 0:cdf64907686d | 119 | // KVAL_ACC設定。 |
| kannokoki | 0:cdf64907686d | 120 | cs = 1; |
| kannokoki | 0:cdf64907686d | 121 | spi.write(0x0B); |
| kannokoki | 0:cdf64907686d | 122 | spi.write(0xFF); |
| kannokoki | 0:cdf64907686d | 123 | cs = 0; |
| kannokoki | 0:cdf64907686d | 124 | |
| kannokoki | 0:cdf64907686d | 125 | // KVAL_DEC設定。 |
| kannokoki | 0:cdf64907686d | 126 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 127 | cs= 1; |
| kannokoki | 0:cdf64907686d | 128 | spi.write(0x0C); |
| kannokoki | 0:cdf64907686d | 129 | spi.write(0x40); |
| kannokoki | 0:cdf64907686d | 130 | cs = 0; |
| kannokoki | 0:cdf64907686d | 131 | |
| kannokoki | 0:cdf64907686d | 132 | // OCD_TH設定。 |
| kannokoki | 0:cdf64907686d | 133 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 134 | cs = 1; |
| kannokoki | 0:cdf64907686d | 135 | spi.write(0x13); |
| kannokoki | 0:cdf64907686d | 136 | spi.write(0x0F); |
| kannokoki | 0:cdf64907686d | 137 | cs = 0; |
| kannokoki | 0:cdf64907686d | 138 | |
| kannokoki | 0:cdf64907686d | 139 | // STALL_TH設定。 |
| kannokoki | 0:cdf64907686d | 140 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 141 | cs = 1; |
| kannokoki | 0:cdf64907686d | 142 | spi.write(0x14); |
| kannokoki | 0:cdf64907686d | 143 | spi.write(0x7F); |
| kannokoki | 0:cdf64907686d | 144 | cs = 0; |
| kannokoki | 0:cdf64907686d | 145 | }; |
| kannokoki | 0:cdf64907686d | 146 | //void writeByte(uint8_t); |
| kannokoki | 0:cdf64907686d | 147 | void writeByte(uint8_t data) |
| kannokoki | 0:cdf64907686d | 148 | { |
| kannokoki | 0:cdf64907686d | 149 | cs = 1; |
| kannokoki | 0:cdf64907686d | 150 | spi.write(data); |
| kannokoki | 0:cdf64907686d | 151 | cs = 0; |
| kannokoki | 0:cdf64907686d | 152 | } |
| kannokoki | 0:cdf64907686d | 153 | |
| kannokoki | 0:cdf64907686d | 154 | void writeBytes(uint8_t add, int bytes, uint32_t value) |
| kannokoki | 0:cdf64907686d | 155 | { |
| kannokoki | 0:cdf64907686d | 156 | uint32_t data[3]; |
| kannokoki | 0:cdf64907686d | 157 | for (int i = 0; i < bytes; i++){ |
| kannokoki | 0:cdf64907686d | 158 | data[i] = value & 0xff; |
| kannokoki | 0:cdf64907686d | 159 | value = value >> 8; |
| kannokoki | 0:cdf64907686d | 160 | } |
| kannokoki | 0:cdf64907686d | 161 | if(bytes == 3){ |
| kannokoki | 0:cdf64907686d | 162 | cs = 1; |
| kannokoki | 0:cdf64907686d | 163 | spi.write(add); |
| kannokoki | 0:cdf64907686d | 164 | spi.write(data[2]); |
| kannokoki | 0:cdf64907686d | 165 | spi.write(data[1]); |
| kannokoki | 0:cdf64907686d | 166 | spi.write(data[0]); |
| kannokoki | 0:cdf64907686d | 167 | cs = 0; |
| kannokoki | 0:cdf64907686d | 168 | } |
| kannokoki | 0:cdf64907686d | 169 | else if ( bytes == 2 ) { |
| kannokoki | 0:cdf64907686d | 170 | cs = 1; |
| kannokoki | 0:cdf64907686d | 171 | spi.write( add ); |
| kannokoki | 0:cdf64907686d | 172 | spi.write( data[1] ) ; |
| kannokoki | 0:cdf64907686d | 173 | spi.write( data[0] ) ; |
| kannokoki | 0:cdf64907686d | 174 | cs = 0; |
| kannokoki | 0:cdf64907686d | 175 | } |
| kannokoki | 0:cdf64907686d | 176 | else if ( bytes == 1 ) { |
| kannokoki | 0:cdf64907686d | 177 | cs = 1; |
| kannokoki | 0:cdf64907686d | 178 | spi.write( add ); |
| kannokoki | 0:cdf64907686d | 179 | spi.write( data[0] ) ; |
| kannokoki | 0:cdf64907686d | 180 | cs = 0; |
| kannokoki | 0:cdf64907686d | 181 | } |
| kannokoki | 0:cdf64907686d | 182 | } |
| kannokoki | 0:cdf64907686d | 183 | |
| kannokoki | 0:cdf64907686d | 184 | //void writeBytes(uint8_t, int, uint32_t); |
| kannokoki | 0:cdf64907686d | 185 | void L6470_run(long speed) |
| kannokoki | 0:cdf64907686d | 186 | { |
| kannokoki | 0:cdf64907686d | 187 | uint8_t dir; |
| kannokoki | 0:cdf64907686d | 188 | long spd; |
| kannokoki | 0:cdf64907686d | 189 | uint8_t spd_h; |
| kannokoki | 0:cdf64907686d | 190 | uint8_t spd_m; |
| kannokoki | 0:cdf64907686d | 191 | uint8_t spd_l; |
| kannokoki | 0:cdf64907686d | 192 | |
| kannokoki | 0:cdf64907686d | 193 | // 方向検出。 |
| kannokoki | 0:cdf64907686d | 194 | if (speed < 0) |
| kannokoki | 0:cdf64907686d | 195 | { |
| kannokoki | 0:cdf64907686d | 196 | dir = 0x50; |
| kannokoki | 0:cdf64907686d | 197 | spd = -1 * speed; |
| kannokoki | 0:cdf64907686d | 198 | } |
| kannokoki | 0:cdf64907686d | 199 | else |
| kannokoki | 0:cdf64907686d | 200 | { |
| kannokoki | 0:cdf64907686d | 201 | dir = 0x51; |
| kannokoki | 0:cdf64907686d | 202 | spd = speed; |
| kannokoki | 0:cdf64907686d | 203 | } |
| kannokoki | 0:cdf64907686d | 204 | |
| kannokoki | 0:cdf64907686d | 205 | // 送信バイトデータ生成。 |
| kannokoki | 0:cdf64907686d | 206 | spd_h = (uint8_t)((0x000F0000 & (uint32_t)spd) >> 16); |
| kannokoki | 0:cdf64907686d | 207 | spd_m = (uint8_t)((0x0000FF00 & (uint32_t)spd) >> 8); |
| kannokoki | 0:cdf64907686d | 208 | spd_l = (uint8_t)(0x000000FF & (uint32_t)spd); |
| kannokoki | 0:cdf64907686d | 209 | // コマンド(レジスタアドレス)送信。 |
| kannokoki | 0:cdf64907686d | 210 | cs = 1; |
| kannokoki | 0:cdf64907686d | 211 | spi.write(dir); |
| kannokoki | 0:cdf64907686d | 212 | spi.write(spd_h); |
| kannokoki | 0:cdf64907686d | 213 | spi.write(spd_m); |
| kannokoki | 0:cdf64907686d | 214 | spi.write(spd_l); |
| kannokoki | 0:cdf64907686d | 215 | cs = 0; |
| kannokoki | 0:cdf64907686d | 216 | } |
| kannokoki | 0:cdf64907686d | 217 | |
| kannokoki | 0:cdf64907686d | 218 | //void L6470_run(uint32_t); |
| kannokoki | 0:cdf64907686d | 219 | |
| kannokoki | 0:cdf64907686d | 220 | int getstatus(uint8_t data) |
| kannokoki | 0:cdf64907686d | 221 | { |
| kannokoki | 0:cdf64907686d | 222 | cs = 1; |
| kannokoki | 0:cdf64907686d | 223 | int s = spi.write(data); |
| kannokoki | 0:cdf64907686d | 224 | cs = 0; |
| kannokoki | 0:cdf64907686d | 225 | return s; |
| kannokoki | 0:cdf64907686d | 226 | } |
| kannokoki | 0:cdf64907686d | 227 | }; |
| kannokoki | 0:cdf64907686d | 228 | |
| kannokoki | 0:cdf64907686d | 229 | |
| kannokoki | 0:cdf64907686d | 230 | #endif |