找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1486|回复: 0
收起左侧

STM32单片机步进电机S型加减速算法

[复制链接]
ID:583948 发表于 2022-11-16 13:22 | 显示全部楼层 |阅读模式
/*********************************************************************************************/

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

/*********************************************************************************************/

  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f4xx.h"
  4. #include "./usart/bsp_debug_usart.h"
  5. #include "./stepper/bsp_stepper_S_speed.h"
  6. #include "./stepper/bsp_stepper_init.h"
  7. #include "./led/bsp_led.h"
  8. #include "./key/bsp_key.h"

  9. /**
  10.   * @brief  主函数
  11.   * @param  无
  12.   * @retval 无
  13.   */
  14. int main(void)
  15. {
  16.   HAL_Init();
  17.   HAL_InitTick(0);
  18.   
  19.         /* 初始化系统时钟为168MHz */
  20.         SystemClock_Config();
  21.   
  22.   /* 按键初始化 */
  23.   Key_GPIO_Config();
  24.   
  25.         /*初始化USART 配置模式为 115200 8-N-1,中断接收*/
  26.         DEBUG_USART_Config();
  27.         printf("欢迎使用野火 电机开发板 步进电机S形加减速定长移动——单轴 例程\r\n");
  28.   printf("按下按键1 按键2 可开始加减速演示\r\n");

  29.         /*步进电机初始化*/
  30.         stepper_Init();
  31.   
  32.   while (1)
  33.   {
  34.     if(Key_Scan(KEY1_GPIO_PORT, KEY1_PIN) == KEY_ON)
  35.     {
  36.       for(uint8_t i = 0; i < 6; i++)
  37.       {
  38.         Stepper_Move_S(60, 1784, 0.1f, 5 * SPR);
  39.         while(Stepper.status != STOP);
  40.         HAL_Delay(10);
  41.         Stepper_Move_S(60, 1784, 0.1f, -5 * SPR);
  42.         while(Stepper.status != STOP);
  43.         HAL_Delay(10);
  44.       }
  45.     }
  46.     if(Key_Scan(KEY2_GPIO_PORT, KEY2_PIN) == KEY_ON)
  47.     {
  48.       Stepper_Move_S(60, 1500, 0.28f, 30 * SPR);
  49.     }
  50.   }
  51. }

  52. /**
  53.   * @brief  System Clock Configuration
  54.   *         The system Clock is configured as follow :
  55.   *            System Clock source            = PLL (HSE)
  56.   *            SYSCLK(Hz)                     = 168000000
  57.   *            HCLK(Hz)                       = 168000000
  58.   *            AHB Prescaler                  = 1
  59.   *            APB1 Prescaler                 = 4
  60.   *            APB2 Prescaler                 = 2
  61.   *            HSE Frequency(Hz)              = 8000000
  62.   *            PLL_M                          = 25
  63.   *            PLL_N                          = 336
  64.   *            PLL_P                          = 2
  65.   *            PLL_Q                          = 7
  66.   *            VDD(V)                         = 3.3
  67.   *            Main regulator output voltage  = Scale1 mode
  68.   *            Flash Latency(WS)              = 5
  69.   * @param  None
  70.   * @retval None
  71.   */
  72. void SystemClock_Config(void)
  73. {
  74.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  75.   RCC_OscInitTypeDef RCC_OscInitStruct;

  76.   /* Enable Power Control clock */
  77.   __HAL_RCC_PWR_CLK_ENABLE();
  78.   
  79.   /* The voltage scaling allows optimizing the power consumption when the device is
  80.      clocked below the maximum system frequency, to update the voltage scaling value
  81.      regarding system frequency refer to product datasheet.  */
  82.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  83.   
  84.   /* Enable HSE Oscillator and activate PLL with HSE as source */
  85.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  86.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  87.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  88.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  89.   RCC_OscInitStruct.PLL.PLLM = 25;
  90.   RCC_OscInitStruct.PLL.PLLN = 336;
  91.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  92.   RCC_OscInitStruct.PLL.PLLQ = 7;
  93.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  94.   {
  95.     while(1) {};
  96.   }
  97.   
  98.   /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  99.      clocks dividers */
  100.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  101.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  102.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  103.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;  
  104.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;  
  105.   if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  106.   {
  107.     while(1) {};
  108.   }

  109.   /* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported  */
  110.   if (HAL_GetREVID() == 0x1001)
  111.   {
  112.     /* Enable the Flash prefetch */
  113.     __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
  114.   }
  115. }

复制代码
Keil代码下载(附件内只含代码,不含其他任何文件): 代码.7z (966.6 KB, 下载次数: 35)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表