stm32f103c8t6pwm控制电机HAL库
时间: 2025-05-26 16:34:47 浏览: 26
### 使用STM32F103C8T6 HAL库通过PWM控制电机
#### 配置流程概述
为了使用STM32F103C8T6的HAL库来通过PWM信号控制直流电机的速度和方向,需要完成以下几个方面的配置:
1. **初始化定时器**
定时器用于生成PWM波形。可以通过STM32CubeMX工具配置定时器的工作模式、预分频系数(Prescaler)以及自动重载寄存器(Auto Reload Register)[^4]。
2. **设置占空比**
占空比决定了PWM波高电平持续时间的比例,从而影响电机转速。可以在代码中动态调整比较值(Compare Value),以改变占空比[^4]。
3. **连接GPIO引脚到定时器通道**
将指定的GPIO引脚映射到对应的定时器通道上,并将其工作模式设为复用推挽输出(Mode: Alternate Function Push-Pull Output)[^3]。
以下是具体的示例代码及其说明:
---
#### 示例代码
```c
#include "stm32f1xx_hal.h"
// 定义全局变量
TIM_HandleTypeDef htim2;
void MX_TIM2_Init(void) {
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
// 初始化结构体参数
htim2.Instance = TIM2;
htim2.Init.Prescaler = 72 - 1; // 设置预分频系数为72-1=71 -> 输入时钟/72 = 1MHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式向上计数
htim2.Init.Period = 19999; // 自动重装载值为19999 -> 周期为20ms (适合大多数伺服电机)
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK) {
Error_Handler();
}
// 配置时钟源
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) {
Error_Handler();
}
// 主控同步配置
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) {
Error_Handler();
}
}
void Start_PWM_Output(void) {
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 5000); // 初始占空比约为50%
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}
int main(void) {
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 系统时钟配置
MX_GPIO_Init(); // GPIO初始化
MX_TIM2_Init(); // 定时器2初始化
Start_PWM_Output(); // 开始PWM输出
while (1) {
// 可在此处修改占空比或其他逻辑操作
}
}
```
---
#### 参数解释
- `Prescaler` 的值设定为 `72 - 1` 是为了让输入时钟频率从默认的 72 MHz 下降到 1 MHz。
- `Period` 设定为 `19999` 表示每个周期的时间长度为 \( \frac{20\text{ ms}}{\text{每秒脉冲次数}}\) ,这通常适用于标准伺服电机应用[^4]。
- 调整 `__HAL_TIM_SET_COMPARE()` 函数中的数值即可更改占空比,进而调节电机速度或位置[^4]。
---
#### 注意事项
- 如果目标是双向控制直流电机,则需额外引入H桥电路或者双路PWM信号分别驱动两个晶体管开关[^3]。
- 对于无刷电机(Brushless DC Motor),则可能需要用到更复杂的三相逆变器架构配合FOC算法实现精确调速[^1]。
---
阅读全文
相关推荐


















