356 lines
11 KiB
C
356 lines
11 KiB
C
|
|
|
|||
|
|
|
|||
|
|
#ifndef __TMC260_H__
|
|||
|
|
#define __TMC260_H__
|
|||
|
|
|
|||
|
|
|
|||
|
|
#include "config.h"
|
|||
|
|
#include "inout.h"
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35>, ÿ<><C3BF>20<32><30>λ
|
|||
|
|
|
|||
|
|
// <20><>ַ
|
|||
|
|
#define CFR 0x80000
|
|||
|
|
#define CFRSEL1 0x40000
|
|||
|
|
#define CFRSEL0 0x20000
|
|||
|
|
|
|||
|
|
#define DRVCTRL0 0 // <20><> SDOFF == 0 ʱ
|
|||
|
|
#define DRVCTRL1 0 // <20><> SDOFF == 1 ʱ
|
|||
|
|
#define CHOPCONF (CFR)
|
|||
|
|
#define SMARTEN (CFR|CFRSEL0)
|
|||
|
|
#define SGCSCONF (CFR|CFRSEL1)
|
|||
|
|
#define DRVCONF (CFR|CFRSEL1|CFRSEL0)
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// SPI<50><49>ʽ<EFBFBD><CABD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
|
|||
|
|
// sdoff == 1 DRVCTRL <20><><EFBFBD><EFBFBD> spi<70><69>ʽ
|
|||
|
|
|
|||
|
|
#ifdef DRVCTRL1
|
|||
|
|
|
|||
|
|
// SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 polarityA; // A<><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OA1<41>ܽŵ<DCBD>OA2<41>ܽ<EFBFBD>; 1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OA2<41>ܽŵ<DCBD>OA1<41>ܽ<EFBFBD>
|
|||
|
|
u32 currentA; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȦA<C8A6>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ΧΪ0<CEAA><30>248<34><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>ȫʹ<C8AB>á<EFBFBD> ʩ<><CAA9><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA>Ľ<EFBFBD><C4BD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>255<35><35>
|
|||
|
|
|
|||
|
|
u32 polarityB; // B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OB1<42>ܽŵ<DCBD>OB2<42>ܽ<EFBFBD>; 1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OB2<42>ܽŵ<DCBD>OB1<42>ܽ<EFBFBD>
|
|||
|
|
u32 currentB; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȦB<C8A6>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ΧΪ0<CEAA><30>248<34><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>ȫʹ<C8AB>á<EFBFBD> ʩ<><CAA9><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA>Ľ<EFBFBD><C4BD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>255<35><35>
|
|||
|
|
|
|||
|
|
}TSpiCtrlConfig;
|
|||
|
|
|
|||
|
|
#define PHA 0x20000
|
|||
|
|
#define CA 0x1FE00
|
|||
|
|
#define PHB 0x00100
|
|||
|
|
#define CB 0x000FF
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ <20><><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
|
|||
|
|
|
|||
|
|
// sdoff == 0 DRVCTRL <20><><EFBFBD><EFBFBD>Ϊ step dir <20><>ʽ
|
|||
|
|
|
|||
|
|
#ifdef DRVCTRL0
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 intpol; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
|||
|
|
u32 dEdge; // ˫<><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 mRes; // <><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}TStepDirConfig;
|
|||
|
|
|
|||
|
|
#define INTPOL 0x00200 // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#define DEDGE 0x00100 // ʹ<><CAB9>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD>Լ<EFBFBD><D4BC>ٶԲ<D9B6><D4B2><EFBFBD>Ƶ<EFBFBD>ʵ<EFBFBD>Ҫ<EFBFBD><D2AA>
|
|||
|
|
|
|||
|
|
#define MRES1 0x00008 // 1ϸ<31><CFB8>
|
|||
|
|
#define MRES2 0x00007 // 2ϸ<32><CFB8>
|
|||
|
|
#define MRES4 0x00006 // 4ϸ<34><CFB8>
|
|||
|
|
#define MRES8 0x00005 // 8ϸ<38><CFB8>
|
|||
|
|
#define MRES16 0x00004 // 16ϸ<36><CFB8>
|
|||
|
|
#define MRES32 0x00003 // 32ϸ<32><CFB8>
|
|||
|
|
#define MRES64 0x00002 // 64ϸ<34><CFB8>
|
|||
|
|
#define MRES128 0x00001 // 128ϸ<38><CFB8>
|
|||
|
|
#define MRES256 0x00000 // 256ϸ<36><CFB8>
|
|||
|
|
|
|||
|
|
#define MRES 0x0000F // ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4λ<34><CEBB>Ч
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// ն<><D5B6><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
#ifdef CHOPCONF
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 blankTime; // <20>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD>հ<EFBFBD>ʱ<EFBFBD><CAB1>ѡ<EFBFBD><D1A1>; 00<30><30><EFBFBD>հ<EFBFBD>ʱ<EFBFBD><CAB1>Ϊ 16 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 01<30><31><EFBFBD>հ<EFBFBD>ʱ<EFBFBD><CAB1>Ϊ 24 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 10<31><30><EFBFBD>հ<EFBFBD>ʱ<EFBFBD><CAB1>Ϊ 36 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 11<31><31><EFBFBD>հ<EFBFBD>ʱ<EFBFBD><CAB1>Ϊ 54 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
u32 chopperMode; // ն<><D5B6>ģʽ; 0<><30><EFBFBD><EFBFBD>ģʽ 1<><31>Toff Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>˥<EFBFBD><CBA5>ģʽ
|
|||
|
|
u32 randomTOff; // <20><><EFBFBD><EFBFBD> TOFF ʱ<><CAB1>: 0<><30>ն<EFBFBD><D5B6>ʱ<EFBFBD><CAB1><EFBFBD>̶<EFBFBD> 1<><31>ն<EFBFBD><D5B6>ʱ<EFBFBD><CAB1><EFBFBD>ɵ<EFBFBD>
|
|||
|
|
u32 hysteresisDecay; // chopperMode==0ʱ, ˥<><CBA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 00<30><30>16 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 01<30><31>32 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 10<31><30>48 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 11<31><31>64 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
// chopperMode==1ʱ, FDMODE <20><><EFBFBD><EFBFBD>; bit0==1: <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>˥<EFBFBD><CBA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ; bit1:<3A><>˥<EFBFBD><CBA5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
u32 hysteresisEnd; // chopperMode==0ʱ, ˥<><CBA5><EFBFBD><EFBFBD>λֵ; 0--15 <20><>Ӧ˥<D3A6><CBA5>ֵΪ -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12
|
|||
|
|
// chopperMode==1ʱ, <20><><EFBFBD>Ҳ<EFBFBD>ƫ<EFBFBD><C6AB>
|
|||
|
|
u32 hysteresisStart; // chopperMode==0ʱ, ˥<><CBA5><EFBFBD><EFBFBD>ʼֵ, ˥<><CBA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0--7<><37>hysteresisEnd <20><><EFBFBD><EFBFBD> 1 -- 8
|
|||
|
|
// chopperMode==1ʱ, <20><>˥ʱ<CBA5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ʱ<><CAB1> = (((hysteresisDecay&0x02) << 2) | (hysteresisStart&0x07)) * 32 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 tOff; // <20><><EFBFBD><EFBFBD>˥<EFBFBD><CBA5><EFBFBD>εij<CEB5><C4B3><EFBFBD>ʱ<EFBFBD><CAB1>; 1, TBL(blankTime) <20><>С 24 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 2--15, ʹ<>ù<EFBFBD>ʽ 12 + (32 x tOffAndDisable) <20><>С 64 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
|
|||
|
|
u32 enable; // mosfet<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> == 0, <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; = 1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
}TChopperConfig;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define TBL 0x18000 // 2<><32>λ
|
|||
|
|
|
|||
|
|
#define CHM 0x04000
|
|||
|
|
#define RNDTF 0x02000
|
|||
|
|
#define HDEC 0x01800 // 2<><32>λ
|
|||
|
|
#define HEND 0x00780 // 4<><34>λ
|
|||
|
|
#define HSTRT 0x00070 // 3<><33>λ
|
|||
|
|
#define TOFF 0x0000F // 4<><34>λ
|
|||
|
|
|
|||
|
|
#define DRIVE_OFF 0
|
|||
|
|
#define DRIVE_ON 1
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> (coolStep <20><><EFBFBD><EFBFBD>)
|
|||
|
|
|
|||
|
|
#ifdef SMARTEN
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 smartIMin; // <20><><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>; = 0<><30>1/2<>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>; = 1, 1/4<>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>
|
|||
|
|
u32 smartDownStep; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ٶ<EFBFBD>; 00<30><30>ÿ 32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˥<EFBFBD><CBA5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сһ<D0A1><D2BB><EFBFBD><EFBFBD>λ; 01<30><31>ÿ 8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˥<EFBFBD><CBA5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сһ<D0A1><D2BB><EFBFBD><EFBFBD>λ; 10<31><30>ÿ 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˥<EFBFBD><CBA5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сһ<D0A1><D2BB><EFBFBD><EFBFBD>λ; 11<31><31>ÿ1<C3BF><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˥<EFBFBD><CBA5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сһ<D0A1><D2BB><EFBFBD><EFBFBD>λ
|
|||
|
|
u32 smartStallLevelMax; // <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ص<EFBFBD>˥<EFBFBD><CBA5>ֵ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ>=(SEMIN+SEMAX+1)*32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ȫֵ<C8AB><D6B5> <20>趨<EFBFBD><E8B6A8>Χ 0--15
|
|||
|
|
u32 smartUpStep; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 00: ÿ 1 <20><><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ; 01: ÿ 2 <20><><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ; 00: ÿ 4 <20><><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ; 00: ÿ 8 <20><><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ;
|
|||
|
|
u32 smartStallLevelMin; // <20><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ<EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ʹ<EFBFBD><CAB9>; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ < SEMIN*32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ǶȽ<C7B6><C8BD><EFBFBD><EFBFBD><EFBFBD>; 0<><30><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 1--15 <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ
|
|||
|
|
}TSmartEnergyControl;
|
|||
|
|
|
|||
|
|
#define SEIMIN 0x08000
|
|||
|
|
|
|||
|
|
#define SEND 0x06000 // 2<><32>λ
|
|||
|
|
#define SEMAX 0x00F00 // 4<><34>λ
|
|||
|
|
#define SEUP 0x00060 // 2<><32>λ
|
|||
|
|
#define SEMIN 0x0000F // 4<><34>λ
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
// ʧ<>ٱ<EFBFBD><D9B1><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>趨<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
|
|||
|
|
#ifdef SGCSCONF
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 filterEnable; // ʹ<><CAB9>ʧ<EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD>˲<EFBFBD>; 0, <20><>ģʽ, <20><><EFBFBD>췴Ӧʱ<D3A6><CAB1>; 1, <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ÿ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>θ<EFBFBD><CEB8>£<EFBFBD><C2A3>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD>ı仯<C4B1><E4BBAF><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE><EFBFBD>;
|
|||
|
|
s32 stallGuardThreshold; // ʧ<>ټ<EFBFBD><D9BC>ֵⷧ<E2B7A7>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>ֵԽ<D6B5><D4BD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>, ʧ<><CAA7>ʱ<EFBFBD><CAB1>ת<EFBFBD><D7AA>Խ<EFBFBD><D4BD>; <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>÷<EFBFBD>ΧΪ-64 -- +63 һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>-10
|
|||
|
|
u32 currentScale; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ֵ 0--31 <20><>Ӧ 1/32 -- 32/32. <20><><EFBFBD><EFBFBD> CS = 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1/32<33><32>
|
|||
|
|
|
|||
|
|
}TStallGuardConfig;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define SFILT 0x10000
|
|||
|
|
#define SGT 0x07F00 // 7<><37>λ
|
|||
|
|
#define CS 0x0001F // 5<><35>λ
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD>üĴ<C3BC><C4B4><EFBFBD>
|
|||
|
|
|
|||
|
|
#ifdef DRVCONF
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 testMode; // Ϊ<><CEAA><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>; һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> 1 ʱ<><CAB1>SG_TST <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>ֵ, TEST_ANA <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ͨ<EFBFBD><CDA8> SGT1 <20><> SGT0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 slopeHighSide; // <20>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>; 00<30><30><EFBFBD><EFBFBD>Сֵ; 01<30><31><EFBFBD><EFBFBD>Сֵ+tc; 10<31><30><EFBFBD>м<EFBFBD>ֵ+tc 11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ; <20><><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ֵ<E8B6A8><D6B5>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ǿ<EFBFBD>ȵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 slopeLowSide; // <20>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>; 00<30><30>01<30><31><EFBFBD><EFBFBD>Сֵ; 10<31><30><EFBFBD>м<EFBFBD>ֵ; 11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
u32 protectionDisable; // <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>; 0, ʹ<><CAB9>; 1, <20>ر<EFBFBD>
|
|||
|
|
u32 protectionTimer; // <20><>·<EFBFBD><C2B7><EFBFBD>ⶨʱ<E2B6A8><CAB1>; 00<30><30>3.2us<EFBFBD><EFBFBD>01<EFBFBD><EFBFBD>1.6us<EFBFBD><EFBFBD>10<EFBFBD><EFBFBD>1.2us<EFBFBD><EFBFBD>0.8us
|
|||
|
|
u32 stepDirDisable; // <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>; 0<><30>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ģʽ<C4A3><CABD>1<EFBFBD><31>ʹ<EFBFBD><CAB9> SPI ģʽ<C4A3><CABD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ģʽ<C4A3><CABD>
|
|||
|
|
u32 vSenseScale; // <20><><EFBFBD><EFBFBD><EFBFBD>趨<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>߽<EFBFBD>; 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹֵ<D1B9><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 305mV; 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹֵ<D1B9><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 165mV. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ϊ31<33><31>DACֵΪ255)
|
|||
|
|
u32 readBackSelect; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λѡ<CEBB><D1A1>, 00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CEA2>λ<EFBFBD>ã<EFBFBD>01<30><31><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5>10<31><30><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4><CAB9>
|
|||
|
|
}TDriverConfig;
|
|||
|
|
|
|||
|
|
#define TST 0x10000
|
|||
|
|
#define SLPH 0x0C000
|
|||
|
|
#define SLPL 0x03000
|
|||
|
|
|
|||
|
|
#define DISS2G 0x00400
|
|||
|
|
#define TS2G 0x00300
|
|||
|
|
#define SDOFF 0x00080
|
|||
|
|
#define VSENSE 0x00040
|
|||
|
|
#define RDSEL 0x00030
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1>Ϣ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 phases; // <20><><EFBFBD><EFBFBD>: 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OA1<41><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OA2<41><32><EFBFBD>š<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OA2<41><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OA1<41><31><EFBFBD>š<EFBFBD>
|
|||
|
|
u32 mSteps; // <><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STEP/DIRģʽ<C4A3><CABD><EFBFBD><EFBFBD>ȦA<C8A6><41><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><D2B1>е<EFBFBD><EFBFBD><CEA2>λ<EFBFBD>á<EFBFBD>
|
|||
|
|
u32 stallGuard; // ʧ<>ټ<EFBFBD><D9BC><EFBFBD>ֵ
|
|||
|
|
u32 smartEnergy; // <20><><EFBFBD><EFBFBD>ֵ
|
|||
|
|
u32 flags; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
|
|||
|
|
}TReadStatus;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define MSTEP 0xFFC00
|
|||
|
|
#define SG 0xFFC00
|
|||
|
|
#define SE 0x03C00
|
|||
|
|
|
|||
|
|
|
|||
|
|
// flags <20><><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_STST 0x0080 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<D6B8><CABE> 1<><31>ָʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2^20 <20>η<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_OLB 0x0040 // <20><><EFBFBD><EFBFBD>B <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<D6B8><CABE><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ 1<><31> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1/16 ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_OLA 0x0020 // <20><><EFBFBD><EFBFBD>A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ<D6B8><CABE><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ 1<><31> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1/16 ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_S2GB 0x0010 // <20><><EFBFBD><EFBFBD>B <20><>·ָʾ, <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_S2GA 0x0008 // <20><><EFBFBD><EFBFBD>A <20><>·ָʾ, <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_OTPW 0x0004 // <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ִ<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
#define ST_OT 0x0002 // <20><><EFBFBD>±<EFBFBD>־, 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ST_SG 0x0001 // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>ֵ<EFBFBD><D6B5>SG <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifndef TMC260_DRV_NUM
|
|||
|
|
#define TMC260_DRV_NUM 0
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (TMC260_DRV_NUM > 6)
|
|||
|
|
#unfine TMC260_DRV_NUM
|
|||
|
|
#define TMC260_DRV_NUM 6
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#if (TMC260_DRV_NUM < 0)
|
|||
|
|
#unfine TMC260_DRV_NUM
|
|||
|
|
#define TMC260_DRV_NUM 0
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
SC_MOTO1=1,
|
|||
|
|
SC_MOTO2,
|
|||
|
|
SC_MOTO3,
|
|||
|
|
SC_MOTO4,
|
|||
|
|
SC_MOTO5,
|
|||
|
|
SC_MOTO6,
|
|||
|
|
}SpiCs;
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
void WriteStepDirConfig(SpiCs moto);
|
|||
|
|
void WriteSpiCtrlConfig(SpiCs moto);
|
|||
|
|
void WriteChopperConfig(SpiCs moto);
|
|||
|
|
void WriteStallGuardConfig(SpiCs moto);
|
|||
|
|
void WriteSmartEnergyConfig(SpiCs moto);
|
|||
|
|
void WriteDriverConfig(SpiCs moto);
|
|||
|
|
void ReadDriverState(SpiCs moto);
|
|||
|
|
|
|||
|
|
void InitMotorDrivers(SpiCs moto);
|
|||
|
|
|
|||
|
|
void SetStepDirMStepRes(SpiCs moto, u32 microstepResolution);
|
|||
|
|
void SetStepDirInterpolation(SpiCs moto, u32 interpolation);
|
|||
|
|
void SetStepDirDoubleEdge(SpiCs moto, u32 doubleEdge);
|
|||
|
|
u32 GetStepDirMStepRes(SpiCs moto);
|
|||
|
|
u32 GetStepDirInterpolation(SpiCs moto);
|
|||
|
|
u32 GetStepDirDoubleEdge(SpiCs moto);
|
|||
|
|
void SetChopperBlankTime(SpiCs moto, u32 blankTime);
|
|||
|
|
void SetChopperMode(SpiCs moto, u32 mode);
|
|||
|
|
void SetChopperRandomTOff(SpiCs moto, u32 randomTOff);
|
|||
|
|
void SetChopperHysteresisDecay(SpiCs moto, u32 hysteresisDecay);
|
|||
|
|
void SetChopperHysteresisEnd(SpiCs moto, u32 hysteresisEnd);
|
|||
|
|
void SetChopperHysteresisStart(SpiCs moto, u32 hysteresisStart);
|
|||
|
|
void SetChopperTOff(SpiCs moto, u32 tOff);
|
|||
|
|
u32 GetChopperBlankTime(SpiCs moto);
|
|||
|
|
u32 GetChopperMode(SpiCs moto);
|
|||
|
|
u32 GetChopperRandomTOff(SpiCs moto);
|
|||
|
|
u32 GetChopperHysteresisDecay(SpiCs moto);
|
|||
|
|
u32 GetChopperHysteresisEnd(SpiCs moto);
|
|||
|
|
u32 GetChopperHysteresisStart(SpiCs moto);
|
|||
|
|
u32 GetChopperTOff(SpiCs moto);
|
|||
|
|
void SetSmartEnergyIMin(SpiCs moto, u32 smartIMin);
|
|||
|
|
void SetSmartEnergyDownStep(SpiCs moto, u32 smartDownStep);
|
|||
|
|
void SetSmartEnergyStallLevelMax(SpiCs moto, u32 stallLevelMax);
|
|||
|
|
void SetSmartEnergyUpStep(SpiCs moto, u32 smartUpStep);
|
|||
|
|
void SetSmartEnergyStallLevelMin(SpiCs moto, u32 stallLevelMin);
|
|||
|
|
u32 GetSmartEnergyIMin(SpiCs moto);
|
|||
|
|
u32 GetSmartEnergyDownStep(SpiCs moto);
|
|||
|
|
u32 GetSmartEnergyStallLevelMax(SpiCs moto);
|
|||
|
|
u32 GetSmartEnergyUpStep(SpiCs moto);
|
|||
|
|
u32 GetSmartEnergyStallLevelMin(SpiCs moto);
|
|||
|
|
void SetStallGuardFilter(SpiCs moto, u32 enable);
|
|||
|
|
void SetStallGuardThreshold(SpiCs moto, s32 threshold);
|
|||
|
|
void SetStallGuardCurrentScale(SpiCs moto, u32 currentScale);
|
|||
|
|
u32 GetStallGuardFilter(SpiCs moto);
|
|||
|
|
s32 GetStallGuardThreshold(SpiCs moto);
|
|||
|
|
u32 GetStallGuardCurrentScale(SpiCs moto);
|
|||
|
|
void SetDriverSlopeHighSide(SpiCs moto, u32 slopeHighSide);
|
|||
|
|
void SetDriverSlopeLowSide(SpiCs moto, u32 slopeLowSide);
|
|||
|
|
void SetDriverDisableProtection(SpiCs moto, u32 disableProtection);
|
|||
|
|
void SetDriverProtectionTimer(SpiCs moto, u32 protectionTimer);
|
|||
|
|
void SetDriverStepDirectionOff(SpiCs moto, u32 sDOff);
|
|||
|
|
void SetDriverVSenseScale(SpiCs moto, u32 scale);
|
|||
|
|
void SetDriverReadSelect(SpiCs moto, u32 readSelect);
|
|||
|
|
void SetDriverTestMode(SpiCs moto, u32 testMode);
|
|||
|
|
u32 GetDriverSlopeHighSide(SpiCs moto);
|
|||
|
|
u32 GetDriverSlopeLowSide(SpiCs moto);
|
|||
|
|
u32 GetDriverDisableProtection(SpiCs moto);
|
|||
|
|
u32 GetDriverProtectionTimer(SpiCs moto);
|
|||
|
|
u32 GetDriverStepDirectionOff(SpiCs moto);
|
|||
|
|
u32 GetDriverVSenseScale(SpiCs moto);
|
|||
|
|
u32 GetDriverReadSelect(SpiCs moto);
|
|||
|
|
u32 GetDriverTestMode(SpiCs moto);
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
u32 GetPhases(SpiCs moto);
|
|||
|
|
u32 GetMStepPos(SpiCs moto);
|
|||
|
|
u32 GetStallGuard(SpiCs moto);
|
|||
|
|
u32 GetSmartEnergy(SpiCs moto);
|
|||
|
|
u32 GetDriverFlag(SpiCs moto);
|
|||
|
|
|
|||
|
|
void DriveDisable(SpiCs moto);
|
|||
|
|
void DriveEnable(SpiCs moto);
|
|||
|
|
|
|||
|
|
//------------------------------------------------------------
|
|||
|
|
|
|||
|
|
void InitTmc260(void);
|
|||
|
|
|
|||
|
|
void SetAsDriver(void);
|
|||
|
|
|
|||
|
|
int GetResConfigFromLvnum(int subd);
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|