步进电机驱动非常简单,接入电机为4线A+、A-、B+、B-接到开发板的相对四个接口就行了:
image.png
然后在驱动板上面有CLK为输入时钟信号,这个信号的快慢与M0-M3来决定步进电机运行的快与慢。
驱动板的DIR是用高低电平来确定电机顺时针或者是逆时针运动,也就是运动方向。
驱动板的EN是确定驱动是运行状态还是设置状态。
由于驱动板有三个跳线开关了,所就不用跳M0-M3也可以进行运行,但是如何需要再细的调整,可以接入单片机或其他的跳线进行调整。
我这里的时钟驱动信号采用航芯ACM32G103来产生PwM信号来给驱动板运运行信号。
整体的接线如下:
image.png
在MCU中,使用定时器产生1KHz50%占空比的PWM信号经过CLK提供给驱动板。在主程序中给驱动板一个DIR与EN高平信号,就可以成功的驱电机了。

  1. ******************************************************************************
  2. *@file  : main.c
  3. *@brief : main program
  4. ******************************************************************************/

  5. #include "main.h"   
  6. #include "app.h"   
  7. #define EN_high  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);

  8. #define EN_low   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET)

  9. #define DIR_high  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET)

  10. #define DIR_low   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET)

  11. void BSP_BJDJ_Init(void)
  12. {
  13.     GPIO_InitTypeDef GPIO_InitStruct;
  14.     __HAL_RCC_GPIOB_CLK_ENABLE();
  15.     GPIO_InitStruct.Pin  = GPIO_PIN_8|GPIO_PIN_9;
  16.     GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  17.     GPIO_InitStruct.Pull= GPIO_PULLUP;
  18.     GPIO_InitStruct.Drive  = GPIO_DRIVE_LEVEL3;
  19.     GPIO_InitStruct.Alternate = GPIO_FUNCTION_0;
  20.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  21.    
  22. }
  23. /*********************************************************************************
  24. * Function    : main
  25. * Description :
  26. * Input       :
  27. * Outpu       :
  28. * Author      : xwl                        Date : 2022-06  
  29. **********************************************************************************/
  30. int main(void)
  31. {
  32. HAL_Init();
  33.     SystemClock_Config();

  34.     BSP_UART_Init();  

  35.     printfS("\r\n\r\n****************************************************************************************************\r\n");
  36. printfS("system startup\r\n\r\n");
  37.    
  38. printfS("HCLK: %uHz\r\n", HAL_RCC_GetHCLKFreq());
  39. printfS("PCLK1: %uHz\r\n", HAL_RCC_GetPCLK1Freq());
  40. printfS("PCLK2: %uHz\r\n", HAL_RCC_GetPCLK2Freq());
  41.     printfS("\r\n");
  42.   EN_high;
  43.     DIR_high;
  44.     Timer_PWM_Output_Test();  

  45.     while(1)
  46.     {
  47.         
  48.     }
  49. }
驱动视频如下: