stm32F407基于HAL库驱动42步进电机

文章讲述了如何在STM32中配置TIM1和TIM13定时器进行PWM输出来控制42电机的转速,通过调整定时器的自动重装寄存器ARR和比较寄存器CCR设定脉宽和频率。同时,给出了启用和禁用电机的代码示例。
摘要由CSDN通过智能技术生成

一、42电机

  1. 型号:ZD-M42P
  2. 引脚配置
    电机MCU
    V+24V/
    GNDGND/
    com3.3V/5V3.3V
    DIR方向选择PC9
    STRPWM波PA8
    EN使能PC8

二、定时器

TIM1,cubeMX配置

调试了很久,ch1都没有输出,查阅了很多资料发现都没有使用TIM1,换了TIM3后发现是可以正常输出的。后来发现是因为时钟源Slave Mode里的外部时钟源,换成Clock Source的Internal Clock后,正常输出。
在这里插入图片描述

在这里插入图片描述

TIM13,cubeMX配置

PWM输出就是通过定时器通道对外输出脉宽(即占空比)可调的方波信号,信号频率由定时器自动重装寄存器 ARR 的值决定,占空比由定时器比较寄存器 CCR 的值决定。ARR及参数配置中的100,Prescaler的值为分频系数,定时器13的时钟总线为84M,分频后频率为10kHz。CRR寄存器的值及参数配置中的Pulse值。
f r e q = 系统时钟 ( P r e s c a l e r + 1 ) ∗ ( P e r i o d + 1 ) freq = \frac{系统时钟}{{(Prescaler+1)}*{(Period + 1)}} freq=(Prescaler+1)(Period+1)系统时钟
在这里插入图片描述

三、代码

1、头文件


#include "user_gpio.h"


void Motor_Enable(uint8_t  pwmDutyCycle)
{
    //TIM_OC_InitTypeDef config;
    //HAL_TIM_PWM_ConfigChannel();

    //设置占空比
    uint32_t period = htim1.Init.Period + 1;
    uint32_t compare = (period * pwmDutyCycle) / 100;
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, compare);


    HAL_GPIO_WritePin(Motor_EN_GPIO_Port, Motor_EN_Pin, SET);
    HAL_GPIO_WritePin(Motor_DIR_GPIO_Port, Motor_DIR_Pin, SET);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}

void Motor_Disable()
{
	HAL_GPIO_WritePin(Motor_EN_GPIO_Port, Motor_EN_Pin, RESET);
	HAL_GPIO_WritePin(Motor_DIR_GPIO_Port, Motor_DIR_Pin, RESET);
	HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
	HAL_TIM_Base_Stop_IT(&htim1);
}

2、源文件

#ifndef INC_USER_GPIO_H_
#define INC_USER_GPIO_H_

#include "user_uart.h"

extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim13;

void Motor_Enable(uint8_t  pwmDutyCycle);

void Motor_Disable();


#endif /* INC_USER_GPIO_H_ */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值