STM32F103C8T6之SG90舵机控制
什么是舵机?
舵机其实是伺服电机的一种别称。通常我们所说的舵机是指可以根据信号转动至指定角度的电机,例如180度舵机。因为这个特性,所以往往被用于很多遥控飞机、遥控给汽车、机器人等领域,用于控制它们的方向和位置。这也是它被称为舵机的原因。
SG90舵机外观如图所示:
SG90引脚如图:
控制舵机就要使用到PWM波。什么是PWM波呢?
PWM(Pulse Width Modulation)——脉冲宽度调制,通过对一系列脉冲信号的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆变电路中的应用,才确定了它在电力电子技术中的重要地位。
单片机驱动舵机的原理简单来说就是改变其占空比来实现舵机转动不同的角度,什么是占空比?
占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。(简单来说就是一个周期内高电平的时间除以这个周期再乘以100%)
如图:
硬件接线如下:
舵机黄色杜邦线——————PB5
舵机棕色杜邦线——————GND
舵机虹色杜邦线——————5V
接下来就是编写代码实现单片机控制舵机旋转我们设置的角度。
舵机控制代码如下:
PWM.C代码如下:
#include "pwm.h"void Pwm_Init(void)
{GPIO_InitTypeDef PWM_Initstructure; //定义GPIO端口结构体TIM_TimeBaseInitTypeDef TIM_Initstructure; //定义TIM结构体TIM_OCInitTypeDef OC_Initstructure; //定义输出比较结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //打开端口和复用时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //打开定时器的时钟GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //端口重映射PWM_Initstructure.GPIO_Pin = GPIO_Pin_5;PWM_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP;PWM_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &PWM_Initstructure);TIM_Initstructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频TIM_Initstructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数TIM_Initstructure.TIM_Period = 200-1;TIM_Initstructure.TIM_Prescaler = 7200-1;TIM_TimeBaseInit(TIM3, &TIM_Initstructure);TIM_Cmd(TIM3, ENABLE); //使能时钟OC_Initstructure.TIM_OCMode = TIM_OCMode_PWM1; //采用PWM1模式,PWM1和PWM2的区别请继续往下看OC_Initstructure.TIM_OutputState = TIM_OutputState_Enable; //配置输出使能OR使能OC_Initstructure.TIM_OCPolarity = TIM_OCPolarity_Low; //比较输出极性TIM_OC2Init(TIM3, &OC_Initstructure); //输出比较初始化TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //启用CCR2上的TIM3外围预加载寄存器。
}
PWM.H代码如下:
#include "stm32f10x.h"void Pwm_Init(void);
PWM1和PWM2知识点及区别:
pwm1模式:
在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平,否则为有效电平。(总结:在PWM1模式下,无论是向上计数还是向下计数,TIMx_CNT<TIMx_CCR1时通道1为有效电平)
pwm2模式:
在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。(总结:在PWM2模式下,无论是向上计数还是向下计数,TIMx_CNT>TIMx_CCR1时通道1为有效电平)
main.c代码如下:
#include "stm32f10x.h"
#include "pwm.h"void delay(uint16_t time)
{uint16_t i;while(time--){i = 12000;while(i--);}
}int main()
{uint8_t i = 195;Pwm_Init();while(1){for(i = 195; i >= 175; i-=5){TIM_SetCompare2(TIM3, i);delay(300);if(i < 175){i = 195;}}}
}
实现单片机驱动舵机效果
即:0°转到45°
45°转到90°
90°转到135°
135°转到180°
180°转到0°
STM32F103C8T6之SG90舵机控制相关推荐
- ESP8266驱动SG90舵机控制开关灯(灯的开关)的折腾记录
https://blog.csdn.net/qq_47749454/article/details/117638828 想法来源地址在上面,可以去参考一下,建议是结合两篇文章一块看,按照大佬的先来折腾 ...
- 【STM32】基于F103C8T6和ESP01远程控制灯光开关(SG90舵机控制)
先上实物! 视频演示 主控和配件选择 主控板选择经济实惠的c8t6,网络通信选择esp01,因为寝室使用不能更改电路,所以用一个sg90舵机来按点灯开关. 服务器 服务器使用自己搭建的emqx服务器, ...
- C51单片机定时器2实现SG90舵机控制
谈起舵机最初的了解应用于航模,偶然的机会在网上看到有牛人使用多个舵机做人形机器人的关节,感觉这小东西很有趣,蒙发了买来学习学习的想法,这已经是多年前的事了,后来由于某些原因,这个想法直到今年才落地.小 ...
- 笔记-模拟舵机:基于STM32F103ZET的SG90舵机控制
写在前面:笔者是一名小白,如有错误,还请及时指正. 1.舵机基本知识 1.SG90舵机是一个模拟舵机,而非数字舵机,这两者的区别是这样,数字舵机只要给一个PWM信号即可,这个信号是目的地的位置,舵机会 ...
- php控制舵机,分享一个关于SG90舵机的实验(+串口控制)
新手第一次做实验,如果有写的不对的地方,还希望各位大佬多多指导. --------第一次做实验,也发现了自己学习过的东西掌握的不是很好,大佬们有啥入门级别的模块也可以推荐一下,分享当然更好了. --- ...
- 树莓派-10-安装jupyter并控制SG90舵机
1 开发工具jupyter notebook 1.1 安装jupyter #(1)安装jupyter notebook $ sudo pip3 install jupyter $ sudo pip3 ...
- STM32F103单片机控制SG90舵机
前言 在智能衣柜系统中,试用SG90旋转0°-180°,模拟衣柜的开关门,舵机正转开门,180°-0°反转模拟一个关门的现象. 一,SG90舵机 1.1SG90链接: [淘宝]https://m.tb ...
- 51单片机控制SG90舵机、MG90S舵机
舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...
- mblock控制SG90舵机模块
[1.关于SG90舵机] SG90舵机是Arduino中常用的一种舵机.这是一种模拟舵机,和数字舵机不同,模拟舵机需要持续发送控制脉冲,才能使舵机旋转到某个角度并保持. Arduino中使用SG90舵 ...
- SG90舵机的原理和控制方式
前言 做过机器人.智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的. 舵机只是我们通俗的叫法,它的本质是一个伺服电机,也可以叫做位置(角度)伺服驱动器.一般被应用在那些需要控制角度变化的 ...
最新文章
- 9.path Sum III(路径和 III)
- ext js IE9显示白板 页面浏览器模式强制渲染IE8
- sql server 2008 您所做的更改要求删除并重新创建以下表
- Python 的AES加密与解密
- python如何提交作业_玛雅截稿作业提交python命令
- apache camel_Apache Camel入门
- 事实证明了 平台识别算法适应性还是很强的
- MIT发布软体机器鱼,卧底鱼群大计可成
- typora 有道云笔记_有道云—目前最好用的免费笔记
- The server of Apache (四)——配置防盗链和隐藏版本信息
- docker安装mysql并配置文件_Docker安装mysql,并自定义my.cnf
- btrfs 入门使用
- 使用BitLocker实现磁盘加密、u盘加密、移动硬盘加密
- 有限覆盖定理证明其他实数完备性定理
- 微信小程序药店管理系统+后台管理系统|前后分离VUE
- HackerRank Truck Tour
- mysql启动失败LSB_mysql启动报错:Failed to start LSB: start and stop MySQL
- 单片机中常用的串口通信协议帧
- 基于mbedtls的AES加密(C/C++)
- phpstorm 2019.2
热门文章
- 《鸟哥 Linux 私房菜:基础版》阅读笔记
- fgo怎么把new去掉_fgo指令选择怎么撤销?fgo暴击星怎么分配?
- fgo服务器维护2018.123,FGO9月30日更新维护公告
- 区块链开发入门教程【加精】
- 网易面试软件测试面试题
- Plugin Alliance DS Audio THORN for Mac(电子音乐合成器插件) v1.2.0破解版
- Autocad 字体
- 深度强化学习之A3C网络—理论及代码(小车上山)
- SQLMAP简易使用教程
- petalinux设计——使用petalinux定制linux系统