最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

使用STM32控制TMC5160驅動42步進電機

2022-10-23 11:45 作者:c_云深不知處  | 我要投稿


首先先來了解一下TMC5160的3種工作模式

TMC5160通過兩個引腳來控制它的工作模式SD_MODESPI_MODE

1、當SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模式1(SPI控制模式)。在該模式下,用戶通過SPI接口來設置TMC5160的寄存器。

TMC5160使用自己的梯形曲線發(fā)生器來控制步進電機轉動,用戶需要設置:開始運動速度VSTART、第一段折線末速度V1、最大速度VMAX、停止速度VSTOP、第一段折線的加速度A1、第二段折線加速度AMAX、第四段折線的減速度DMAX、第五段折線的減速度D1。把上面的參數(shù)設置好,再設置工作模式:速度模式和位置模式。最后再設置目標位置。

如果是速度模式運行,不需要設置目標位置,電機就會開始轉動。如果是位置模式,則需要設置目標位置,且目標位置與電機當前位置值不同電機才會轉動。下圖中的紅線是電機的實際速度,不管是速度模式還是位置模式,電機的運行過程會按照下圖來進行。

2、當SD_MODE接高電平,SPI_MODE拉高,TMC5160工作在模式2(SPI+S/D)。在該模式下,用戶通過SPI接口來設置TMC5160的寄存器。TMC5160的功能和DRV8825類似,外界通過脈沖和方向引腳來控制步進電機運動。

3、當SD_MODE接高電平,SPI_MODE接地,TMC5160工作在模式3(S/D獨立模式)。在該模式下,SPI接口失能,TMC5160的工作狀態(tài)由CFG引腳配置,外界通過脈沖和方向引腳來控制步進電機運動。TMC5160可以完全獨立工作,不需要接CPU。

目前是實現(xiàn)電機的簡單轉動,下面將用模式三來控制電機。

該模式下不需要通過SPI通訊,配置相關GPIO引腳和發(fā)送頻率一定的正弦波即可。TMC5160的GPIO和STM32的引腳對應如下表:

先將SD_MODE接地,SPI_MODE拉高(PB1=1,PB=0),進入獨立模式。

其它引腳的參數(shù)可以參考TMC5160數(shù)據(jù)手冊根據(jù)自己的需求進行設置。初始化程序如下:

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后繼續(xù)

? ? ? ? ? ? delay_ms(2000);

? ? ? ? ? ? LED=0;

? ? ? ? ? ? COUNT=0;

? ? ? ? }

? ? }

}

實現(xiàn)的功能是讓電機轉1圈后停2s后繼續(xù)。

采用四相電機,脈沖數(shù)控制電機轉多少,電機步距角位1.8°,一個脈沖轉1.8°,200個脈沖一圈,采用16細分,那么一圈就需要3200個脈沖。

電機轉動的速度就由脈沖頻率決定,可以根據(jù)細分及脈沖頻率來換算電機實際轉速。


使用STM32控制TMC5160驅動42步進電機的評論 (共 條)

分享到微博請遵守國家法律
梁平县| 班玛县| 瑞昌市| 博客| 天门市| 衡阳县| 伊川县| 莆田市| 启东市| 石景山区| 洛川县| 新化县| 云梦县| 原阳县| 根河市| 永平县| 贞丰县| 仙居县| 木里| 屏山县| 德化县| 东乡| 岳阳市| 保德县| 苍溪县| 丽水市| 永丰县| 乌什县| 诸暨市| 汉源县| 昌黎县| 新余市| 盐源县| 普兰店市| 措勤县| 汉沽区| 奉新县| 黑水县| 深州市| 德化县| 浮山县|