TMC5160.h
#ifndef _TMC5160_h_
#define _TMC5160_h_
#include "main.h"
#define configModeSTEP 0//定义5160步进模式对应配置值
#define configModeLocation 1//定义5160步进模式对应配置值
#define configmaxCurrent 4.7 //定义芯片的最大电流
#define configDirLeft1 1 //定义电机1的右方向为1
#define configDirRight1 0 //定义电机1的左方向为1
#define configDirLeft2 1 //定义电机1的右方向为1
#define configDirRight2 0 //定义电机1的左方向为1
//EleMchinery_SPI SPI初始化函数
//#define SPI_SendData_OneByte(TxData) SPI1_ReadWriteByte(u16 TxData)
//#define SPIInit_ConfigTMC5160() SPI1_Init()
//EleMchinery_CS SPI通信管脚
#define TMC5160_SPICS1_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_14)
#define TMC5160_SPICS2_IOInit() GPIO_OUT_Init(GPIO_A,GPIO_Pin_4)
#define TMC5160_SPICS1_L() GPIO_ResetBits(GPIOC,GPIO_Pin_14)
#define TMC5160_SPICS2_L() GPIO_ResetBits(GPIOA,GPIO_Pin_4)
#define TMC5160_SPICS1_H() GPIO_SetBits(GPIOC,GPIO_Pin_14)
#define TMC5160_SPICS2_H() GPIO_SetBits(GPIOA,GPIO_Pin_4)
//EleMchinery_DRV_ENN 使能管脚
#define TMC5160_DRVENN1_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_15)
#define TMC5160_DRVENN2_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_0)
#define TMC5160_DRVENN1_L() GPIO_ResetBits(GPIOC,GPIO_Pin_15)
#define TMC5160_DRVENN2_L() GPIO_ResetBits(GPIOC,GPIO_Pin_0)
#define TMC5160_DRVENN1_H() GPIO_SetBits(GPIOC,GPIO_Pin_15)
#define TMC5160_DRVENN2_H() GPIO_SetBits(GPIOC,GPIO_Pin_0)
//EleMchinery_Step 步进引脚
#define TMC5160_Step1_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_13)
#define TMC5160_Step2_IOInit() GPIO_OUT_Init(GPIO_A,GPIO_Pin_0)
#define TMC5160_Step1_H() GPIO_SetBits(GPIOC,GPIO_Pin_13)
#define TMC5160_Step2_H() GPIO_SetBits(GPIOA,GPIO_Pin_0)
#define TMC5160_Step1_L() GPIO_ResetBits(GPIOC,GPIO_Pin_13)
#define TMC5160_Step2_L() GPIO_ResetBits(GPIOA,GPIO_Pin_0)
//EleMchinery_DIR 方向引脚
#define TMC5160_DIR1_IOInit() GPIO_OUT_Init(GPIO_E,GPIO_Pin_6)
#define TMC5160_DIR2_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_3)
#define TMC5160_DIR_H1() GPIO_SetBits(GPIOE,GPIO_Pin_6)
#define TMC5160_DIR_H2() GPIO_SetBits(GPIOC,GPIO_Pin_3)
#define TMC5160_DIR_L1() GPIO_ResetBits(GPIOE,GPIO_Pin_6)
#define TMC5160_DIR_L2() GPIO_ResetBits(GPIOC,GPIO_Pin_3)
//EleMchinery_SDMode SD模式选择引脚
#define TMC5160_SDMode1_IOInit() GPIO_OUT_Init(GPIO_E,GPIO_Pin_5)
#define TMC5160_SDMode2_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_2)
#define TMC5160_SDMode1_H() GPIO_SetBits(GPIOE,GPIO_Pin_5)
#define TMC5160_SDMode2_H() GPIO_SetBits(GPIOC,GPIO_Pin_2)
#define TMC5160_SDMode1_L() GPIO_ResetBits(GPIOE,GPIO_Pin_5)
#define TMC5160_SDMode2_L() GPIO_ResetBits(GPIOC,GPIO_Pin_2)
//EleMchinery_SPIMode SPI模式选择引脚
#define TMC5160_SPIMode1_IOInit() GPIO_OUT_Init(GPIO_E,GPIO_Pin_4)
#define TMC5160_SPIMode2_IOInit() GPIO_OUT_Init(GPIO_C,GPIO_Pin_1)
#define TMC5160_SPIMode1_H() GPIO_SetBits(GPIOE,GPIO_Pin_4)
#define TMC5160_SPIMode2_H() GPIO_SetBits(GPIOC,GPIO_Pin_1)
#define TMC5160_SPIMode1_L() GPIO_ResetBits(GPIOE,GPIO_Pin_4)
#define TMC5160_SPIMode2_L() GPIO_ResetBits(GPIOC,GPIO_Pin_1)
typedef struct
{
uint8_t setMode;//运动模式设置
uint8_t maxCurrent;//电流额度,31~256,最大4.7A,根据50mΩ
uint8_t runCurrent;//运动电流0.6A~6.6A,对应值为6~60,小数点一位,采样电阻采用50mR
uint8_t standbCurrent;//静止电流0.6A~6.6A,对应值为6~60,小数点一位,采样电阻采用50mR
uint8_t subdivision;//电机细分
uint32_t moveStepNumber;//步进模式下的运动走多少步
int32_t StepNumber;//电机物理位置步数记录
uint16_t oneAcceleration;//电机第一阶段加速度无符号16位有效值0~2^16
uint32_t oneSpeed;//电机第一阶段目标速度无符号20位有效值0~2^20
uint16_t Acceleration;//电机加速度无符号16位有效值0~2^16
uint32_t maxSpeed;//电机最大速度有符号16位 有效值0~2^20
uint16_t DecapAcceleration;//电机减速度无符号16位有效值0~2^16
uint16_t oneDecapAcceleration;//电机减速度最后一个阶段
uint16_t startSpeed;//电机启动速度有符号16位 有效值0~2^16
uint16_t stopSpeed;//电机关闭速度有符号16位 有效值0~2^16
int32_t XACTUAL; //电机实际位置 有效值0~+-2^31
int32_t XTARGET; //电机目标位置 有效值0~+-2^31
} SystemTMC5160Data;
extern SystemTMC5160Data TMC5160_1;
extern SystemTMC5160Data TMC5160_2;
void TMC5160_IO_Init(uint8_t num);
void TMC5160_SPI_CS_OPEN(uint8_t num);
void TMC5160_SPI_CS_CLOSE(uint8_t num);
uint8_t TMC5160_SPI_SendData(uint8_t num,uint16_t Writerdata);
void TMC5160_MODE_Set(uint8_t Num,uint8_t setMode,SystemTMC5160Data *moveData);
void TMC5160_MoveParameterSet(uint8_t Num,uint8_t setMode,SystemTMC5160Data *moveData,uint8_t DIR,uint32_t endLocation);
void TMC5160_Writer(uint8_t Num,uint8_t adr,uint8_t data1,uint8_t data2,uint8_t data3,uint8_t data4);
void TMC5160_SPI_MODE_L(uint8_t num);
void TMC5160_STEP_H(uint8_t num);
void TMC5160_STEP_L(uint8_t Num);
void TMC5160_OPEN(uint8_t Num);
void TMC5160_Close(uint8_t Num);
uint8_t TMC5160_Location_read(uint8_t Num);
#endif
TMC5160.c
/****************
函数名称:TMC5160_IO_Init_SPI
函数功能: 硬件初始化——SPI
传入参数:无
输出参数:无
****************/
void TMC5160_IO_Init_SPI(uint8_t num)
{
// SPI1_Init();//SPI引脚已经独立在main中初始化
switch(num)
{
case 1:
TMC5160_SPICS1_IOInit();//CS1初始化
break;
case 2:
TMC5160_SPICS2_IOInit();//CS2初始化
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
}
}
/****************
函数名称:TMC5160_SPI_CS_OPEN
函数功能: SPI片选打开
传入参数:num第几个电机
输出参数:无
****************/
void TMC5160_SPI_CS_OPEN(uint8_t num)
{
switch(num)
{
case 1:
TMC5160_SPICS1_L();
break;
case 2:
TMC5160_SPICS2_L();
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6: