这款驱动芯片是采用HTSSOP封装,48脚的分布如下:
![顶视图.png 顶视图.png](data/attachment/forum/202401/12/232945al27c4yay0t3cz0k.png)
![芯片管脚定义.png 芯片管脚定义.png](data/attachment/forum/202401/12/233004wl7le7zmzf7enxlp.png)
该控制板的功能结构框图如下图所示:
![功能结构框图.png 功能结构框图.png](data/attachment/forum/202401/12/235054t408h818h8drdbhx.png)
板上的细分设置可通过拨码开关进行设置,而电流大小设置可通过旋转变阻器设置。
![步分辨率设置.png 步分辨率设置.png](data/attachment/forum/202401/12/235054kyl56aadrzffrflk.png)
此次使用的主控板是基于STM32C031C6开发板,主控板与驱动板的连线示意图如下:
![连接示意图.png 连接示意图.png](data/attachment/forum/202401/12/235357ojkg84e375kbj83j.png)
使用STM32CubeMX生成一个简易的工程,这里实现电机控制即可。部分参考代码如下:
/**
* @brief TIM3 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM3_Init(uint16_t Prescaler,uint16_t period)
{
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM3_Init 1 */
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = Prescaler;//41-1;//84-1;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = period;//1000;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
HAL_TIM_MspPostInit(&htim3);
}
复制代码/**
* @brief Starts the PWM signal generation.
* @param htim TIM handle
* @param Channel TIM Channels to be enabled
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
* @arg TIM_CHANNEL_3: TIM Channel 3 selected
* @arg TIM_CHANNEL_4: TIM Channel 4 selected
* @arg TIM_CHANNEL_5: TIM Channel 5 selected
* @arg TIM_CHANNEL_6: TIM Channel 6 selected
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
/* Check the TIM channel state */
if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
{
return HAL_ERROR;
}
/* Set the TIM channel state */
TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
/* Enable the Capture compare channel */
TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
{
/* Enable the main output */
__HAL_TIM_MOE_ENABLE(htim);
}
/* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
{
tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
{
__HAL_TIM_ENABLE(htim);
}
}
else
{
__HAL_TIM_ENABLE(htim);
}
/* Return function status */
return HAL_OK;
}
复制代码int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
HAL_NVIC_SetPriority(SysTick_IRQn,0,0);
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
MX_TIM3_Init(11-1,1000);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
while (1)
{
}
}
复制代码![整体连线.jpg 整体连线.jpg](data/attachment/forum/202401/13/000812ev0care2izqe0eoo.jpg)
这里着重细看板上的引脚连接,只用到EN,CLK、DIR、GND四根杜邦线与主控板连接,驱动板的输入电源采用12V直流适配器,电机是比较常见的两相四线步进电机。
![接线.jpg 接线.jpg](data/attachment/forum/202401/13/001327v9m9gukhha5kkviz.jpg)
工程编译后,由于STM32C031C6主控板上已经集成了ST-Link调试器,因此可直接将可执行文件下载到STM32C031C6主控中,然后将TB67S109A电机驱动板上电,重启主控板,则能看到42步进电机逆时针缓慢旋转,可通过拨码开发设置步长细分,旋转定位器可控制电机的停止与启动。