用cubemx配置pwm连接舵机
时间: 2025-06-28 21:00:26 浏览: 13
### 使用STM32 CubeMX配置PWM信号以驱动舵机
#### 硬件连接
在开始之前,确认舵机上的三根线已正确连接至开发板上。具体来说,GND(棕色线)应接至MCU的地线;VCC(红色线)接到电源线上;SIG(黄色线)则需连到用于发送PWM信号的IO口[^2]。
#### 创建工程并配置定时器
进入STM32CubeMX图形化界面创建新项目,在此过程中按照常规流程完成芯片型号的选择以及端口分配等基础设定之后,重点在于对TIMx外设进行如下调整:
- **使能时钟**:确保所选定时器模块已被激活。
- **模式选择**:将工作方式更改为PWM输出模式。
- **通道指定**:依据实际电路连线情况挑选合适的比较单元作为PWM输出信道。
- **参数调节**:
- 设置自动重装载寄存器ARR值为周期T(单位μs),这里取20ms即`ARR=20000`;
- 初始捕获/比较CCRn赋初值对应于期望占空比Duty Cycle的位置,比如要让舵盘停在中间位置,则可令其等于`(ARR+1)/2`。
上述设置完成后保存退出工具自动生成初始化源文件[^1]。
```c
void MX_TIM3_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim3.Instance = TIM3;
htim3.Init.Prescaler = ... ; // 根据系统频率计算预分频系数使得计数频率满足需求
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 19999; // ARR=20000-1
...
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 = 1500; // CCRn=(ARR+1)*duty_cycle%
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
{
Error_Handler();
}
}
```
#### 编写控制逻辑
接下来就是在主循环里加入必要的业务处理代码片段实现角度变化的效果展示。通过调用库函数改变CCRn数值从而达到修改脉宽的目的,进而影响舵片转动方向与幅度[^3]。
```c
/* USER CODE BEGIN WHILE */
while (1)
{
// SG90从0°旋转到180°
for(uint8_t i=0;i<180;i++)
{
Set_SG90_angle(&htim3,TIM_CHANNEL_2,i,20000,20);
HAL_Delay(5);
}
// SG90从180°旋转到0°
for(uint8_t j=180;j>0;j--)
{
Set_SG90_angle(&htim3,TIM_CHANNEL_2,j,20000,20);
HAL_Delay(5);
}
/* USER CODE END WHILE */
```
阅读全文
相关推荐


















