TMC5160三種模式
TMC5160有三種模式
模式一:SD_MODE=0,SPI_MODE=1,在該模式下,用戶通過SPI介面來設定TMC5160的暫存器配置引數,再設定作業模式:速度模式和位置模式
模式二:SD_MODE=1,SPI_MODE=1,在該模式下,用戶通過SPI介面來設TMC5160的暫存器,TMC5160的功能和DRV8825類似,外界通過脈沖和方向引腳來控制步進電機運動
模式三:SD_MODE=1,SPI_MODE=0,在該模式下,SPI介面失能,TMC5160的作業狀態由CFG引腳配置,TMC5160可以完全獨立作業,不需要接CPU,
為實作電機的簡單轉動,下面將一下如何實作模式三
程式設計
該模式下不需要通過SPI通訊,配置相關GPIO引腳和發送頻率一定的正弦波即可,TMC5160的GPIO和STM32的引腳對應如下表:

①最重要的一點是一定要將SD_MODE接地,SPI_MODE拉高(PB1=1,PB=0),否則無法進入模式三,上述的引腳也無法實作相應功能,其它引腳的引數可以參考TMC5160資料手冊根據自己的需求進行設定,初始化程式如下:
void TMC5160_Init3(void) //模式三獨立模式
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時鐘
__HAL_RCC_GPIOA_CLK_ENABLE(); //開啟GPIOA時鐘
GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6|GPIO_PIN_5,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_12|GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15|GPIO_PIN_2|GPIO_PIN_0,GPIO_PIN_RESET);
}
②PA8需要輸入PWM方波,方波的頻率決定電機轉動速度,可以用PWM通道的方式搞定,也可以用定時器中斷來做,這邊采用定時器中斷的方法,例如,STM32F103的時鐘頻率為72M,分頻設為72,裝載值設為500,每0.5ms中斷一次,PA8電平取反,1KHZ的方波就完成了,頻率可以改變,程式如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM3_Handler))
{
COUNT++;
A8=~A8;
if(COUNT>=6400)
{
//HAL_NVIC_DisableIRQ(TIM3_IRQn);
LED=1; //轉一圈,停2s后繼續
delay_ms(2000);
LED=0;
COUNT=0;
}
}
}
上述例程的功能是讓電機轉1圈后停2s后繼續,
解釋:采用四相電機,根據脈沖讓電機轉動,一個脈沖轉1.8°,200個脈沖一圈,采用16細分,那么一圈就需要3200個脈沖,
注意:脈沖值可以自己設定,1KHZ只是個舉例,但是也不要過大或者過小,
程式下載:添加鏈接描述
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246921.html
標籤:其他
下一篇:STM32F103最小系統圖例
