/*********************************************************************************************/
【*】 程序簡介
-工程名稱:步進電機-S形加減速實現定長移動
-實驗平臺: 野火STM32 F407 開發板
-MDK版本:5.30
-ST固件庫版本:1.8.0
【 !】功能簡介:
實現步進電機-S形加減速的控制
【 !】實驗操作:
下載本程序,復位開發板即可。
【 !!】注意事項:
步進電機驅動器使用32細分,加減速函數入口參數和定時器TIM_PRESCALER值
不一定適合所有電機和所有場景,需要根據實際需求調整,入口參數最重要,
其次是TIM_PRESCALER值,42步進電機建議用TIM_PRSCALER為2,57步進電機建
議用TIM_PRSCALER為24,86步進電機建議用TIM_PRSCALER為24。
/*********************************************************************************************/
串口(TTL-USB TO UART):
CH340的收發引腳與STM32的發收引腳相連。
RX<--->PB6
TX<--->PB7a
步進電機驅動器接口1:
PUL+<--->VCOM
PUL-<--->PI5
DIR+<--->VCOM
DIR-<--->PE1
ENA+<--->VCOM
ENA-<--->PE0
/*********************************************************************************************/
【*】 時鐘
A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz
B.各總線運行時鐘:
-系統時鐘 = SYCCLK = AHB1 = 168MHz
-APB2 = 84MHz
-APB1 = 42MHz
C.浮點運算單元:
不使用
/*********************************************************************************************/
【*】 版本
-程序版本:1.0
/*********************************************************************************************/
【*】 參考
野火STM32電機驅動
/*********************************************************************************************/
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- #include "stm32f4xx.h"
- #include "./usart/bsp_debug_usart.h"
- #include "./stepper/bsp_stepper_S_speed.h"
- #include "./stepper/bsp_stepper_init.h"
- #include "./led/bsp_led.h"
- #include "./key/bsp_key.h"
- /**
- * @brief 主函數
- * @param 無
- * @retval 無
- */
- int main(void)
- {
- HAL_Init();
- HAL_InitTick(0);
-
- /* 初始化系統時鐘為168MHz */
- SystemClock_Config();
-
- /* 按鍵初始化 */
- Key_GPIO_Config();
-
- /*初始化USART 配置模式為 115200 8-N-1,中斷接收*/
- DEBUG_USART_Config();
- printf("歡迎使用野火 電機開發板 步進電機S形加減速定長移動——單軸 例程\r\n");
- printf("按下按鍵1 按鍵2 可開始加減速演示\r\n");
- /*步進電機初始化*/
- stepper_Init();
-
- while (1)
- {
- if(Key_Scan(KEY1_GPIO_PORT, KEY1_PIN) == KEY_ON)
- {
- for(uint8_t i = 0; i < 6; i++)
- {
- Stepper_Move_S(60, 1784, 0.1f, 5 * SPR);
- while(Stepper.status != STOP);
- HAL_Delay(10);
- Stepper_Move_S(60, 1784, 0.1f, -5 * SPR);
- while(Stepper.status != STOP);
- HAL_Delay(10);
- }
- }
- if(Key_Scan(KEY2_GPIO_PORT, KEY2_PIN) == KEY_ON)
- {
- Stepper_Move_S(60, 1500, 0.28f, 30 * SPR);
- }
- }
- }
- /**
- * @brief System Clock Configuration
- * The system Clock is configured as follow :
- * System Clock source = PLL (HSE)
- * SYSCLK(Hz) = 168000000
- * HCLK(Hz) = 168000000
- * AHB Prescaler = 1
- * APB1 Prescaler = 4
- * APB2 Prescaler = 2
- * HSE Frequency(Hz) = 8000000
- * PLL_M = 25
- * PLL_N = 336
- * PLL_P = 2
- * PLL_Q = 7
- * VDD(V) = 3.3
- * Main regulator output voltage = Scale1 mode
- * Flash Latency(WS) = 5
- * @param None
- * @retval None
- */
- void SystemClock_Config(void)
- {
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_OscInitTypeDef RCC_OscInitStruct;
- /* Enable Power Control clock */
- __HAL_RCC_PWR_CLK_ENABLE();
-
- /* The voltage scaling allows optimizing the power consumption when the device is
- clocked below the maximum system frequency, to update the voltage scaling value
- regarding system frequency refer to product datasheet. */
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
-
- /* Enable HSE Oscillator and activate PLL with HSE as source */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = 25;
- RCC_OscInitStruct.PLL.PLLN = 336;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
- RCC_OscInitStruct.PLL.PLLQ = 7;
- if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- while(1) {};
- }
-
- /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
- clocks dividers */
- RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
- if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
- {
- while(1) {};
- }
- /* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported */
- if (HAL_GetREVID() == 0x1001)
- {
- /* Enable the Flash prefetch */
- __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
- }
- }
復制代碼 Keil代碼下載(附件內只含代碼,不含其他任何文件):
代碼.7z
(966.6 KB, 下載次數: 35)
2022-11-16 16:13 上傳
點擊文件名下載附件
步進電機算法 下載積分: 黑幣 -5
|