一、TMC2660有SPI驱动方式与SPI配置+PWM驱动,我们经常使用的是第二种,如采用第一种经过SPI通讯会动作可能会有延迟
二、SPI配置主要对驱动电流与细分步数进行配置
spi_send_data(MOTOR_A, 0x901B4);
spi_send_data(MOTOR_A, REG_SGCSCONF | 14); //后5位为电流大小
spi_send_data(MOTOR_A, REG_DRVCONF | GENERAL_CURRENT); //0X0010->Vfs=310mV(大电流模式) 0X0050->Vfs=165mV(普通模式)
spi_send_data(MOTOR_A, REG_DRVCTRL | MICROSTEP_16);//16细分
Motor_S_Type_ARRAY[MOTOR_A].read_response = spi_send_data(MOTOR_A, 0xA8202);//0xa0202->1/2CS 0xa8202->1/4CS
电流计算公式 I = ((CS + 1)/32)(Vfs/Rsense)(1/√2),所得为电流有效值,按原理图Rsense=150mΩ。
14为电流大小数值,
三、通常步进电机停止需要半流锁止,以防止动作机构处于失控状态
if(half == HalfEn)//半流锁开启,电流设置为一半
{
Motor_S_Type_ARRAY[MOTOR_A].read_response = spi_send_data(MOTOR_A, REG_SGCSCONF | 14);
}
else if(half == HalfNot)//半流锁关闭,满电流运行
{
Motor_S_Type_ARRAY[MOTOR_A].read_response = spi_send_data(MOTOR_A, REG_SGCSCONF | 29);
}
四、PWM产生,可使用IO翻转的方式,但会占用大量中断时间,我更偏向于使用硬件PWM
if( NewState==ENABLE ){
HAL_TIM_Base_Start_IT(&htim5);
}
else{
HAL_TIM_Base_Stop(&htim5);
}