STM32控制SG90舵机教程(180度和360度)

数字舵机主要由马达、减速齿轮、控制电路等组成,只需要发送一次PWM信号就能保持在规定的某个位置。

而模拟舵机是相同于传统的舵机,是需要多次发送PWM信号才能够保持在规定的位置上,实现对舵机的控制,按照规定的要求进行的速度进行转动。

数字舵机在反应速度方面与模拟舵机相比是由优势的。因为数字舵机是拥有微处理器。

下面我们介绍的SG90舵机就是模拟舵机。在这里插入图片描述
从下往上依次接 GND,+5V,PWM输出IO口(我选的是PC6)
在这里插入图片描述
我们选用定时器3通道1完全重映像输出。

控制原理及PWM配置

1)180度

模拟舵机的PWM频率为50HZ,对应的时基周期/PWM周期为20ms。我们的高电平脉宽是在0.5ms—2.5ms进行控制的。
在这里插入图片描述
PWM周期为20ms = (7200*200)/72000000=0.02
所以TIM_Period = 199 //自动重装载值
TIM_Prescaler = 7199 //预分频系数

占空比 = t / T 相关参数如下:
t = 0.5ms——————-舵机会转动 0 °
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180°

比如说舵机旋转90度,对应高电平时间为1.5ms:
在这里插入图片描述
再附上我的参考代码:

#include timer.h
void TIM3_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |        RCC_APB2Periph_AFIO,ENABLE);//使能 PC端口 时钟和 AFIO复用功能 时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;				 //PC6

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOC.6

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);  //开启定时器3的部分重映射  改变定时器3的 输出通道 引脚 。比如:通道1的输出引脚为PC6

//初始化定时器3
TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载

TIM_TimeBaseStructure.TIM_Prescaler=psc; //预分频系数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //没多大关系
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

//初始化 输出比较 参数         输出比较:通过比较来进行输出       
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //pwm模式1:小于有效
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;     //通道输出极性   TIM3_CCER寄存器的CC2E位   0:低电平有效  1:高电平有效
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;  //通道1输出使能
TIM_OC1Init(TIM3,&TIM_OCInitStructure);//定时器3通道2输出的初始化       CNT小于比较值CCR   通道1输出低电平

//使能通道1 输出比较 预装载值
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

//使能定时器3
TIM_Cmd(TIM3,ENABLE);

}

#ifndef __TIMER_H
#define __timer_h
#include “sys.h”

void TIM3_PWM_Init(u16 arr,u16 psc);

#endif

#include “sys.h”
#include “delay.h”
#include “timer.h”

int main(void)
{
delay_init();
TIM3_PWM_Init(199,7199);
while(1)
{
delay_ms(100);
TIM_SetCompare1(TIM3, 195);//0度
delay_ms(100);
TIM_SetCompare1(TIM3, 190);//45度
delay_ms(100);
TIM_SetCompare1(TIM3, 185);//90度
delay_ms(100);
TIM_SetCompare1(TIM3, 180);//135度
delay_ms(100);
TIM_SetCompare1(TIM3, 175);//180度
delay_ms(100);
}
}

360度

360度舵机可以360度旋转,因此与180度舵机有相当大的区别,首先360度舵机不能够控制旋转角度,一般的舵机是给一个特定的PWM,舵机会转到相应的角度,而360度舵机是只能够控制方向和旋转转速,所以360度舵机给定一个PWM,会以特定的速度方向转动。
所以有:
0.5ms----------------正向最大转速;
1.5ms----------------速度为0;
2.5ms----------------反向最大转速;

int main(void)
{
delay_init();
TIM3_PWM_Init(199,7199);
while(1)
{
TIM_SetCompare1(TIM3,195);//正向最大转速
delay_ms(500);
TIM_SetCompare1(TIM3,185);//速度为0
delay_ms(500);
TIM_SetCompare1(TIM3,175);//反向最大转速
delay_ms(500);
}
}

到此结束

  • 54
    点赞
  • 409
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
STM32是一款广泛应用于嵌入式系统的微控制器。SG90舵机是一种小型的舵机,在模型制作、机器人控制等领域有着广泛的应用。 要使用STM32控制SG90舵机,首先需要连接它们之间的电路。通常,SG90舵机控制信号线需要连接到STM32控制器的一个GPIO引脚上。此外,舵机还需要供电,因此还需要为舵机连接一个适配器,并将其电源线连接到电源。 在STM32上编写程序时,可以使用STM32的开发环境,例如Keil或CubeMX等工具。在编写程序之前,首先需要导入相关的库文件,例如HAL库,以便能够使用库中提供的函数来控制GPIO引脚。 接下来,需要定义一个GPIO引脚来作为舵机控制信号引脚。可以使用HAL库提供的函数,如GPIO_Init(),来初始化该引脚。然后,可以使用HAL库提供的函数,如HAL_GPIO_WritePin(),来控制该引脚的输出电平,从而控制舵机的转动角。 通常,SG90舵机的转动角是通过控制信号引脚的PWM(脉冲宽调制)来实现的。在STM32上,可以使用定时器模块和相应的PWM输出通道来生成PWM信号。通过调整PWM信号的占空比,可以控制舵机的转动角。 最后,需要在主循环中控制舵机的转动。可以使用循环来改变舵机的转动角,可以根据需要添加延时以控制舵机的转动速和稳定性。 总结起来,要使用STM32控制SG90舵机,需要连接电路,导入相应的库文件,在程序中初始化GPIO引脚和定时器模块,使用PWM信号来控制舵机的转动角,并在主循环中控制舵机的转动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shine锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值