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.
Diff: L6470.h
- Revision:
- 0:2f3be153718a
- Child:
- 1:6cd6cd00aabe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/L6470.h Thu Feb 20 03:25:44 2020 +0000
@@ -0,0 +1,222 @@
+/*#ifndef _L6470_H_
+#define _L6470_H_
+
+#include"mbed.h"
+
+//L6470 Registers
+#define ABS_POS 0x01 // Current position
+#define EL_POS 0x02 // Electrical position
+#define MARK 0x03
+#define SPEED 0x04
+#define ACC 0x05
+#define DEC 0x06
+#define MAX_SPEED 0x07
+#define MIN_SPEED 0x08
+#define FS_SPD 0x15
+#define KVAL_HOLD 0x09
+#define KVAL_RUN 0x0A
+#define KVAL_ACC 0x0B
+#define KVAL_DEC 0x0C
+#define INT_SPEED 0x0D
+#define ST_SLP 0x0E
+#define FN_SLP_ACC 0x0F
+#define FN_SLP_DEC 0x10
+#define K_THERM 0x11
+#define ADC_OUT 0x12
+#define OCD_TH 0x13
+#define STALL_TH 0x14
+#define STEP_MODE 0x16
+#define ALARM_EN 0x17
+#define CONFIG 0x18
+#define STATUS 0x19
+
+//L6470 Commands
+#define NOP 0x000
+#define SetParam 0x0<<5 // ( | PARAM )
+#define GetParam 0x01<<5 // ( | PARAM )
+#define Run_Forward 0x50
+#define Run_Back 0x51
+#define Step_Clock_Forward 0x58
+#define Step_Clock_Back 0x59
+#define Move_Forward 0x40
+#define Move_Back 0x41
+#define GoTo 0x60
+#define GoTo_DIR_Forward 0x68
+#define GoTo_DIR_Back 0x69
+//#define GoUntill
+//#define ReleseSW
+#define GoHome 0x70
+#define GoMark 0x78
+#define ResetPos 0xD8
+#define ResetDevice 0xC0
+#define SoftStop 0xB0
+#define HardStop 0xB8
+#define SoftHiZ 0xA0
+#define HardHiz 0xA8
+#define GetStatus 0xD8
+
+
+
+
+class L6470
+{
+ SPI _spi;
+ DigitalOut _cs;
+
+ public:
+ L6470(PinName mosi, PinName miso, PinName sclk, PinName cs):_spi(mosi, miso, sclk),_cs(cs)
+ {
+ _spi.format(8,2);
+ _spi.frequency(4960000);
+ }
+ //~L6470();
+
+
+ //L6470(PinName mosi, PinName miso, PinName sclk, PinName ssel);
+
+ void init()
+ {
+ // L6470のspi通信の有効化
+ //spi.format(8,2);
+ //spi.frequency(4960000);
+
+ // nopを送ることで残留している命令を排除
+ _cs = 1;
+ _spi.write(0x00);
+ _spi.write(0x00);
+ _spi.write(0x00);
+ _spi.write(0x00);
+ _cs = 0;
+
+ //リセット
+ _cs = 1;
+ _spi.write(0xC0);
+ _cs = 0;
+
+ // MAX_SPEED設定。
+ _cs = 1;
+ _spi.write(0x07);
+ // 最大回転スピード値(10bit) 初期値は 0x41
+ _spi.write(0x00);
+ _spi.write(0x23);
+ _cs = 0;
+
+ // KVAL_HOLD設定。
+ /// レジスタアドレス。
+ _cs = 1;
+ _spi.write(0x09);
+ _spi.write(0xFF);
+ _cs = 0;
+
+ // KVAL_spiUN設定。
+ /// レジスタアドレス。
+ _cs = 1;
+ _spi.write(0x0A);
+ _spi.write(0xFF);
+ _cs = 0;
+
+ // KVAL_ACC設定。
+ _cs = 1;
+ _spi.write(0x0B);
+ _spi.write(0xFF);
+ _cs = 0;
+
+ // KVAL_DEC設定。
+ /// レジスタアドレス。
+ _cs= 1;
+ _spi.write(0x0C);
+ _spi.write(0x40);
+ _cs = 0;
+
+ // OCD_TH設定。
+ /// レジスタアドレス。
+ _cs = 1;
+ _spi.write(0x13);
+ _spi.write(0x0F);
+ _cs = 0;
+
+ // STALL_TH設定。
+ /// レジスタアドレス。
+ _cs = 1;
+ _spi.write(0x14);
+ _spi.write(0x7F);
+ _cs = 0;
+};
+ //void writeByte(uint8_t);
+ void writeByte(uint8_t data)
+{
+ _cs = 1;
+ _spi.write(data);
+ _cs = 0;
+}
+
+ void writeBytes(uint8_t add, int bytes, uint32_t value)
+{
+ uint32_t data[3];
+ for (int i = 0; i < bytes; i++){
+ data[i] = value & 0xff;
+ value = value >> 8;
+ }
+ if(bytes == 3){
+ _cs = 1;
+ _spi.write(add);
+ _spi.write(data[2]);
+ _spi.write(data[1]);
+ _spi.write(data[0]);
+ _cs = 0;
+ }
+ else if ( bytes == 2 ) {
+ _cs = 1;
+ _spi.write( add );
+ _spi.write( data[1] ) ;
+ _spi.write( data[0] ) ;
+ _cs = 0;
+ }
+ else if ( bytes == 1 ) {
+ _cs = 1;
+ _spi.write( add );
+ _spi.write( data[0] ) ;
+ _cs = 0;
+ }
+}
+
+ //void writeBytes(uint8_t, int, uint32_t);
+ void L6470_run(uint32_t speed)
+{
+ uint8_t dir;
+ uint32_t spd;
+ uint8_t spd_h;
+ uint8_t spd_m;
+ uint8_t spd_l;
+
+ // 方向検出。
+ if (speed < 0)
+ {
+ dir = 0x50;
+ spd = -1 * speed;
+ }
+ else
+ {
+ dir = 0x51;
+ spd = speed;
+ }
+
+ // 送信バイトデータ生成。
+ spd_h = (uint8_t)((0x000F0000 & spd) >> 16);
+ spd_m = (uint8_t)((0x0000FF00 & spd) >> 8);
+ spd_l = (uint8_t)(0x000000FF & spd);
+ // コマンド(レジスタアドレス)送信。
+ _cs = 1;
+ _spi.write(dir);
+ _spi.write(spd_h);
+ _spi.write(spd_m);
+ _spi.write(spd_l);
+ _cs = 0;
+}
+
+ //void L6470_run(uint32_t);
+
+};
+
+
+#endif
\ No newline at end of file