首先先來(lái)了解一下TMC5160的3種工作模式
TMC5160通過(guò)兩個(gè)引腳來(lái)控制它的工作模式:SD_MODE和SPI_MODE。
1、當(dāng)SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模式1(SPI控制模式)。在該模式下,用戶通過(guò)SPI接口來(lái)設(shè)置TMC5160的寄存器。
TMC5160使用自己的梯形曲線發(fā)生器來(lái)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng),用戶需要設(shè)置:開始運(yùn)動(dòng)速度VSTART、第一段折線末速度V1、最大速度VMAX、停止速度VSTOP、第一段折線的加速度A1、第二段折線加速度AMAX、第四段折線的減速度DMAX、第五段折線的減速度D1。把上面的參數(shù)設(shè)置好,再設(shè)置工作模式:速度模式和位置模式。最后再設(shè)置目標(biāo)位置。
如果是速度模式運(yùn)行,不需要設(shè)置目標(biāo)位置,電機(jī)就會(huì)開始轉(zhuǎn)動(dòng)。如果是位置模式,則需要設(shè)置目標(biāo)位置,且目標(biāo)位置與電機(jī)當(dāng)前位置值不同電機(jī)才會(huì)轉(zhuǎn)動(dòng)。下圖中的紅線是電機(jī)的實(shí)際速度,不管是速度模式還是位置模式,電機(jī)的運(yùn)行過(guò)程會(huì)按照下圖來(lái)進(jìn)行。
2、當(dāng)SD_MODE接高電平,SPI_MODE拉高,TMC5160工作在模式2(SPI+S/D)。在該模式下,用戶通過(guò)SPI接口來(lái)設(shè)置TMC5160的寄存器。TMC5160的功能和DRV8825類似,外界通過(guò)脈沖和方向引腳來(lái)控制步進(jìn)電機(jī)運(yùn)動(dòng)。
3、當(dāng)SD_MODE接高電平,SPI_MODE接地,TMC5160工作在模式3(S/D獨(dú)立模式)。在該模式下,SPI接口失能,TMC5160的工作狀態(tài)由CFG引腳配置,外界通過(guò)脈沖和方向引腳來(lái)控制步進(jìn)電機(jī)運(yùn)動(dòng)。TMC5160可以完全獨(dú)立工作,不需要接CPU。
目前是實(shí)現(xiàn)電機(jī)的簡(jiǎn)單轉(zhuǎn)動(dòng),下面將用模式三來(lái)控制電機(jī)。
該模式下不需要通過(guò)SPI通訊,配置相關(guān)GPIO引腳和發(fā)送頻率一定的正弦波即可。TMC5160的GPIO和STM32的引腳對(duì)應(yīng)如下表:
先將SD_MODE接地,SPI_MODE拉高(PB1=1,PB=0),進(jìn)入獨(dú)立模式。
其它引腳的參數(shù)可以參考TMC5160數(shù)據(jù)手冊(cè)根據(jù)自己的需求進(jìn)行設(shè)置。初始化程序如下:
void TMC5160_Init3(void) //模式三獨(dú)立模式
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時(shí)鐘
__HAL_RCC_GPIOA_CLK_ENABLE(); //開啟GPIOA時(shí)鐘
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方波,方波的頻率決定電機(jī)轉(zhuǎn)動(dòng)速度,可以用PWM通道的方式搞定,也可以用定時(shí)器中斷來(lái)做,這邊采用定時(shí)器中斷的方法,
例如,STM32F103的時(shí)鐘頻率為72M,分頻設(shè)為72,裝載值設(shè)為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; //轉(zhuǎn)一圈,停2s后繼續(xù)
delay_ms(2000);
LED=0;
COUNT=0;
}
}
}
實(shí)現(xiàn)的功能是讓電機(jī)轉(zhuǎn)1圈后停2s后繼續(xù)。
采用四相電機(jī),脈沖數(shù)控制電機(jī)轉(zhuǎn)多少,電機(jī)步距角位1.8°,一個(gè)脈沖轉(zhuǎn)1.8°,200個(gè)脈沖一圈,采用16細(xì)分,那么一圈就需要3200個(gè)脈沖。
電機(jī)轉(zhuǎn)動(dòng)的速度就由脈沖頻率決定,可以根據(jù)細(xì)分及脈沖頻率來(lái)?yè)Q算電機(jī)實(shí)際轉(zhuǎn)速。
審核編輯 黃昊宇
-
電機(jī)控制
+關(guān)注
關(guān)注
3534文章
1879瀏覽量
268817 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
356010 -
步進(jìn)電機(jī)
+關(guān)注
關(guān)注
150文章
3111瀏覽量
147486
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論