STM32F407学习笔记——MG90S舵机模块(基本控制)
STM32F407学习笔记——MG90S舵机模块(基本控制)
一、基本原理:
通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms)。
旋转角度 | 脉冲时间 | 比较寄存器 | 占空比 |
---|---|---|---|
0° | 0.5ms | 195 | 2.5% |
45° | 1ms | 190 | 5% |
90° | 1.5ms | 185 | 7.5% |
135° | 2ms | 180 | 10% |
180° | 2.5ms | 175 | 12.5% |
占空比计算公式:脉冲时间/20ms
比较寄存器:200-200*占空比
文章后面给出的代码只需改变比较寄存器即可控制舵机旋转 角度。
二、代码功能:
改变比较寄存器控制舵机旋转角度。
三、接线:
PA0——PWM信号线(黄线)、+5v——+5v(红线)、GND——GND(棕线)
四、代码部分:
SG90.h
#ifndef __SG90_H
#define __SG90_H#include <stm32f4xx.h>
#include <delay.h>
#include "math.h"
void TIM2_PWM_Init(u32 arr,u32 psc);#endif //__SG90_H
SG90.h
#include "sys.h"
#include "SG90.h"void TIM2_PWM_Init(u32 arr,u32 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM2); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA,&GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_Pulse = 0;TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2,ENABLE);TIM_Cmd(TIM2, ENABLE);
}
main.c
#include "sys.h"
#include "HC-SR04.h"
#include "SG90.h"
#include "delay.h"int main()
{delay_init(168);TIM2_PWM_Init(200-1,8400-1);while(1){ delay_ms(1000); TIM_SetCompare1(TIM2,175); delay_ms(1000); TIM_SetCompare1(TIM2,180); delay_ms(1000); TIM_SetCompare1(TIM2,185); delay_ms(1000); TIM_SetCompare1(TIM2,190); delay_ms(1000); TIM_SetCompare1(TIM2,195); }
}
PS:此模块及代码可与陀螺仪模块、超声波模块配合使用。
该文章参考资料:STM32控制舵机的原理及代码
仅供初学者学习使用
STM32F407学习笔记——MG90S舵机模块(基本控制)相关推荐
- 好程序员web前端分享Nodejs学习笔记之Stream模块
好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...
- node.js学习笔记5——核心模块1
node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...
- “物联网开发实战”学习笔记-(二)手机控制智能电灯
"物联网开发实战"学习笔记-(二)手机控制智能电灯 如果搭建好硬件平台后,这一次我们的任务主要是调试好智能电灯,并且连接到腾讯云的物联网平台. 腾讯云物联网平台 腾讯物联网平台的优 ...
- 【STM32F407学习笔记】GPIO(一)
[STM32F407学习笔记]GPIO(一) 1. GPIO基础知识 1.1 GPIO工作方式 1.2 GPIO相关配置寄存器 1.2.1 端口模式寄存器:GPIOx_MODER 1.2.2 输出类型 ...
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...
- python学习笔记4(模块
python学习笔记4(模块) 一.模块 1.1 import语句 1.2 __name__属性 1.3 dir()函数 1.4 包 2.1 导入特定模块: 二.输入与输出 2.1 format使用 ...
- Apollo学习笔记3-定位模块配置
Apollo学习笔记3-定位模块配置 环境介绍 导航设备参数配置 导航设备配置 (1)杆臂配置 (2)GNSS 航向配置 (3)导航模式配置 (4) USB 接口输出设置 (5)网口配置 (6) PP ...
- Python学习笔记__5章 模块
# 这是学习廖雪峰老师python教程的学习笔记 1.概览 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,在Python中,一个.py文件就称之为 ...
- 操作系统学习笔记-2.1.3进程控制
操作系统学习笔记-2019 王道考研 操作系统-2.1.3进程控制 文章目录 3.进程控制 3.1知识概览 3.2 基本概念 3.2.1什么是进程控制? 3.2.2如何实现进程控制? 3.3进程控制相 ...
最新文章
- c嵌入python类获取返回值
- python模块手册_python模块说明
- 【错误记录】Groovy 工程编译报错 ( java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream )
- java成果_JAVA WEB期末项目第二阶段成果
- java default修饰符_2019最新java面试题附答案
- 前端学习(3009):vue+element今日头条管理--登录中的loding
- 记录 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce
- 通杀IIS7.0畸形解析0day漏洞
- Delphi 中的字符串函数(6) - StrUtils 中的 Ansi 字符串函数
- autocad 二次开发 拆分图纸_(整理)autocad二次开发块表记录获得和cad层级结构,以及图块保存与打开....
- 绘制相同到期日欧式期权组合收益图(python)
- SQL 排序,筛选,过滤,聚合函数
- java大作业私人管家系统_微软蓝天云平台:中小企业的私人管家
- 看过无数Java GC文章,这5个问题你也未必知道!
- 前端校招字节跳动面试 第三篇
- 陀螺研究院|深圳数据要素市场化发展解读与未来展望
- Worker节点加入K8S集群报错:error execution phase preflight: couldn‘t validate the identity of the API Server
- 一起学英语第二季第六期
- 动态网页和静态网页之间的区别?
- javascript怎么清空一个div里面的内容