今天来讲一下如何使用STM32来驱动SG90舵机
舵机:舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统。舵机只是一种通俗的叫法,其实质是一个伺服马达。
驱动SG90舵机的方法也很简单,利用单片机输出一个PWM信号,一个20ms的时基脉冲,控制高电平时间为0.5ms~2.5ms范围内即可控制舵机在0 ~ 180°转动。从t = 0.5ms开始每增加0.5ms舵机转动角度增加45°。
以下是PWM信号高电平时间和舵机转动角度的关系对应:
t = 0.5ms -------------> 0°
t = 1.0ms -------------> 45°
t = 1.5ms -------------> 90°
t = 2.0ms -------------> 135°
t = 2.5ms -------------> 180°

参考代码如下:
timer.c

//designed by HIT TDD
#include "timer.h"void TIM3_PWM_Init(void)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   //初始化定时器TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    //使能定时器3时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5    //设置该引脚为复用输出功能,输出TIM3 CH2的P`在这里插入代码片`WM脉冲波形    GPIOB.5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO//初始化TIM3TIM_TimeBaseStructure.TIM_Period = 199; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =7199; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//初始化TIM3 Channel2 PWM模式   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器TIM_Cmd(TIM3, ENABLE);  //使能TIM3}

timer.h

#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"void TIM3_PWM_Init(void);#endif

main.c

#include "delay.h"
#include "sys.h"
#include "timer.h"int main(void)
{       u16 pwmval;delay_init();TIM3_PWM_Init();while(1){for(pwmval = 195; pwmval >= 175; pwmval -= 5){TIM_SetCompare2(TIM3,pwmval);delay_ms(500);}} }

这里用到的TIM3部分重映射到STM32F103C8T6的PB5引脚,连接杜邦线的时候只需要信号线接PB5,VCC、GND分别接好即可。

STM32的SG90舵机驱动相关推荐

  1. MSP430 STM32 单片机 SG90 舵机

    接线: 注意: 1 工作电压:4.2-6V 2 PWM给20ms周期,也就是50HZ 3 手册可能写的是高电平是1ms到2ms,其实给0.5ms到2.5ms,还是要试试才知道. 4 给舵机直流电5V, ...

  2. STM32——MG90S数字舵机驱动

    引脚介绍: 引脚都是兼容的三根线排列一致,分别是GND(棕色).VCC(红色).PWM(黄色) 时序 驱动程序 void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_I ...

  3. STM32驱动sg90舵机失败

    背景:        十月份参加学校举办的Robomaster校内赛,使用sg90舵机驱动机械臂夹取小球. 遇到问题:        使用STM32单片机的定时器输出PWM来驱动舵机,一直无法使舵机运 ...

  4. 基于STM32驱动SG90舵机

    1.舵机介绍 这边对SG90舵机进行一个简短的文字介绍: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms.脉冲的宽度将决定马达转动的距 ...

  5. ESP8266驱动SG90舵机控制开关灯(灯的开关)的折腾记录

    https://blog.csdn.net/qq_47749454/article/details/117638828 想法来源地址在上面,可以去参考一下,建议是结合两篇文章一块看,按照大佬的先来折腾 ...

  6. 【STM32】基于F103C8T6和ESP01远程控制灯光开关(SG90舵机控制)

    先上实物! 视频演示 主控和配件选择 主控板选择经济实惠的c8t6,网络通信选择esp01,因为寝室使用不能更改电路,所以用一个sg90舵机来按点灯开关. 服务器 服务器使用自己搭建的emqx服务器, ...

  7. Arduino 不使用舵机库<Servo.h>驱动SG90舵机

    点击下载示例 由于<Servo.h>中使用了定时器,严重影响了其他引脚的信号变化.所以自行写了个简单的驱动程序. 舵机驱动原理如下: 舵机的控制信号为周期是 20ms 的(PWM)信号,其 ...

  8. STM32F103单片机控制SG90舵机

    前言 在智能衣柜系统中,试用SG90旋转0°-180°,模拟衣柜的开关门,舵机正转开门,180°-0°反转模拟一个关门的现象. 一,SG90舵机 1.1SG90链接: [淘宝]https://m.tb ...

  9. STM32 PWM控制舵机——原理、接线、源程序

    STM32--PWM 控制舵机 通用定时输出PWM PWM的工作原理 PWM的模式 TIM_OCMode_PWM1 (边沿对齐模式) TIM_OCMode_PWM2(中央对齐模式) 占空比 舵机 实物 ...

最新文章

  1. 多目标检测跟踪文献代码汇总
  2. 定时自动按键软件_[按键精灵手机版教程]QUI界面也可以如此炫酷
  3. Selenium3自动化测试——21.数据驱动应用
  4. UAC bypass 理论学习
  5. 串行异步通信_单片机串行口介绍
  6. scp命令 – 远程拷贝文件
  7. 计算平面坐标某点(x,y)与原点(0,0)的角度
  8. 零基础iOS之Json及XML数据解析2
  9. [转载] python中集合的表示_Python No.18_集合以及表示符号
  10. 任正非号召华为员工学习一份20页 5G PPT:认识5G,发展5G
  11. 地学计算方法/地统计学(5第五章 空间插值与克里格法)
  12. 《机器学习实战》笔记-介绍
  13. 1068 万绿丛中一点红(JAVA)
  14. C实现iBeacon蓝牙测距
  15. 增强现实(AR)、虚拟现实(VR)、混合现实(MR)之间有什么区别?
  16. 神经网络常用的训练方式,神经网络训练过程详解
  17. css3简单动画 上下切换图片效果:
  18. 瑞萨 smart Configurator
  19. 加解密遇到的JCE cannot authenticate the provider BC问题解决方案
  20. 手动彻底清除恶意网页病毒

热门文章

  1. linux音频文件格式转换,在Ubuntu @ Linux 中音频和音乐文件的格式转换
  2. 计算机数字媒体专业毕业论文,数字媒体艺术专业毕业论文
  3. postgresql-with as处理子查询速度慢的问题
  4. 关于查看虚拟机防火墙 状态和关闭防火墙(CentOS7)
  5. VS2017+MFC+sqlite数据库操作
  6. where online services go when they dieMichael Doi
  7. 差模干扰/电压/电流/电感/电容与共模干扰/电压/电流/电感/电容的介绍
  8. 定价的艺术:苹果和网飞对最优订阅价格的理解
  9. Bowe BSB 1005/B
  10. 支持nfc的android手机型号,哪些手机型号支持刷公交卡 支持nfc功能的手机有哪些汇总...