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.cpp@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 | /*#include"mbed.h" |
| kannokoki | 0:cdf64907686d | 2 | #include"L6470.h" |
| kannokoki | 0:cdf64907686d | 3 | |
| kannokoki | 0:cdf64907686d | 4 | SPI spi(PinName mosi, PinName miso, PinName ssel); |
| kannokoki | 0:cdf64907686d | 5 | DigitalOut cs(PinName); |
| kannokoki | 0:cdf64907686d | 6 | |
| kannokoki | 0:cdf64907686d | 7 | L6470::L6470(const spi_pinmap_t &static_pinmap, PinName ssel) |
| kannokoki | 0:cdf64907686d | 8 | : |
| kannokoki | 0:cdf64907686d | 9 | static_pinmap(new SPI(mosi,miso,sclk)), |
| kannokoki | 0:cdf64907686d | 10 | spi(*static_pinmap), |
| kannokoki | 0:cdf64907686d | 11 | ssel = DigitalOut(PinName) |
| kannokoki | 0:cdf64907686d | 12 | { |
| kannokoki | 0:cdf64907686d | 13 | init(); |
| kannokoki | 0:cdf64907686d | 14 | } |
| kannokoki | 0:cdf64907686d | 15 | |
| kannokoki | 0:cdf64907686d | 16 | L6470::~L6470(){} |
| kannokoki | 0:cdf64907686d | 17 | |
| kannokoki | 0:cdf64907686d | 18 | |
| kannokoki | 0:cdf64907686d | 19 | /*L6470::L6470(PinName mosi, PinName miso, PinName sclk, PinName ssel) |
| kannokoki | 0:cdf64907686d | 20 | : |
| kannokoki | 0:cdf64907686d | 21 | spi_p(new SPI(mosi, miso, sclk)), |
| kannokoki | 0:cdf64907686d | 22 | spi(*spi_p), |
| kannokoki | 0:cdf64907686d | 23 | cs_p(new DigitalOut(ssel)), |
| kannokoki | 0:cdf64907686d | 24 | cs(*cs_p) |
| kannokoki | 0:cdf64907686d | 25 | |
| kannokoki | 0:cdf64907686d | 26 | |
| kannokoki | 0:cdf64907686d | 27 | |
| kannokoki | 0:cdf64907686d | 28 | void L6470::init(){ |
| kannokoki | 0:cdf64907686d | 29 | |
| kannokoki | 0:cdf64907686d | 30 | // L6470のspi通信の有効化 |
| kannokoki | 0:cdf64907686d | 31 | //spi.format(8,2); |
| kannokoki | 0:cdf64907686d | 32 | //spi.frequency(4960000); |
| kannokoki | 0:cdf64907686d | 33 | |
| kannokoki | 0:cdf64907686d | 34 | // nopを送ることで残留している命令を排除 |
| kannokoki | 0:cdf64907686d | 35 | cs = 1; |
| kannokoki | 0:cdf64907686d | 36 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 37 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 38 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 39 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 40 | cs = 0; |
| kannokoki | 0:cdf64907686d | 41 | |
| kannokoki | 0:cdf64907686d | 42 | //リセット |
| kannokoki | 0:cdf64907686d | 43 | cs = 1; |
| kannokoki | 0:cdf64907686d | 44 | spi.write(0xC0); |
| kannokoki | 0:cdf64907686d | 45 | cs = 0; |
| kannokoki | 0:cdf64907686d | 46 | |
| kannokoki | 0:cdf64907686d | 47 | // MAX_SPEED設定。 |
| kannokoki | 0:cdf64907686d | 48 | cs = 1; |
| kannokoki | 0:cdf64907686d | 49 | spi.write(0x07); |
| kannokoki | 0:cdf64907686d | 50 | // 最大回転スピード値(10bit) 初期値は 0x41 |
| kannokoki | 0:cdf64907686d | 51 | spi.write(0x00); |
| kannokoki | 0:cdf64907686d | 52 | spi.write(0x23); |
| kannokoki | 0:cdf64907686d | 53 | cs = 0; |
| kannokoki | 0:cdf64907686d | 54 | |
| kannokoki | 0:cdf64907686d | 55 | // KVAL_HOLD設定。 |
| kannokoki | 0:cdf64907686d | 56 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 57 | cs = 1; |
| kannokoki | 0:cdf64907686d | 58 | spi.write(0x09); |
| kannokoki | 0:cdf64907686d | 59 | spi.write(0xFF); |
| kannokoki | 0:cdf64907686d | 60 | cs = 0; |
| kannokoki | 0:cdf64907686d | 61 | |
| kannokoki | 0:cdf64907686d | 62 | // KVAL_spiUN設定。 |
| kannokoki | 0:cdf64907686d | 63 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 64 | cs = 1; |
| kannokoki | 0:cdf64907686d | 65 | spi.write(0x0A); |
| kannokoki | 0:cdf64907686d | 66 | spi.write(0xFF); |
| kannokoki | 0:cdf64907686d | 67 | cs = 0; |
| kannokoki | 0:cdf64907686d | 68 | |
| kannokoki | 0:cdf64907686d | 69 | // KVAL_ACC設定。 |
| kannokoki | 0:cdf64907686d | 70 | cs = 1; |
| kannokoki | 0:cdf64907686d | 71 | spi.write(0x0B); |
| kannokoki | 0:cdf64907686d | 72 | spi.write(0xFF); |
| kannokoki | 0:cdf64907686d | 73 | cs = 0; |
| kannokoki | 0:cdf64907686d | 74 | |
| kannokoki | 0:cdf64907686d | 75 | // KVAL_DEC設定。 |
| kannokoki | 0:cdf64907686d | 76 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 77 | cs= 1; |
| kannokoki | 0:cdf64907686d | 78 | spi.write(0x0C); |
| kannokoki | 0:cdf64907686d | 79 | spi.write(0x40); |
| kannokoki | 0:cdf64907686d | 80 | cs = 0; |
| kannokoki | 0:cdf64907686d | 81 | |
| kannokoki | 0:cdf64907686d | 82 | // OCD_TH設定。 |
| kannokoki | 0:cdf64907686d | 83 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 84 | cs = 1; |
| kannokoki | 0:cdf64907686d | 85 | spi.write(0x13); |
| kannokoki | 0:cdf64907686d | 86 | spi.write(0x0F); |
| kannokoki | 0:cdf64907686d | 87 | cs = 0; |
| kannokoki | 0:cdf64907686d | 88 | |
| kannokoki | 0:cdf64907686d | 89 | // STALL_TH設定。 |
| kannokoki | 0:cdf64907686d | 90 | /// レジスタアドレス。 |
| kannokoki | 0:cdf64907686d | 91 | cs = 1; |
| kannokoki | 0:cdf64907686d | 92 | spi.write(0x14); |
| kannokoki | 0:cdf64907686d | 93 | spi.write(0x7F); |
| kannokoki | 0:cdf64907686d | 94 | cs = 0; |
| kannokoki | 0:cdf64907686d | 95 | } |
| kannokoki | 0:cdf64907686d | 96 | |
| kannokoki | 0:cdf64907686d | 97 | void L6470::writeByte(uint8_t data) |
| kannokoki | 0:cdf64907686d | 98 | { |
| kannokoki | 0:cdf64907686d | 99 | cs = 1; |
| kannokoki | 0:cdf64907686d | 100 | spi.write(data); |
| kannokoki | 0:cdf64907686d | 101 | cs = 0; |
| kannokoki | 0:cdf64907686d | 102 | } |
| kannokoki | 0:cdf64907686d | 103 | |
| kannokoki | 0:cdf64907686d | 104 | |
| kannokoki | 0:cdf64907686d | 105 | void L6470::writeBytes(uint8_t add, int bytes, uint32_t value) |
| kannokoki | 0:cdf64907686d | 106 | { |
| kannokoki | 0:cdf64907686d | 107 | uint32_t data[3]; |
| kannokoki | 0:cdf64907686d | 108 | for (int i = 0; i < bytes; i++){ |
| kannokoki | 0:cdf64907686d | 109 | data[i] = value & 0xff; |
| kannokoki | 0:cdf64907686d | 110 | value = value >> 8; |
| kannokoki | 0:cdf64907686d | 111 | } |
| kannokoki | 0:cdf64907686d | 112 | if(bytes == 3){ |
| kannokoki | 0:cdf64907686d | 113 | cs = 1; |
| kannokoki | 0:cdf64907686d | 114 | spi.write(add) |
| kannokoki | 0:cdf64907686d | 115 | spi.write(data[2]); |
| kannokoki | 0:cdf64907686d | 116 | spi.write(data[1]); |
| kannokoki | 0:cdf64907686d | 117 | spi.write(data[0]); |
| kannokoki | 0:cdf64907686d | 118 | cs_R = 0; |
| kannokoki | 0:cdf64907686d | 119 | } |
| kannokoki | 0:cdf64907686d | 120 | else if ( bytes == 2 ) { |
| kannokoki | 0:cdf64907686d | 121 | cs = 1; |
| kannokoki | 0:cdf64907686d | 122 | spi.write( add ); |
| kannokoki | 0:cdf64907686d | 123 | spi.write( data[1] ) ; |
| kannokoki | 0:cdf64907686d | 124 | spi.write( data[0] ) ; |
| kannokoki | 0:cdf64907686d | 125 | cs = 0; |
| kannokoki | 0:cdf64907686d | 126 | } |
| kannokoki | 0:cdf64907686d | 127 | else if ( bytes == 1 ) { |
| kannokoki | 0:cdf64907686d | 128 | cs = 1; |
| kannokoki | 0:cdf64907686d | 129 | spi.write( add ); |
| kannokoki | 0:cdf64907686d | 130 | spi.write( data[0] ) ; |
| kannokoki | 0:cdf64907686d | 131 | cs = 0; |
| kannokoki | 0:cdf64907686d | 132 | } |
| kannokoki | 0:cdf64907686d | 133 | } |
| kannokoki | 0:cdf64907686d | 134 | |
| kannokoki | 0:cdf64907686d | 135 | |
| kannokoki | 0:cdf64907686d | 136 | void L6470::L6470_run(uint32_t speed) |
| kannokoki | 0:cdf64907686d | 137 | { |
| kannokoki | 0:cdf64907686d | 138 | uint8_t dir; |
| kannokoki | 0:cdf64907686d | 139 | uint32_t spd; |
| kannokoki | 0:cdf64907686d | 140 | uint8_t spd_h; |
| kannokoki | 0:cdf64907686d | 141 | uint8_t spd_m; |
| kannokoki | 0:cdf64907686d | 142 | uint8_t spd_l; |
| kannokoki | 0:cdf64907686d | 143 | |
| kannokoki | 0:cdf64907686d | 144 | // 方向検出。 |
| kannokoki | 0:cdf64907686d | 145 | if (speed < 0) |
| kannokoki | 0:cdf64907686d | 146 | { |
| kannokoki | 0:cdf64907686d | 147 | dir = 0x50; |
| kannokoki | 0:cdf64907686d | 148 | spd = -1 * speed; |
| kannokoki | 0:cdf64907686d | 149 | } |
| kannokoki | 0:cdf64907686d | 150 | else |
| kannokoki | 0:cdf64907686d | 151 | { |
| kannokoki | 0:cdf64907686d | 152 | dir = 0x51; |
| kannokoki | 0:cdf64907686d | 153 | spd = speed; |
| kannokoki | 0:cdf64907686d | 154 | } |
| kannokoki | 0:cdf64907686d | 155 | |
| kannokoki | 0:cdf64907686d | 156 | // 送信バイトデータ生成。 |
| kannokoki | 0:cdf64907686d | 157 | spd_h = (uint8_t)((0x000F0000 & spd) >> 16); |
| kannokoki | 0:cdf64907686d | 158 | spd_m = (uint8_t)((0x0000FF00 & spd) >> 8); |
| kannokoki | 0:cdf64907686d | 159 | spd_l = (uint8_t)(0x000000FF & spd); |
| kannokoki | 0:cdf64907686d | 160 | // コマンド(レジスタアドレス)送信。 |
| kannokoki | 0:cdf64907686d | 161 | cs = 1; |
| kannokoki | 0:cdf64907686d | 162 | spi.write(dir); |
| kannokoki | 0:cdf64907686d | 163 | spi.write(spd_h); |
| kannokoki | 0:cdf64907686d | 164 | spi.write(spd_m); |
| kannokoki | 0:cdf64907686d | 165 | spi.write(spd_l); |
| kannokoki | 0:cdf64907686d | 166 | cs = 0; |
| kannokoki | 0:cdf64907686d | 167 | } |
| kannokoki | 0:cdf64907686d | 168 | |
| kannokoki | 0:cdf64907686d | 169 | */ |