STM32CubeIDE基础学习-舵机控制实验

news2025/1/18 17:05:29

STM32CubeIDE基础学习-舵机控制实验


文章目录

  • STM32CubeIDE基础学习-舵机控制实验
  • 前言
  • 第1章 硬件介绍
  • 第2章 工程配置
    • 2.1 基础工程配置部分
    • 2.2 生成工程代码部分
  • 第3章 代码编写
  • 第4章 实验现象
  • 总结


前言

SG90、MG996舵机在机器人领域用得非常多,因为舵机有内置控制电路,它们的尺寸虽然很小,但输出力够大,但不同型号的舵机对应的力矩也有不同,具体要看具体参数选择。
例如:船舵、航模、机器人等都用得非常多。

STM32CubeIDE基础知识学习回顾

实验目的:
学习使用定时器输出PWM功能,从而实现控制舵机转动指定的角度。


第1章 硬件介绍

舵机控制接口采用定时器4通道3,配置时使能该通道即可。

SG90舵机实物如下图所示:

在这里插入图片描述

这款舵机的控制需要一个20ms为周期的脉冲信号,其中高电平的占比在0.5ms ~ 2.5ms之间,当高电平的脉宽在0.5ms ~ 2.5ms之间时舵机就可以对应旋转到0 ~ 180度不同的角度。所以可以通过控制控制信号的高电平宽度来调节输出角度,从而实现方向的控制。

时间和角度对应的控制关系如下:

在这里插入图片描述

当然,上面这些只是常用且比较好计算的时间和角度关系,如果需要旋转其它任意的角度,可以改变对应时间即可。

第2章 工程配置

2.1 基础工程配置部分

本实验采用LED实验的工程作为模板,直接在上面添加定时器PWM的功能配置即可。

第一步:配置定时器时钟源。

在这里插入图片描述

按照标号步骤依次选择即可,定时器4使用的是内部时钟源,通道3输出。

第二步:配置定时器和PWM相关参数。

在这里插入图片描述

计数配置:PSC取7199,ARR取199,向上计数模式。

PWM配置:采用PWM1模式,极性为高电平有效,参数Pulse的值可以设置也可以不设置,让其默认为0,这里问题不大,后面在使用时还是会改变该值的。

最终定时器及PWM功能配置完成之后,可以看到芯片的PA8引脚被配置为了TIM4_CH3,如下图所示:

在这里插入图片描述

2.2 生成工程代码部分

配置完功能之后就可以点击生成工程代码了。
可以看到main文件多了一个定时器的初始化函数和tim.c文件,如下图所示:

在这里插入图片描述
进入定时器初始化函数后如下图所示:

在这里插入图片描述

里面主要是设置定时器相关参数等。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到此,检查生成的初始化代码部分没有问题后就可以编写完成后面的控制功能代码就可以了。

第3章 代码编写

在输出PWM之前,需要使能输出通道才可以,即使能CC1E位,使能之后就可以输出PWM了。直接调用函数如下图所示:

在这里插入图片描述
根据舵机的控制原理及公式计算,比较值为5对应舵机是0度,15对应舵机是90度,代码编写如下图所示:

在这里插入图片描述
编译下载代码后,可以看到舵机先归零再转90度,如此往返旋转。

能单独控制指定角度之后,就可以控制常用的角度了,代码如下图所示:

在这里插入图片描述

代码片示例如下:

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 5);     /* 0度 */
	  HAL_Delay(1000);     /* 旋转间隔时间 */

	  __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 10);    /* 45度 */
	  HAL_Delay(1000);

	  __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 15);    /* 90度 */
	  HAL_Delay(1000);

	  __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 20);    /* 135度 */
	  HAL_Delay(1000);

	  __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 25);    /* 180度 */
	  HAL_Delay(1000);
	  /* USER CODE END WHILE */
  }

注意:如果前面的PWM模式和极性选择不同,则这里的比较值大小也会不同,要结合具体情况分析代入。

第4章 实验现象

下载代码后,就可以看到舵机可以分别从0度旋转到180度了,每次递增45度,间隔1秒,当旋转到180度时则复位到0度,如此往返旋转。


总结

这款SG90舵机还是比较好玩的,只要能熟练PWM的使用就可以容易驱动舵机了,弄明白时间计算公式,把时间代进公式算即可。

注意:普通的(没做过电路特殊处理的)单片机开发板不建议接多个舵机,3个内一般还可以,3个以上可能会对板子造成损害,具体要根据板子自身来接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1572179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用nginx-http-flv-module实现三种直播

目录 一、说明 二、目标 三、实现 四、直播地址 一、说明 此文在《流媒体服务器的搭建(支持hls)》《搭建nginx-http-flv-module直播系统》之后编写,很多详细内容需要参考它。 流媒体服务器的搭建(支持hls)

【面经】interrupt()、interrupted()和isInterrupted()的区别与使用

📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 interrupt方法 如果打断线程正在sleep,wait,join会导致被打断的线程抛出InterruptedException,并清除打断标记。如…

商标“五分法”,如何起名显著性更强通过率更高!

1976年在Abercrombie一案美国判例中提出的商标五分法, 基本上在全球范围内得到认可和共识,普推知产老杨平常检索时,我国一些专家相关的论文及专著和判例中也会经常涉及到。 商标五分法主要是把商标分成个五种类型, 通用的&#xf…

Linux:数据链路层

文章目录 路由表数据链路层分片mac帧报头ARP协议ARP的周边话题 路由表 当主机a想要发送消息到主机b,这一整个过程中,数据报文在进行传输的过程实际上是一跳一跳的过去的,而报文可能会经过公网进行传递,本质上这些网络都是靠对应的…

【Arthas案例】某应用依赖两个GAV-classifier不同的snakeyaml.jar,引起NoSuchMethodError

多个不同的GAV-classifier依赖冲突,引起NoSuchMethodError Maven依赖的三坐标体系GAV(G-groupId,A-artifactId,V-version) classifier通常用于区分从同一POM构建的具有不同内容的构件物(artifact)。它是可选的&#xf…

美食分享|基于Springboot和vue的地方美食分享网站系统设计与实现(源码+数据库+文档)

地方美食分享网站系统 目录 基于Springboot和vue的地方美食分享网站系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…

四信AI智能视频边缘分析盒+传感云平台,开启食品安全智慧监管新模式

方案背景 民以食为天,食品是人类生存必备的物质之一,食品生产安全关乎每个人的生命健康与社会可持续发展。在食品生产过程中,如何实现安全、健康生产是监管机构首要考虑因素,也是当今社会必须共同关注与努力的方向。 监管机构必…

数据库性能优化入门:数据库分片初探

数据库分片是一种用于提升数据库性能的架构模式,选择正确的分片策略和实施方式对于提高数据库性能和应对大规模数据挑战至关重要。 本文介绍了数据库分片的定义、原理和实施方法。文章解释了数据库分片是如何通过将数据切分、分散存储在多个服务器上来提升性能&…

【Kotlin】委托模式

1 委托模式简介 委托模式的类图结构如下。 对应的 Kotlin 代码如下。 fun main() {var baseImpl BaseImpl()var baseWrapper BaseWrapper(baseImpl)baseWrapper.myFun1() // 打印: BaseImpl, myFun1baseWrapper.myFun2() // 打印: BaseImpl, myFun2 }interface Base {fun my…

C语言第四十弹---预处理(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 预处理 1、#和## 1.1 #运算符 1.2、##运算符 2、命名约定 3、#undef 4、命令行定义 5、条件编译 6、头文件的包含 6.1、头文件被包含的方式 6.1.1、本地…

docker从入门到熟悉

一、什么是docker? Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付…

【数据结构】考研真题攻克与重点知识点剖析 - 第 4 篇:串

前言 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术…

Pnpm + Turbo 搭建 Web Component Monorepo 组件库

技术选型 使用 Pnpm Turbo 搭建 Web Component Monorepo项目 stencil-component-ui 组件库 pnpm 作为包管理器Turborepo 作为构建系统Vitepress 管理文档 pnpm 技术 什么是 pnpm? 它有哪些优势? pnpm 跟 npm、yarn一样,都是用于管理Node包依赖的管…

硬件-1、体系架构

cpu 处理器 arm处理器的七种工作模式 arm寄存器 两张图是一样的,r0---r12是通用寄存器。其他寄存器可参考图一,cpu架构。 程序状态寄存器psr(cpsr/spsr) 程序异常处理 理解示例 当使用swi(软中断指令)指令…

Thinkphp5萤火商城B2C小程序源码

源码介绍 Thinkphp5萤火商城B2C小程序源码,是一款开源的电商系统,为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发,执行效率、扩展性、稳定性值得信赖。 环境要求 Nginx/Apache/IIS PHP5.4 MySQL5.1 建议使用环境&#xff…

Alphabet考虑收购HubSpot:一个不太可能但未可知的大手笔动作

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

腾讯云轻量应用服务器是限制月流量吗?是的

腾讯云轻量应用服务器限制流量吗?是的,轻量应用服务器是限制月流量的。每台轻量应用服务器都是按套餐售卖点,套餐包括CPU内存、公网带宽、系统盘和月流量,腾讯云百科txybk.com以2核4G5M轻量应用服务器为例,限制500GB月…

selenium 遮罩层

之前写智联自动投简历 和boss自动投简历的时候 发现操作到上限之后就有个遮罩层,会在当前页面有个顶层得div 没办法获取下面的内容 # 假设遮罩层元素有一个特定的ID或者其他属性 没有id xpath 或者class 都可以mask_element WebDriverWait(driver, 10).until(EC.…

python 利用xpath 爬取一周天气

需求: 爬取 中国天气网指定城市一周的天气,以天津为例 实现: 1,先找到一周的数据位置。 divs html.xpath("//div[classhanml]") 2,再遍历每天。 trs div.xpath("./div/div[2]/table//tr[position…

UE4几个常用节点链接

UE4几个常用节点链接 2017-12-02 12:54 1. 流光材质(及uv平铺次数) 2. 跑九宫格 3.闪光3。1 粒子闪烁效果 4.图案重复5.平移扭曲 6.溶解 刀光的uv滚动图片源或采样节点属性里改成clamp无后期发光光晕anistropic 各向异性高光法线图 法线图叠加 blendangle orrectedNo…