/*********************************************************************************************/
【*】 程序简介
-工程名称:步进电机-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)
|