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

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个以上可能会对板子造成损害,具体要根据板子自身来接。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java网络编程】OSI七层网络模型与TCP/IP协议簇

1.1、OSI七层网络模型 OSI七层网络模型中,每层的功能如下: 应用层:人与计算机网络交互的窗口。表示层:负责数据格式的封装,如加密、压缩、编解码等。会话层:建立、终止、管理不同端间的会话连接。传输层&a…

[技术闲聊]我对电路设计的理解(九)-如何与Layout工程师交互

一、“”电路设计“的理解 原理图设计完成,设计规则检测、netlist都通过后,就可以把原理图发送给Layout,是不是此刻意味着硬件工程师功成身退了呢? 远远没有,还有多件事情等待着,文章题目我对电路设计的理解…

【Node.js从基础到高级运用】二十一、使用child_process模块创建子进程

引言 在Node.js中,child_process模块是一个提供了创建和管理子进程的能力的核心模块。通过使用child_process模块,Node.js可以执行系统命令、运行其他脚本或应用程序,实现与Node.js进程的并行处理。 child_process模块提供了几种创建子进程的…

搭建电商独立站|适合做独立站的国家有哪些?该怎么布局?

在传统外贸和跨境电商行业,独立站是一种更专业并且获益空间相对会更高的方法,独立站可以让卖家拥有更多的自由控制权,卖家能更精准的定位用户人群,也可以自行流量推广,独立站不会被永远封店铺、不会对卖家进行罚款等等…

HTML - 你如何使H5页面禁止手动缩放

难度级别:初级及以上 提问概率:40% 我们知道,这道题其实是在考察meta标签的viewport属性,正常情况下设置viewport的代码为 <head><meta name="viewport" content="width=device-width,initial-scale=1.0" …

560.和为K的子数组

560.和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xf…

线程池参数该怎么配置才能充分压榨CPU?

&#x1f3c3;‍♂️ 微信公众号: 朕在debugger© 版权: 本文由【朕在debugger】原创、需要转载请联系博主&#x1f4d5; 如果文章对您有所帮助&#xff0c;欢迎关注、点赞、转发和订阅专栏&#xff01; 目标 配置好线程池参数&#xff0c;压榨CPU&#xff0c;资本家看了都…

云备份day03

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C云备份项目 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容介绍了第三方库httplib的一些内容&#xff0c;以及实现…

易宝OA getStockInRequestPrintDetail SQL注入漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA getStockInRequestPrintDetail 接口处存在SQL注入漏洞,未经身份认证的攻击者…

Promise和async/await

Promise是异步编程的一种解决方案&#xff0c;用来解决多层回调嵌套的问题。它的构造函数是同步执行的&#xff0c;then 方法是异步执行的&#xff0c;所以创建后里面的函数会立即执行&#xff0c;构造函数中的resolve和reject只有第一次执行有效&#xff0c;也就是说Promise状…

随手集☞MySQL部分知识盘点(loading。。。)

字段类型 数值类型 INT: 整数类型&#xff0c;可以是正数或负数。根据显示宽度和是否有符号&#xff0c;其范围会有所不同。TINYINT: 非常小的整数。SMALLINT: 小的整数。MEDIUMINT: 中等大小的整数。BIGINT: 大整数。FLOAT: 单精度浮点数。DOUBLE: 双精度浮点数。DECIMAL(M,N…

Oracle的物理结构解析

这些图是我自己画的&#xff0c;我也会在我的公众号【会用数据库】解析。理解起来非常简单&#xff0c;而且非常好记。不用死记硬背&#xff0c;有兴趣可以来公众号看呀。

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明&#xff1a;本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明&#xff1a;先根据《OpenShift 4 之 GitOp…

Peter算法小课堂—树状数组

大家好&#xff0c;我是人见人爱&#xff0c;花见花开&#xff0c;车见车爆胎的树状数组Peter Pan&#xff0c;hhh 讲正文前&#xff0c;先来一个长文警告⚠很重要的知识点&#xff1a;L SB&#xff08;SB&#xff1f;&#xff09; LSB 怎么算呢&#xff1f; 哦……懂了&…

环形链表2--绝妙的运算

一、要求 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…

【vite】

目录 vite介绍vite的基础应用vite创建项目vite创建vue3项目vite创建vue2项目vite创建react项目 vite中使用css的各种功能vite中使用ts vite介绍 一、特点&#xff1a; 开发时效率极高开箱即用&#xff0c;功能完备摄取丰富&#xff0c;兼容rollup超高速热重载预设应用和类库打…

vulhub中 Struts2-015 远程代码执行漏洞复现

影响版本: 2.0.0 - 2.3.14.2 ## 原理与测试 漏洞产生于配置了 Action 通配符 *&#xff0c;并将其作为动态值时&#xff0c;解析时会将其内容执行 OGNL 表达式&#xff0c;例如&#xff1a; xml <package name"S2-015" extends"struts-default"> …

上位机图像处理和嵌入式模块部署(qmacvisual之n点标定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业场景中&#xff0c;很多时候图像是用来做测量的。虽然我们很希望载台是平的&#xff0c;摄像头是正对着拍摄物体的&#xff0c;但是运行时间长…