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
- Committer:
- imanomadao
- Date:
- 2020-02-20
- Revision:
- 1:6cd6cd00aabe
- Parent:
- 0:2f3be153718a
- Child:
- 2:09ae6c1aab1a
File content as of revision 1:6cd6cd00aabe:
#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