STM32控制SG90舵机
简介
通过使用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舵机相关推荐
- STM32的SG90舵机驱动
今天来讲一下如何使用STM32来驱动SG90舵机 舵机:舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统.舵机只是一种通俗的叫法,其实质是一个伺服马达. 驱动SG90舵 ...
- 树莓派-10-安装jupyter并控制SG90舵机
1 开发工具jupyter notebook 1.1 安装jupyter #(1)安装jupyter notebook $ sudo pip3 install jupyter $ sudo pip3 ...
- 51单片机控制SG90舵机、MG90S舵机
舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...
- mblock控制SG90舵机模块
[1.关于SG90舵机] SG90舵机是Arduino中常用的一种舵机.这是一种模拟舵机,和数字舵机不同,模拟舵机需要持续发送控制脉冲,才能使舵机旋转到某个角度并保持. Arduino中使用SG90舵 ...
- 51单片机控制sg90舵机
1.PWM PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就 ...
- STM32F103单片机控制SG90舵机
前言 在智能衣柜系统中,试用SG90旋转0°-180°,模拟衣柜的开关门,舵机正转开门,180°-0°反转模拟一个关门的现象. 一,SG90舵机 1.1SG90链接: [淘宝]https://m.tb ...
- STM32驱动sg90舵机失败
背景: 十月份参加学校举办的Robomaster校内赛,使用sg90舵机驱动机械臂夹取小球. 遇到问题: 使用STM32单片机的定时器输出PWM来驱动舵机,一直无法使舵机运 ...
- 基于STM32驱动SG90舵机
1.舵机介绍 这边对SG90舵机进行一个简短的文字介绍: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms.脉冲的宽度将决定马达转动的距 ...
- 树莓派控制多个舵机_树莓派控制SG90舵机
SG90舵机硬件接口: SG90 一共三根线,红线接5v电源,棕线GND,黄线为数据控制线,接到GPIO上舵机参数: SG90 脉冲周期为20ms,脉宽0.5ms-2.5ms对应的角度-90到+90, ...
- Arduino ESP8266控制SG90舵机输出PWM信号
1. 什么是舵机: 在机器人机电控制系统中,舵机控制效果是性能的重要影响因素.舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口. 舵机是一种位置(角 ...
最新文章
- 【行业报告】基于社交图谱关系的反欺诈产品应用——青云
- HighNewTech之Job:关于人工智能领域专业的公司求职数据分析(最全)
- VC MFC界面上显示BMP图片
- COLING 2018 最佳论文解读:序列标注经典模型复现
- SQL Server查询所有数据库下模式schema
- 群体测试中的假阴性影响
- pytorch:tensor的运算
- [翻译]SharePoint2007中创建Forms认证方式的站点
- vue(2)学习历程----从iview框架入手
- 【Python】SciKit-Learn包安装问题
- Go语言之高级篇beego框架之模型(Models)
- 修改IP、DNS、MAC工具VC源码实现
- 消息队列实现原理(以kafka为例)
- SpringBoot整合tkMybatis基础教程
- 【C语言】Linux 文件读写
- anguarjs 图片预览_一键精准提取图片文字,这么高效的app确定不盘一下嘛
- [注]微信公众号的运营推广总结方案(持续更新)
- Six提供了Python 2和Python 3的兼容库
- 分布式session会话Sticky Sessions
- 基于极限学习机的预测、图像降噪和回归