STM32—TIM3输出PWM信号驱动MG996R舵机(按键控制)

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

一、前言

利用STM32的TIM3的通道1输出PWM信号,驱动MG996R舵机,按键控制。
相关知识:TIM定时器基本原理,TIM输出PWM信号、MG996R舵机驱动原理

二、MG996R舵机简介

MG996R舵机单线驱动,是一款360°舵机,180°舵机与360°舵机的区别就是:180°舵机可以直接控制舵机旋转的角度,但舵机只能够旋转180°;360°舵机无法直接控制其旋转角度,只能控制其转动方向和速度。
舵机的驱动信号由周期为20ms的脉冲来控制:

  1. 当高电平持续时间为0.5~1.5ms时,舵机正转,时间越小转动越快
  2. 当高电平持续时间为1.5~2.5ms时,舵机反转,时间越大转动越快
  3. 当高电平持续时间为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:重复计数器,只有八位,只存在与高级定时器。

<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值