当前位置: 首页 > news >正文

舵机驱动详解(模拟/数字 STM32)

目录

一、介绍

二、模块原理

1.舵机驱动原理

2.引脚描述

三、程序设计

main.c文件

servo.h文件

servo.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        舵机(Servo)是在程序的控制下,在一定范围内连续改变输出轴角度并保持的电机系统。即舵机只支持在一定角度内转动,无法像普通直流电机按圈转;其主要控制物体的转动并保持(机器人关节、转向机构)。适用于位置角度经常变化的场合。可以作为理想的电机驱动器件。

以下MG90S舵机模块的参数:

型号

MG90S/MG90

使用电压

4.8V

反应速度

0.11s4.8V

转动角度

180(90,右90)

使用温度

0~55

工作扭矩

2.0kg

产品重量

13.6g

 

哔哩哔哩视频链接:

舵机驱动详解(模拟/数字 STM32)

(资料分享见文末) 

二、模块原理

1.舵机驱动原理

舵机的控制一般需要一个20MS左右的时基脉冲,该脉冲的高电平部分一般为0.5MS-2.5MS范围内的角度控制脉冲部分总间隔为2MS。以180度角度为例,那么对应的控制关系是这样的

 

2.引脚描述

引脚名称

描述

VCC

供给电压5V

GND

地线

S

信号线

三、程序设计

使用STM32F103C8T6通过按键控制舵机旋转指定角度。

SERVO

PA2

KEY

PB1

OLED_SCL

PB11

OLED_SDA

PB10

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "servo.h"
#include "key.h"/*****************辰哥单片机设计******************STM32* 项目			:	舵机驱动实验                     * 版本			: V1.0* 日期			: 2024.9.27* MCU			:	STM32F103C8T6* 接口			:	参看servo.h							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************/int key = 0;
float Angle;			//定义角度变量int main(void)
{ SystemInit();//配置系统时钟为72M	delay_init(72);LED_Init();LED_On();Servo_Init();USART1_Config();//串口初始化Key_Init();OLED_Init();printf("Start \n");delay_ms(1000);OLED_Clear();//显示“舵机角度:”OLED_ShowChinese(0,0,0,16,1);OLED_ShowChinese(16,0,1,16,1);OLED_ShowChinese(32,0,2,16,1);OLED_ShowChinese(48,0,3,16,1);OLED_ShowChar(64,0,':',16,1);while (1){key = Key_GetData();if(key){Angle += 30;				//角度变量自增30if (Angle > 180)			//角度变量超过180后{Angle = 0;				//角度变量归零}}Servo_SetAngle(Angle);			//设置舵机的角度为角度变量OLED_ShowNum(50, 24, Angle, 3,16,1);	//OLED显示角度变量}
}

servo.h文件

#ifndef __SERVO_H
#define	__SERVO_H
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"/*****************辰哥单片机设计******************STM32* 文件			:	舵机驱动驱动h文件                   * 版本			: V1.0* 日期			: 2024.9.27* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************//***************根据自己需求更改****************/
// SERVO舵机 GPIO宏定义#define	SERVO_CLK										RCC_APB2Periph_GPIOA#define SERVO_GPIO_PIN 							GPIO_Pin_2
#define SERVO_GPIO_PORT  						GPIOA/*********************END**********************/void Servo_Init(void);
void PWM_SetCompare3(uint16_t Compare);
void Servo_SetAngle(float Angle);#endif

servo.c文件

#include "servo.h"/*****************辰哥单片机设计******************STM32* 文件			:	舵机驱动模块c文件                   * 版本			: V1.0* 日期			: 2024.9.27* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************/void Servo_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(SERVO_CLK, ENABLE);		//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = SERVO_GPIO_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(SERVO_GPIO_PORT, &GPIO_InitStructure);						//将PA1和PA2引脚初始化为推挽输出TIM_InternalClockConfig(TIM2);//配置时基单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;		//时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;		//计数模式TIM_TimeBaseInitStructure.TIM_Period = 20000-1;			//自动重装ARR	分辨率TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;		//预分频PSC	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(&TIM_OCInitStructure);		//给结构体赋予初值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;			//CCRTIM_OC3Init(TIM2,&TIM_OCInitStructure);TIM_Cmd(TIM2,ENABLE);
}	void PWM_SetCompare3(uint16_t Compare)
{TIM_SetCompare3(TIM2, Compare);		//设置CCR2的值
}void Servo_SetAngle(float Angle)
{PWM_SetCompare3(Angle / 180 * 2000 + 500);	//设置占空比//将角度线性变换,对应到舵机要求的占空比范围上
}

四、实验效果 

五、资料获取

项目分享

相关文章:

舵机驱动详解(模拟/数字 STM32)

目录 一、介绍 二、模块原理 1.舵机驱动原理 2.引脚描述 三、程序设计 main.c文件 servo.h文件 servo.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 舵机(Servo)是在程序的控制下,在一定范围内连续改变输出轴角度并保持的电机系统。即舵机只支持…...

dvwa:文件包含、文件上传

文件包含 本地文件包含(敏感信息泄露)和远程文件包含(命令执行) 本地文件包含一般包含一些本地的敏感文件,如:/etc/passwd或/etc/shadow等 远程文件包含能使得服务器代码执行,如包含黑客vps的…...

基于 C# .NET Framework 4.0 开发实现 WCF 服务实例详解(二)——实现Windows服务内嵌WCF服务

目录 引言 1. 创建一个新的Windows服务项目 2. 添加WCF服务 2.1 添加服务接口和实现 2.2 添加服务配置 3. 实现Windows服务 3.1 修改Service1类 3.2 在项目中添加ServiceInstaller 4. 安装和运行Windows服务 4.1 编译项目 4.2 使用InstallUtil.exe安装服务 …...

【ArcGIS/C#】调用控制台处理代码

代码示例 private static string[] run_conda_process(string command, Action<string> on_msg, CancellationTokenSource cancel){if (string.IsNullOrEmpty(command)){return new string[]{null,ArcGIS.Desktop.Internal.Core.Conda.Resources.Error_Unexpected + &qu…...

06_23 种设计模式之《适配器模式》

文章目录 一、适配器模式基础知识实例 一、适配器模式基础知识 适配器模式定义&#xff1a;将一个类的接口转换成客户希望的另一个接 口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可 以一起工作。 Client&#xff1a;客户端&#xff0c;调用自已需要的领域接口…...

Go语言--快速入门

Go语言特点 我们先看一下简单的Go语言程序 package mainimport "fmt"func main() { // 错误&#xff0c;{ 不能在单独的行上fmt.Println("Hello, World!") }我们可以看到外型非常像我们的JAVA&#xff0c;但是不需要&#xff1b;作为结尾&#xff0c;…...

京东云主机怎么用?使用京东云服务器建网站(图文教程)

京东云主机怎么用&#xff1f;非常简单&#xff0c;本文京东云服务器网jdyfwq.com使用以使用京东云服务器搭建WordPress博客网站为例&#xff0c;来详细说下京东云主机的使用方法。使用京东云服务器快速搭建WordPress网站教程&#xff0c;3分钟基于应用镜像一键搞定&#xff0c…...

Linux 基础入门操作-实验七 进程的介绍

实验七 进程的介绍 7.1 进程基础概念 Linux进程在内存中包含三部分数据&#xff1a;码段、堆栈段和数据段。代码段存放了程序的代码。代码段可以为机器中运行同一程序的数个进程共享。堆栈段存放的是子程序的返回地址、子程序的参数及程序的局部变量。而数据段则存放程序的全…...

SQL进阶技巧:SQL中的正则表达式应用?

目录 0 引言 1. 正则表达式函数 1.1 regexp_extract 1.2 regexp_replace 1.3 regexp_like 2. 在WHERE子句中使用正则表达式 3. 在GROUP BY中使用正则表达式 4. 性能考虑 5. 高级正则表达式技巧 5.1 使用正则表达式进行数据清洗 5.2 使用正则表达式处理JSON 6. 正则…...

算法数组面试理论

数组是存放在连续内存空间内的相同类型数据的集合 &#xff08;所以在删除添加元素的时候需要移动其他的元素的地址&#xff09; 数组的元素是不能删除的&#xff0c;只能覆盖。&#xff08;因为内存地址是连续的&#xff0c;所以不能删除。或者可以这么理解&#xff1a;在一…...

ASP.NET Zero是什么?适合哪些业务场景?

一、ASP.NET Zero是什么&#xff1f; ASP.NET Zero 是一个基于 ASP.NET Boilerplate (ABP) 框架的模板项目&#xff0c;它提供了预建的页面和强大的基础设施架构&#xff0c;以便开发者能够快速开发应用层。它的特点包括但不限于&#xff1a; 多合一解决方案&#xff1a;提供多…...

获取期货股票分钟级别数据以及均线策略

【数据获取】 银河金融数据库&#xff08;yinhedata.com&#xff09; 能够获取国内外金融股票、期货历史行情数据&#xff0c;包含各分钟级别。 【搭建策略】 均线策略作为一种广泛应用于股票、期货等市场的技术分析方法&#xff0c;凭借其简单易懂、操作性强等特点&#xf…...

入门篇-1 数据结构简介

数据结构简介 在计算机科学中&#xff0c;数据结构是指组织、存储和管理数据的方式&#xff0c;它使得数据可以被高效地访问和修改。数据结构是计算机程序设计和算法分析中的一个重要概念&#xff0c;因为它们直接影响到程序的执行效率和内存使用。 1. 什么是数据结构&#x…...

Anaconda安装

1.进入Anaconda官网 2.填写邮箱信息 3.在邮箱消息中获取下载链接 4.进入下载页面&#xff0c;选择合适版本下载 5.进入Anaconda安装界面 6.点击“I agree” 7.选择个人即可“Just Me” 8.选择文件安装路径 9.允许创建快捷方式 10.等待下载 11.完成安装...

Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群

随着业务的增长&#xff0c;陆续会有新的节点需要加入集群。当我们在集群中的某个节点上使用命令生成令牌时会出现报错信息。 # 生成令牌 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node出现报错信息&#xff1a; Unable to create enrollment…...

项目建设方案,软件技术方案,整体技术方案,软件建设文档编制(word原件)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…...

vue3定义组件

在Vue 3中&#xff0c;定义组件有多种方式&#xff0c;包括使用单文件组件&#xff08;Single File Components, SFC&#xff09;、使用JavaScript对象定义组件、以及使用组合式API&#xff08;Composition API&#xff09;。 1. 单文件组件&#xff08;SFC&#xff09; 这是…...

BOM常见操作方法汇总

BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;提供了与浏览器窗口交互的方法和属性。BOM 包括了许多对象&#xff0c;如 window、location、history、navigator 等&#xff0c;这些对象提供了与浏览器窗口相关的各种功能。 以下是一些常见的 BO…...

Python+whisper/vosk实现语音识别

目录 一、Whisper 1、Whisper介绍 2、安装Whisper 3、使用Whisper-base模型 4、使用Whisper-large-v3-turbo模型 二、vosk 1、Vosk介绍 2、vosk安装 3、使用vosk 三、总结 一、Whisper 1、Whisper介绍 Whisper 是一个由 OpenAI 开发的人工智能语音识别模型&#xf…...

如何在算家云搭建LivePortrait(视频生成)

一、LivePortrait简介 LivePortrait 是一个可控人像视频生成框架&#xff0c;能够准确、实时地将驱动视频的表情、姿态迁移到静态或动态人像视频上&#xff0c;生成极具表现力的视频结果。 该项目的模型产生了定性肖像动画。只要输入一张静态的肖像图像&#xff0c;我们的模型…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...