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

******************************************************************************
  • *@file  : main.c
  • *@brief : main program
  • ******************************************************************************/

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

  • #define EN_low   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET)

  • #define DIR_high  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET)

  • #define DIR_low   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET)

  • void BSP_BJDJ_Init(void)
  • {
  •     GPIO_InitTypeDef GPIO_InitStruct;
  •     __HAL_RCC_GPIOB_CLK_ENABLE();
  •     GPIO_InitStruct.Pin  = GPIO_PIN_8|GPIO_PIN_9;
  •     GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  •     GPIO_InitStruct.Pull= GPIO_PULLUP;
  •     GPIO_InitStruct.Drive  = GPIO_DRIVE_LEVEL3;
  •     GPIO_InitStruct.Alternate = GPIO_FUNCTION_0;
  •     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  •    
  • }
  • /*********************************************************************************
  • * Function    : main
  • * Description :
  • * Input       :
  • * Outpu       :
  • * Author      : xwl                        Date : 2022-06  
  • **********************************************************************************/
  • int main(void)
  • {
  • HAL_Init();
  •     SystemClock_Config();

  •     BSP_UART_Init();  

  •     printfS("\r\n\r\n****************************************************************************************************\r\n");
  • printfS("system startup\r\n\r\n");
  •    
  • printfS("HCLK: %uHz\r\n", HAL_RCC_GetHCLKFreq());
  • printfS("PCLK1: %uHz\r\n", HAL_RCC_GetPCLK1Freq());
  • printfS("PCLK2: %uHz\r\n", HAL_RCC_GetPCLK2Freq());
  •     printfS("\r\n");
  •   EN_high;
  •     DIR_high;
  •     Timer_PWM_Output_Test();  

  •     while(1)
  •     {
  •         
  •     }
  • }
  • 复制代码
    驱动视频如下: