简介

通过使用STM32控制SG90舵机进行转动
PWM输出:PC6
定时器:TM3,通道1
接线如下:

控制原理及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°

PWM占空比是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,由于PWM周期为20ms,所以(以舵机会转动 45°为例),占空比就应该为1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕获比较 1 寄存器值就为200-200*5% = 190

参考代码

#include "pwm.h"/*******************************************************************************
* 函 数 名         : pwm_init
* 函数功能         : IO端口及TIM3初始化函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void pwm_init()
{GPIO_InitTypeDef GPIO_InitStructure;   //声明一个结构体变量,用来初始化GPIOTIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明一个结构体变量,用来初始化定时器TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx/* 开启时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/*  配置GPIO的模式和IO口 */GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;// PC6GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOC,&GPIO_InitStructure);//TIM3定时器初始化TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz//设置自动重装载寄存器周期的值TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置用来作为TIMx时钟频率预分频值TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_timTIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;    //TIM向上计数模式TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射  //pC6//PWM初始化     //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;TIM_OC1Init(TIM3,&TIM_OCInitStructure);//注意此处初始化时TIM_OC1Init而不是TIM_OCInit,否则会出错。因为固件库的版本不一样。TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器TIM_Cmd(TIM3,ENABLE);//使能或者失能TIMx外设
}

#include "public.h"
#include "pwm.h"int main()
{     pwm_init();    //PWM初始化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); }
}

参考

51单片机PWM双舵机控制详解
MG995舵机工作原理及基于STM32的驱动源代码

STM32控制SG90舵机相关推荐

  1. STM32的SG90舵机驱动

    今天来讲一下如何使用STM32来驱动SG90舵机 舵机:舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统.舵机只是一种通俗的叫法,其实质是一个伺服马达. 驱动SG90舵 ...

  2. 树莓派-10-安装jupyter并控制SG90舵机

    1 开发工具jupyter notebook 1.1 安装jupyter #(1)安装jupyter notebook $ sudo pip3 install jupyter $ sudo pip3 ...

  3. 51单片机控制SG90舵机、MG90S舵机

    舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...

  4. mblock控制SG90舵机模块

    [1.关于SG90舵机] SG90舵机是Arduino中常用的一种舵机.这是一种模拟舵机,和数字舵机不同,模拟舵机需要持续发送控制脉冲,才能使舵机旋转到某个角度并保持. Arduino中使用SG90舵 ...

  5. 51单片机控制sg90舵机

    1.PWM PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就 ...

  6. STM32F103单片机控制SG90舵机

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

  7. STM32驱动sg90舵机失败

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

  8. 基于STM32驱动SG90舵机

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

  9. 树莓派控制多个舵机_树莓派控制SG90舵机

    SG90舵机硬件接口: SG90 一共三根线,红线接5v电源,棕线GND,黄线为数据控制线,接到GPIO上舵机参数: SG90 脉冲周期为20ms,脉宽0.5ms-2.5ms对应的角度-90到+90, ...

  10. Arduino ESP8266控制SG90舵机输出PWM信号

    1. 什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素.舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口. 舵机是一种位置(角 ...

最新文章

  1. 【行业报告】基于社交图谱关系的反欺诈产品应用——青云
  2. HighNewTech之Job:关于人工智能领域专业的公司求职数据分析(最全)
  3. VC MFC界面上显示BMP图片
  4. COLING 2018 最佳论文解读:序列标注经典模型复现
  5. SQL Server查询所有数据库下模式schema
  6. 群体测试中的假阴性影响
  7. pytorch:tensor的运算
  8. [翻译]SharePoint2007中创建Forms认证方式的站点
  9. vue(2)学习历程----从iview框架入手
  10. 【Python】SciKit-Learn包安装问题
  11. Go语言之高级篇beego框架之模型(Models)
  12. 修改IP、DNS、MAC工具VC源码实现
  13. 消息队列实现原理(以kafka为例)
  14. SpringBoot整合tkMybatis基础教程
  15. 【C语言】Linux 文件读写
  16. anguarjs 图片预览_一键精准提取图片文字,这么高效的app确定不盘一下嘛
  17. [注]微信公众号的运营推广总结方案(持续更新)
  18. Six提供了Python 2和Python 3的兼容库
  19. 分布式session会话Sticky Sessions
  20. 基于极限学习机的预测、图像降噪和回归

热门文章

  1. krohne流量计接线图_KROHNE科隆电磁流量计工作原理介绍
  2. 单片机复位电路基础知识解析
  3. QTreeView三态复选
  4. Ubuntu 桌面截屏(或截图)的方式
  5. java poi 合并单元格 边框显示不全
  6. vue富文本编辑器tinymce
  7. oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及解决方案
  8. 光学efl_关于光学设计使用以及理解
  9. 凯恩帝绝对坐标清零_凯恩帝 K90T i 数控车床系统使用手册分享
  10. 自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建