一、前言
利用STM32的TIM3的通道1输出PWM信号,驱动MG996R舵机,按键控制。
相关知识:TIM定时器基本原理,TIM输出PWM信号、MG996R舵机驱动原理
二、MG996R舵机简介
MG996R舵机单线驱动,是一款360°舵机,180°舵机与360°舵机的区别就是:180°舵机可以直接控制舵机旋转的角度,但舵机只能够旋转180°;360°舵机无法直接控制其旋转角度,只能控制其转动方向和速度。
舵机的驱动信号由周期为20ms的脉冲来控制:
- 当高电平持续时间为0.5~1.5ms时,舵机正转,时间越小转动越快
- 当高电平持续时间为1.5~2.5ms时,舵机反转,时间越大转动越快
- 当高电平持续时间为1.5ms或者其他时间时,舵机停止转动

三、通用定时器TIMx
通用TIMx定时器(TIM2、TIM3、TIM4和TIM5)功能主要包括如下:
16位向上、向下、向上/向下自动装载计数器
16位可编程(可以实时修改)预分频器,分频系数为1~65535
四种独立通道功能:
1.输入捕获
2.输出比较
3.PWM生成
4.单脉冲输出
使用外部信号控制定时器和定时器互连的同步电路
可以由如下事件触发中断或者DMA:
1.更新,即计数器溢出,或者计数器初始化
2.特定的触发事件,比如:计数器启动、停止、初始化等等
3.输入捕获
4.输出比较
支持针对定位的增量(正交)编码器和霍尔传感电路
触发输入作为外部时钟或者按周期的电流管理
可编程通用定时器的主要部分是一个16位计数器和其相关的自动装载寄存器,前面也说了,计数器可以向上、向下、双向计数。既然要计数,那就必须要知道计数的多少和每一次计数的时间。计数器的时钟由预分频器对时钟源分频得到。
时基单元包括:
计数器寄存器(TIMx_CNT)
预分频器寄存器(TIMx_PSC)
自动装载寄存器(TIMx_ARR)
计数器寄存器中存储的是当前计数的值,自动装载寄存器中存储的是目标计数值,当计数器溢出后,会重新装填目标计数值,而预分频器寄存器中的是对时钟的分频系数。
有专门的三个寄存器来控制PWM:
捕获/比较模式寄存器(TIMx_CCMR1/2)
捕获/比较使能寄存器(TIMx_CCER)
捕获/比较寄存器(TIMx_CCR1~4)
四、TIM3输出PWM信号代码详解
输出PWM用到的TIMx初始化结构体有:
1.时基初始化结构体TIM_TimeBaseInitTypeDef
2.输出比较初始化结构体TIM_OCInitTypeDef
typedef struct {
uint16_t TIM_Prescaler; // 预分频器
uint16_t TIM_CounterMode; // 计数模式
uint32_t TIM_Period; // 定时器周期
uint16_t TIM_ClockDivision; // 时钟分频
uint8_t TIM_RepetitionCounter; // 重复计算器
} TIM_TimeBaseInitTypeDef;
<TIM_Prescaler:预分频器设置,只有经过预分频器后的时钟才是CK_CNT,计数器时钟频率 (fCK_CNT) 等于fCK_PSC
/ (PSC[15:0] + 1),可实现 1 至 65536 分频。
TIM_CounterMode:定时器计数模式,可设置向上计数、向下计数和中心对齐计数三种模式。
TIM_Period:设置的是自动重装寄存器ARR的值,ARR为要装载到影子寄存器的值,可设置 1 至 65536 。
TIM_ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与死区发生器以及数字滤波器采样时钟频率分频比。可以选择 1、
2、 4 分频。 TIM_RepetitionCounter:重复计数器,只有八位,只存在与高级定时器。

本文介绍如何使用STM32的TIM3定时器输出PWM信号来控制MG996R舵机,并通过按键实现对舵机转动方向和速度的调节。文章详细讲解了通用定时器TIMx的功能及其配置方法。
424

被折叠的 条评论
为什么被折叠?



