HAL STM32 SG90舵机驱动控制

news2024/12/25 16:22:45

HAL STM32 SG90舵机驱动控制


  • 🔖测试对象:STM32F103
  • SG90舵机
    在这里插入图片描述

🌼功能实现:通过串口指令,控制SG90舵机转动到指定角度。

在这里插入图片描述

  • ✨在实际硬件舵机驱动过程中,使用SG90普通舵机空载运转情况下,电流在180mA左右,建议采用独立供电,光依赖开发板供电来驱动,可能带不动。

  • 🌿SG90舵机驱动,PWM控制参数:50hz=20ms,定时器计数值设定值:10000,舵机转动角度与PWM占空比关系如下表:


0.5ms-------------0度; 2.5% 对应函数中占空比为250
 1.0ms------------45度; 5.0% 对应函数中占空比为500
 1.5ms------------90度; 7.5% 对应函数中占空比为750
 2.0ms-----------135度; 10.0% 对应函数中占空比为1000
 2.5ms-----------180度; 12.5% 对应函数中占空比为1250

🛠STM32CubeMX配置

  • 🌿PWM频率=72000000/(143+1)/(9999+1)=50hz
    在这里插入图片描述

📘功能代码实现

  • 🌿main函数:
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	htim2.Instance->CCR1 = 250; //对应舵机0角度	
//__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 250); //设置CH1->PWM脉冲宽度,同上
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //开启PWM输出通道3,PA0 -->50Hz	
	HAL_UART_Receive_IT(&huart1, &rx_buf, 1); //开启串口接收中断
	printf("TIM2 PWM SG90 Test\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(Rece_flag)
		{
			Rece_flag = 0;
			__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,PWM_ANGLE[Rece_Data-'0']); 
			printf("舵机转动到:%d°\r\n",SG_ANGLE[Rece_Data-'0']);
			GPIOC->ODR ^=LED_Pin; //翻转led
			//HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);//同上
		}
  }
  /* USER CODE END 3 */
}
  • 🌿串口接收中断:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
		if(huart->Instance == USART1) {
//				HAL_UART_Transmit(&huart1, &rx_buf, 1, 1000);//串口转发数据
			 int receivedNum = rx_buf - '0'; // 将字符转换为数字
    // 检查接收到的数字是否在0到4之间
    if (receivedNum >= 0 && receivedNum <= 4) {
		Rece_Data =	 rx_buf;
      Rece_flag = 1; 
		}			
	HAL_UART_Receive_IT(&huart1, &rx_buf, 1);//再次调用串口接收中断,否则下次无法接收到数据
		}

}
  • 🌿串口控制:0 - 4数字指令
    在这里插入图片描述

  • 📚驱动代码:
通过网盘分享的文件:STM32F1_TIM2_PWM_SG90.rar
链接: https://pan.baidu.com/s/1OHFs1YMrV1qmPvAvjc0W2w?pwd=7e2a 提取码: 7e2a

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

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

相关文章

验证集的loss比训练集大得多Val Loss is too large

这个跟数据集有关&#xff0c;不过可已通过clip减缓。 解决方法 nn.utils.clip_grad_norm_(self.Model.parameters(), max_norm5)

AtCoder Regular Contest 182 A~D

A.Chmax Rush!&#xff08;枚举&#xff09; 题意&#xff1a; 有一个长度为 N N N的整数序列 S S S。最初&#xff0c; S S S的所有元素都是 0 0 0。 同时给你两个长度为 Q Q Q的整数序列&#xff1a; P ( P 1 , P 2 , … , P Q ) P(P_1,P_2,\dots,P_Q) P(P1​,P2​,…,PQ…

AI产品经理修炼指南:从青铜到王者的逆袭之路

一、AI通识 1.1 AI产业结构 AI发展至今大致按照在产业结构上的分工不同产生了三种类型的公司&#xff0c;我们在转型时最好要先明确自己的优势及兴趣&#xff0c;来判断自己适合着眼于哪个层面的工作&#xff0c;从而进行针对性的学习和提升。 &#xff08;1&#xff09;行业…

Apache Flink细粒度资源管理原理

粗粒度资源管理 Apache Flink 1.1.4版本之前使用的是粗粒度的资源管理&#xff0c;即每个算子Slot Request所需要的资源都是未知的&#xff0c;Flink内部用UNKNOWN的特殊值来表示&#xff0c;这个值可以和任意资源规则的物理Slot匹配&#xff0c;站在Taskmanager的角度&#x…

打卡学习Python爬虫第二天|Web请求过程刨析

一、服务器渲染 服务器端渲染&#xff08;Server-Side Rendering&#xff0c;简称SSR&#xff09;是一种网页渲染技术。在这种技术中&#xff0c;服务器在接收到客户端的请求后&#xff0c;会生成页面的初始HTML内容&#xff0c;并将其发送给客户端。客户端浏览器接收到这些HT…

什么是BKP(备份寄存器)

一&#xff0c;什么是BKP 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电源被切断&#xff0c;他们仍然由VBAT维持供电。当系统在待机模式下被唤醒&#xff0c;或系统复位或电源复位时&#xff0c;他们也…

数据结构(6.2_2)——领接表法

领接表法&#xff08;顺序存储链式存储&#xff09; 代码&#xff1a; #define MaxVertextNum 10 //边(弧) typedef struct ArcNode {int adjvex;//边/弧指向哪个结点struct ArcNode* next;//指向下一条弧的指针//InfoType info;//边权值 }ArcNode; //顶点 typedef struct VNo…

小阿轩yx-Docker Swarm 管理

小阿轩yx-Docker Swarm 管理 容器编排部署工具 除 Google 推出的 Kubernetes 之外&#xff0c;还有 Docker 发布的 Swarm 与 Mesos 推出的 Marathon 案例一 Docker Swarm 群集部署 Docker 自诞生以来&#xff0c;容器特性以及镜像特性给 DevOps 爱好者带来很多方便很长时间…

基本数据统计分析上|集中位置统计量|分散程度统计量|分布形状统计量|常见概率分布

数据统计分析 现实生活中的许多数据都是随机产生的&#xff0c;如考试分数&#xff0c;月降雨量&#xff0c;灯泡寿命等。从统计角度来看&#xff0c;这些数据其实都是符合某种分布的&#xff0c;这种分布就是统计规律性 在数学建模过程中经常与数据打交道&#xff0c;需要进行…

【鸟哥的Linux私房菜(七)之文件IO】

文章目录 C语言文件IOC语言文件接口汇总什么是当前路径&#xff1f;默认打开的三个流 系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值 closewriteread 文件描述符fd文件描述符的分配规则重定向重定向的原理dup2添加重定向功能到minishell FILEF…

微乐校园pf

TOC springboot451微乐校园pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这…

vue3中引入插件报ts报错Could not find a declaration file for module

引入第三方组件时&#xff0c;下载了组件还是报ts错误Could not find a declaration file for module 解决办法 1. 下载这个插件的ts库&#xff08;有的没有ts库就用下面这种方式&#xff09; 2. 在src下创建一个shims-vue.d.ts文件&#xff08;简单直接&#xff0c;我用的这种…

DNS域名解析服务理论详解(域名结构、递归查询和迭代查询、CDN)

文章目录 DNS域名解析服务1.DNS系统的概念2.DNS系统的主要作用3.DNS的分布式数据结构和域名的结构4.DNS服务器类型4.1三种类型4.2分布式数据库4.3名词解释 5.CDN技术5.1CDN的基本原理5.2CDN的主要功能 6.DNS查询类型及原理6.1查询方式6.2查询原理过程6.3本地主机的DNS映射文件 …

基于Hadoop的物品租赁系统的设计与实现 9349a--论文

TOC springboot344基于Hadoop的物品租赁系统的设计与实现 9349a--论文 绪 论 1.1开发背景 随着网络的飞速发展&#xff0c;网络技术的应用越来越广泛&#xff0c;而信息技术的飞速发展&#xff0c;计算机管理系统的优势也逐渐体现出来&#xff0c;大量的计算机电子信息已经…

Python | 数据处理中常用的数据分布介绍

数据分布是指数据在统计图中的形状和特征&#xff0c;即数据取值的统计规律。在统计学中&#xff0c;数据分布是描述数据集中数值分布情况和规律的重要工具。通过数据分布&#xff0c;可以了解数据的集中程度、分散程度、偏态和峰态等信息&#xff0c;进而对数据进行合理的分析…

95后医疗行业女性转型记:如何成功踏入人工智能项目管理领域

分享目录 一、自我介绍&#xff0c;给大家分享一下拿到offer的心情吧 二、在整个求职转型陪跑营里&#xff0c;你收获最大的三个点是什么&#xff1f; 三、求职转行过程中&#xff0c;你遇到了哪些困难&#xff1f;七芊老师和强哥是怎么帮助你的&#xff1f;你是怎么走过来的…

Bellman_ford算法

使用Dijikstra算法求最短路问题&#xff0c;要求图中不能存在负长度的边&#xff0c;也就是负权边 为什么Dijikstra算法不能用来求含有负权边的图中的最短路问题&#xff1f; Bellman_ford算法 mention&#xff08;1&#xff09;&#xff1a; 没有挑选路径长度距离编号 1 结…

[Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅的总结

0. 引言&#xff1a; 在人工智能飞速发展的今天&#xff0c;掌握大模型微调技能对于从事 AI 研究和开发的专业人士来说至关重要。因此&#xff0c;Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅&#xff1b;顺便参加了星火大模型驱动阅读理解题库构建挑战赛。 1. …

XSS--DOM破坏案例与靶场

靶场连接https://xss.pwnfunction.com/challenges/ 目录 Ma SPaghet! Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok,Boomer Ma SPaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHT…

【嵌入式开发 Linux 常用命令系列 4.5 -- 去除 git diff 时出现的 ^M】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 去除 git diff 时出现的 ^Mgit config --global core.whitespace cr-at-eol选项解释 为什么使用 cr-at-eol如何配置使用示例纠正行尾回车符Sumamry 去除 git diff 时出现的 ^M git config --global core.whitespace cr-at-eol …