然后在驱动板上面有CLK为输入时钟信号,这个信号的快慢与M0-M3来决定步进电机运行的快与慢。
驱动板的DIR是用高低电平来确定电机顺时针或者是逆时针运动,也就是运动方向。
驱动板的EN是确定驱动是运行状态还是设置状态。
由于驱动板有三个跳线开关了,所就不用跳M0-M3也可以进行运行,但是如何需要再细的调整,可以接入单片机或其他的跳线进行调整。
我这里的时钟驱动信号采用航芯ACM32G103来产生PwM信号来给驱动板运运行信号。
整体的接线如下:
在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)
{
}
}
复制代码