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

STM32之SG90舵机控制

目录

前言:

一、硬件准备与接线

1.1 硬件清单

1.2 接线

二、 SG90舵机简介

1.1 外观

 1.2 基本参数

1.3 引脚说明 

1.4 控制原理

1.5 特点

1.6 常见问题

三、 单片机简介

四、 程序设计 

4.1 定时器配置

4.2 角度控制函数

4.3 主函数调用

五、 总结


前言:

STM32F103C8T6 是一款性价比极高的ARM Cortex-M3内核微控制器,广泛应用于嵌入式开发。SG90舵机 则是小型舵机的代表,常用于机器人、智能家居等场景。本文将通过硬件连接、PWM信号配置、代码实现等步骤,详细讲解如何用STM32F103C8T6控制SG90舵机。

一、硬件准备与接线

1.1 硬件清单

器件数量备注
STM32F103C8T6最小系统板1核心控制器
SG90舵机1工作电压4.8-6V,信号线需PWM
5V电源模块1独立供电,避免板载电流不足
杜邦线若干连接电路

1.2 接线

SG90舵机           STM32F103C8T6        外部电源

棕色线(GND)  →    GND引脚            →  GND
红色线(VCC)  →    连外部5V             →  5V
橙色线(信号)   →    PB0(TIM3_CH3)

注意:若需驱动多个舵机,建议使用独立电源供电,避免STM32板载电源过载。

二、 SG90舵机简介

1.1 外观

 1.2 基本参数

参数数值
工作电压4.8V - 6V(典型5V)
电流消耗100mA(空闲),250mA(运行)
扭矩1.2kg·cm(4.8V),1.6kg·cm(6V)
转速0.12秒/60°(4.8V),0.10秒/60°(6V)
重量9克
尺寸22.2mm × 11.8mm × 31mm
转动角度180°(部分型号支持360°)
齿轮材质塑料(部分型号为金属齿轮)
接口类型3针(信号、电源、地)

1.3 引脚说明 

SG90舵机通常有3根线

棕色线(GND):接地。

红色线(VCC):接电源(4.8V-6V)。

橙色线(信号线):接收PWM信号控制角度。

1.4 控制原理

PWM信号控制

  • 信号周期:20ms(50Hz)。

  • 脉冲宽度:0.5ms - 2.5ms,对应角度0° - 180°。

1.5 特点

优点

  • 体积小、重量轻:适合空间受限的项目。

  • 价格低廉:成本低,适合批量使用。

  • 易于控制:标准PWM信号接口,兼容性强。

缺点

  • 扭矩较小:仅适合轻负载场景。

  • 塑料齿轮易磨损:长时间高负载工作可能导致损坏。

1.6 常见问题

1)舵机抖动或不转动

  • 检查电源电压是否足够。

  • 检查PWM信号是否正确。

2) 舵机发热严重

  • 检查是否超负荷运行。

  • 确保转动范围内无机械卡阻。

3) 角度不准确

  • 校准PWM信号脉冲宽度。

  • 检查舵机齿轮是否磨损。

三、 单片机简介

STM32F103C8T6最小系统板:

本文使用的开发板为STM32F103C8T6最小系统板,SG90舵机使用到的引脚为PB0引脚。 

四、 程序设计 

4.1 定时器配置

使用 TIM3的通道3(PB0)生成PWM,步骤如下:

1) 时钟配置

  • 系统时钟设为72MHz(默认配置)。

  • TIM3时钟源为APB12总线(72MHz)。

2) 定时器参数计算

  • PWM频率:50Hz → 周期20ms 。

  • 预分频值(PSC):72MHz / (719 + 1) = 1MHz → 每个计数周期10μs。

  • 自动重装载值(ARR):20,000μs / 10μs = 2000 → ARR = 1999(从0计数)。

3) 脉冲宽度计算(以90°为例):

  • 1.5ms = 1500μs → 占空比 = 1500 / 20000 = 7.5%。

  • 比较寄存器(CCR):1500 → CCR = 1500 - 1 = 1499

定时器初始化代码如下:

void SG90_PWM_Init(u16 arr, u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;// 使能定时器TIM3时钟,注意TIM3时钟为APB1,而非APB2RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 使能PWM输出GPIO口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;       // 定时器TIM3的PWM输出通道3,TIM3_CH3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化GPIOTIM_TimeBaseStructure.TIM_Period = arr;//自动重装值TIM_TimeBaseStructure.TIM_Prescaler =psc; //时钟预分频数TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化TIM3//初始化TIM3_CH3的PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC3Init(TIM3, &TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能通道的预装载寄存器TIM_ARRPreloadConfig(TIM3, ENABLE); //使能重装寄存器TIM_Cmd(TIM3, ENABLE);//使能定时器TIM3,准备工作 
}

初始化参数如下: 

SG90_PWM_Init(1999,719);  //初始化舵机

4.2 角度控制函数

将角度转换为对应的占空比,角度最大为180° 。

void SG90_Set_Angle(uint8_t angle)
{if (angle > 180)angle = 180;uint16_t duty = 10 * (angle + 45) / 9; // 角度转化为占空比TIM_SetCompare3(TIM3, duty); // 设置占空比    
}  

4.3 主函数调用

SG90_Set_Angle(0);  //占空比2.5%,0度
delay_ms(1000);
SG90_Set_Angle(90);  //占空比7.5%,90度
delay_ms(1000);

五、 总结

        通过STM32F103C8T6的定时器PWM功能,可精准控制SG90舵机角度。关键在于正确配置定时器的预分频值和自动重装载值,并合理映射角度到脉宽。本方案成本低、可靠性高,适合机器人、智能家居等应用场景。

相关文章:

STM32之SG90舵机控制

目录 前言: 一、硬件准备与接线 1.1 硬件清单 1.2 接线 二、 SG90舵机简介 1.1 外观 1.2 基本参数 1.3 引脚说明 1.4 控制原理 1.5 特点 1.6 常见问题 三、 单片机简介 四、 程序设计 4.1 定时器配置 4.2 角度控制函数 4.3 主函数调用 五、 总结 …...

VSCode Error Lens插件介绍(代码静态检查与提示工具)(vscode插件)

文章目录 VSCode Error Lens 插件介绍**功能概述****开发背景****使用方法****适用场景** VSCode Error Lens 插件介绍 功能概述 Error Lens 是一款增强 VS Code 错误提示的扩展工具,通过 内联显示错误和警告信息,直接定位代码问题,提升开发…...

list_for_each_entry_safe 简介

list_for_each_entry_safe 是 Linux 内核中用于遍历链表的一个宏,特别适用于在遍历过程中可能需要删除链表节点的场景。它的设计保证了在删除当前节点时,不会影响后续节点的访问,从而实现安全的遍历。 定义 #define list_for_each_entry_sa…...

微软AutoGen高级功能——Memory

介绍 大家好,博主又来给大家分享知识了。这次又要给大家分享什么呢?哈哈。这次要给大家分享的是微软AutoGen框架的高级且重要的功能:Memory。在微软AutoGen中,Memory(记忆)是一个重要概念,它主要用于存储和管理智能体…...

【鸿蒙开发】第三十六章 状态管理 - V1V2混用和迁移指导

目录​​​​​​​ 1 自定义组件混用场景指导 1.1 概述 1.2 状态管理装饰器总览 状态管理V1的装饰器 状态管理V2的装饰器 状态管理装饰器支持的数据类型总览 1.3 限制条件 1.3.1 V1和V2的装饰器不允许混用 1.V1的自定义组件中不可以使用V2的装饰器 2.V2的自定义组件…...

轮子项目--消息队列的实现(3)

上一篇文章中我把一些关键的类以及表示出来,如何对这些类对应的对象进行管理呢?管理分为硬盘和内存上,硬盘又分为数据库(管理交换机,队列和绑定)和文件(管理消息),本文就…...

一文深入了解DeepSeek-R1:模型架构

本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…...

秘密信息嵌入到RGB通道的方式:分段嵌or完整嵌入各通道

目录 1. 将秘密信息分为三部分的理由 (1)均匀分布负载 (2)提高鲁棒性 (3)容量分配 2. 不将秘密信息分为三部分的情况 (1)嵌入容量 (2)视觉质量 &#…...

Ai人工智能的未来:趋势、挑战与机遇

Ai人工智能的未来:趋势、挑战与机遇 引言 人工智能(AI)已经成为当代科技发展的核心驱动力,其影响力渗透到各个行业,并塑造了我们未来的社会结构。无论是在医疗、金融、制造业,还是在自动驾驶、智能客服、…...

理解WebGPU 中的 GPUDevice :与 GPU 交互的核心接口

在 WebGPU 开发中, GPUDevice 是一个至关重要的对象,它是与 GPU 进行交互的核心接口。通过 GPUDevice ,开发者可以创建和管理 GPU 资源(如缓冲区、纹理、管线等),并提交命令缓冲区以执行渲染和计算任…...

Java 设计模式之桥接模式

文章目录 Java 设计模式之桥接模式概述UML代码实现 Java 设计模式之桥接模式 概述 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。通过桥接模式,可以避免类爆炸问题,并提高系统的可扩展性。 UML 核心…...

机器学习(李宏毅)——GAN

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!! 不得不说GAN真是博大精深! 二、大纲 GAN问世基本思想原理剖析Tips of GANGAN的应用Cycle GANEva…...

QT无弹窗运行和只允许运行一个exe

最近做一个小功能&#xff0c;需要后台运行QT程序&#xff0c;无弹窗&#xff0c;并且只允许一个exe运行&#xff0c;不关闭程序&#xff0c;无法2次启动。 main.cpp #include "deleteshotcurveflie.h" #include <QApplication> #include <QSharedMemory&…...

C++ STL 容器

C 的 STL&#xff08;Standard Template Library&#xff09; 提供了多种容器&#xff0c;分为以下几类&#xff1a; 序列容器&#xff08;Sequence Containers&#xff09;关联容器&#xff08;Associative Containers&#xff09;无序关联容器&#xff08;Unordered Associa…...

开源赋能,智造未来:Odoo+工业物联网,解锁智能工厂新范式——以真实案例解读制造业数字化转型的降本增效密码

工业物联网的机遇与挑战&#xff1a;为什么企业需要Odoo&#xff1f; 《中国智能制造发展研究报告2023》指出&#xff0c;85%的制造企业已启动数字化转型&#xff0c;但超60%面临“数据孤岛、系统割裂、成本高企”的痛点[1]。传统ERP系统难以实时对接产线设备&#xff0c;而定…...

CTF-WEB: 利用iframe标签利用xss,waf过滤后再转换漏洞-- N1ctf Junior display

核心逻辑 // 获取 URL 查询参数的值 function getQueryParam(param) { // 使用 URLSearchParams 从 URL 查询字符串中提取参数 const urlParams new URLSearchParams(window.location.search); // 返回查询参数的值 return urlParams.get(param); } // 使用 DOMPuri…...

K8s组件

一、Kubernetes 集群架构组件 K8S 是属于主从设备模型&#xff08;Master-Slave 架构&#xff09;&#xff0c;即有 Master 节点负责集群的调度、管理和运维&#xff0c;Slave 节点是集群中的运算工作负载节点。 主节点一般被称为 Master 节点&#xff0c;master节点上有 apis…...

python面试题

以下是一些Python面试题: 一、基础语法 Python中的列表(list)和元组(tuple)有什么区别? 答案: 可变性:列表是可变的,可以修改列表中的元素、添加或删除元素;元组是不可变的,一旦创建就不能修改。语法:列表使用方括号[]定义,元组使用圆括号()定义(单个元素的元组…...

AOS安装及操作演示

文章目录 一、安装node1.1 在 macOS 上管理 Node版本1.1.1 安装 nvm1.1.2 验证 nvm 是否安装成功1.1.3 使用 nvm 安装/切换 Node.js 版本1.1.4 卸载 Node.js 版本 1.2 在 windows 上管理 Node版本1.2.1 安装 nvm-windows1.2.2 安装 Node.js 版本1.2.3 切换 Node.js 版本1.2.4 卸…...

蓝桥杯单片机组第十三届初赛试题-程序题(第2批)

题目到官网看即可&#xff0c;有点久了有些细节记不清了&#xff0c;可能以前发的帖子解释详细一点。 这是我单片机初学的时候写的&#xff0c;像代码结构什么的肯定有可以提升的地方&#xff0c;多多包涵&#xff0c;将就看一下。 i2c文件使用官方的&#xff0c;pcf8591函数…...

硬件补贴、软件盈利:互联网商业模式的再次轮回?——从软件测试视角看生态闭环与质量博弈

一、轮回的轮廓&#xff1a;当硬件变成“管道”&#xff0c;软件成为“水龙头”“硬件补贴、软件盈利”并不是一个新鲜命题。早在十多年前&#xff0c;电信运营商就曾用“存话费送手机”开启了终端补贴的浪潮&#xff0c;随后互联网电视、智能音箱、网约车硬件&#xff08;如车…...

CANN/AMCT线性量化训练API文档

LinearQAT 【免费下载链接】amct AMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。 项目地址: https://gitcode.com/cann/amct 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2…...

避坑指南:ESP32-CAM用I2C驱动0.91寸OLED时,SDA/SCL引脚别接错了

ESP32-CAM与OLED屏的I2C连接避坑实战&#xff1a;从硬件引脚到代码调试的全方位指南 第一次拿到ESP32-CAM和0.91寸OLED屏时&#xff0c;我天真地以为只要按照常规I2C接线就能轻松点亮屏幕。结果在经历了一整天的调试后&#xff0c;才意识到这个看似简单的连接背后藏着不少"…...

Petals:基于点对点网络的分布式大模型推理与微调实践指南

1. 项目概述&#xff1a;当大模型遇见“点对点”如果你和我一样&#xff0c;对动辄数百亿参数的大语言模型&#xff08;LLM&#xff09;垂涎三尺&#xff0c;却又被其恐怖的硬件需求劝退&#xff0c;那么Petals这个项目绝对值得你花时间深入了解。它解决了一个非常实际的痛点&a…...

MyTV-Android深度解析:Android 4.x系统兼容性挑战与架构设计攻坚

MyTV-Android深度解析&#xff1a;Android 4.x系统兼容性挑战与架构设计攻坚 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android MyTV-Android是一款专为老旧Android设备优化的电视直播应用&a…...

当AI开始「嫌贫爱富」

GPT-5.5涨价三倍,SpaceX花600亿美元买一个编程工具。这两个新闻放在一起,揭示了一个被大多数人忽略的事实—— 不是AI越来越便宜,是AI市场正在剧烈撕裂。 如果你最近关注AI新闻,可能会有一种错觉:AI正在变得越来越便宜、越来越亲民。 DeepSeek V4开源免费,国产大模型卷出…...

CANN/HCCL算法分析器使用指南

算法分析器使用指导 【免费下载链接】hccl 集合通信库&#xff08;Huawei Collective Communication Library&#xff0c;简称HCCL&#xff09;是基于昇腾AI处理器的高性能集合通信库&#xff0c;为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.com/cann…...

CANN/ge函数处理点API

FuncProcessPoint 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFl…...

企业级即时通讯「删除消息」:六个场景叠加之后,复杂性超出你的想象

本文不是一上来就讲方案&#xff0c;而是带你还原真实的业务场景&#xff0c;看清楚复杂性是如何一层一层叠加上来的。每加一个场景&#xff0c;原来的解法就出现新的漏洞&#xff0c;直到六个场景同时存在&#xff0c;你才会明白为什么"删除一条消息"在企业级系统里…...

ui-audit:UI审查神器,让你的UI更规范,交互更合理

ui-audit&#xff1a;Tommy Geoco 出品&#xff0c;让 AI 替你做 UI/UX 审查当“设计评审”从会议室里的漫长争论&#xff0c;变成了命令行里的一条指令——这就是 ui-audit 试图改变的事情。如果你曾在深夜对着一个按钮的位置反复纠结&#xff0c;或是在设计评审会上因为“感觉…...