STM32系列——F103C8T6 控制SG90舵机(HAL库)

文章目录

  • 一、舵机控制原理
  • 二、.CubeMX配置
    • 配置RCC、SYS、时钟树
    • 配置RCC
    • 配置SYS
    • 配置时钟树
    • 配置定时器产生PWM波形
  • Keil5代码
  • 接线图及效果
  • 如果您发现文章有错误请与我留言,感谢


一、舵机控制原理

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

在这里插入图片描述

二、.CubeMX配置

借用博主的图片

配置RCC、SYS、时钟树

在这里插入图片描述

配置RCC

在这里插入图片描述

配置SYS

在这里插入图片描述

配置时钟树

在这里插入图片描述

配置定时器产生PWM波形

在这里插入图片描述

这里补充一个知识点

100HZ代表一秒放出100个脉冲

Prescaler意为预分频器

当预分频器设置为720-1时,72MHZ就变成100000HZ,

又因为g9舵机需要的频率是50HZ,也就是20ms

Counter Period为自动重装载寄存器

当自动重装载寄存器与计数器值一样时,计数器值会重置为0.

所以,当自动重装载寄存器的值设置为2000-1时,这时就为20ms的计数器。

此时产生PWM波形频率:72M / 719 / (1999+1) = 50HZ

在这里插入图片描述

Keil5代码

注意要先对定时器进行初始化
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//定时器初始化

首先初始化各个外设,包括 GPIO、TIM2

  MX_GPIO_Init();MX_TIM2_Init();
void DuoJi_Angle_TIM2(int angle , int time){int  PWM ;PWM = 10 * angle/ 9 ;__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,PWM);HAL_Delay(time);}\
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
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();/* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){DuoJi_Angle_TIM2(0 , 1000);DuoJi_Angle_TIM2(45 , 1000);DuoJi_Angle_TIM2(90 , 1000);DuoJi_Angle_TIM2(135 , 1000);DuoJi_Angle_TIM2(180, 1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

我们直接封装成关于角度和延时的函数,

不用再计算PWM了

void DuoJi_Angle_TIM2(int angle , int time){int  PWM ;PWM = 10 * angle/ 9 ;__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,PWM);HAL_Delay(time);}

接线图及效果

在这里插入图片描述

QQ视频20240317120641

如果您发现文章有错误请与我留言,感谢

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

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

相关文章

(含链接)2024年NVIDIA GPU技术大会开发者合集(专为开发者挑选的合集)

2024年NVIDIA GPU技术大会开发者合集 我专门为开发者整理了NVIDIA GPU技术大会上专注技术的内容合集, 希望可以帮助开发者朋友们快速了解NVIDIA的最新技术. 注意:在电脑端打开更友好, 可以直接进入每一项的网页 文章目录 2024年NVIDIA GPU技术大会开发者合集如何登录和预约会…

[AutoSar]BSW_Com015 PDUR 模块配置

目录 关键词平台说明一、Abbreviations二、PduRBswModules三、PduRGeneration四、PduRDestPdus4.1 全局PDU ID和本地PDU ID 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编程语言C&#xff0…

react中setState是同步的还是异步的

首先说一下setState是同步的还是异步的? 1.解读 setState 工作流 接下来我们就沿着这个流程,逐个在源码中对号入座。首先是 setState 入口函数: ReactComponent.prototype.setState function (partialState, callback) {this.updater.enqu…

ThingsBoard初始化数据库Postgres

本章将介绍ThingsBoard的本地环境搭建,以及源码的编译安装。本机环境:centos7,docker,postgres 环境安装 开发环境要求: docker pcentos7 ;docker;postgres: 1、使用Docker创建postgres容器化创建 docker…

JS函数知识点(复习)

在 JavaScript(JS)中使用函数有多种原因,这些原因不仅涉及到代码的组织和可读性,还涉及到代码的可维护性、复用性以及程序的模块化等方面。以下是一些关键的理由: 代码重用:函数允许你将一段代码块封装起来…

基于深度学习的唇语识别系统的设计与实现

概要 人工智能作为三大工程之一,从上个世纪至今仍然活跃于各个行业的研究与应用之中,应时代的热潮方向,本 课题主要针对深度学习技术应用于唇语识别当中,实现词语唇语的翻译功能。唇语识别在图像处理中一直是一个富 有挑战性的课题…

力扣59. 螺旋矩阵 II

思路:此题思路就是绕圈遍历,全靠条件处理技巧,重点要清楚的就是循环不变量:左闭右开(即拐弯处的一个数,留给第二行处理) 以下是代码随想录的作者的一张图片,每次for循环,…

使用三种方式读取文本文件

文章目录 🍔需求🎄思路⭐代码⭐效果🛸注意 在 Java 中,读取文件通常涉及以下几个步骤: 打开文件:首先需要创建一个文件对象,表示要读取的文件。这个文件对象可以包含文件路径、文件名等信息。 …

使用canvas实现图纸标记及回显

图纸 图纸标记后的效果图 最近做的一个qms项目里面,需要前端在图纸上实现标记及标记后的内容还要能够回显,然后后端通过标记的点,去读取标记图纸的内容,如一些公式、数据之类的,目前实现的功能有 在图纸上面进行矩形…

Mysql 索引、锁与MVCC等相关知识点

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 索引类型存储方式区分逻辑区分实际使用区分索引失效情况 索引建立规范SQL编写规范exlpain字段解析ACID的原理日志引擎慢SQL整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a…

Flutter:构建美观应用的跨平台方案

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C#创建第一个PIESDK模版的项目

目录 环境配置创建项目方式 环境配置 1软件安装 通过安装光盘或者U盘等介质读取PIE软件的安装程序和使用文档。程序安装过程比较简单,软件本身不借助与任何第三方程序,直接双击安装程序【PIESDK.Net_V6.3_Windows_X64.exe】安装文件,即可安装…

尚硅谷vue全家桶(上)

vue2 简介第一天第二天 第三天第四天第五天 第六天第七天第八天 第九天 网课链接(半个月拿下) 简介 需要提前会的东西 中文文档链接点下面 vue.js 要会查文档用API 第一天 清除提示1 再文档中下载开发版本浏览器安装vue devtools插件 打开允许访问URL…

【C语言】字符函数与字符串函数以及内存函数 { 超详细攻略,一篇学会 }

今日分享:字符、字符串函数和内存函数 内存函数就是对内存进行操作的函数 字符串函数就是对字符串进行操作的函数 字符函数就是对字符进行操作的函数 str前缀的函数是字符串函数,头文件string.h mem前缀的函数是内存函数,头文件stdlib.h 字符…

25考研数据结构复习·3.3.2栈和队列的应用——表达式求值

三种算术表达式 中缀表达式 ((15/(7-(11)))*3)-(2(11)) 由三个部分组成:操作数、运算符、界限符 运算符在两个操作数中间:ab;ab-c;ab-c*d ❗后缀表达式 逆波兰表达式 运算符在两个操作数后面:ab;abc-或ab…

python知识点总结(二)

这里写目录标题 1、什么是解释性语言,什么是编译性语言?2、说说中作用域是怎么划分的3、type和isinstance方法的区别4、浅拷贝和深拷贝5、python中变量在内存中存储方式6、python中的封装、继承、多态7、python中内存管理机制是怎么样的?8、简…

旋转中心 机械手抓料方式

一、为什么要计算旋转中心? 机器视觉——旋转中心的标定_旋转标定-CSDN博客 在机械手抓料的时候传送带上过来的料可能是各个角度的,不同的位置,这样如果我们没有做好机械手标定的话很难抓取,因此我们要做旋转中和和机械手TCP标定…

章节2:单词本该这样记

为什么我们记不住单词? 单词不是被胡编乱造出来的,单词是有规律的,单词是符合人类的逻辑的。 单词实际意思结构意义历史文化 我们要怎么记单词? 掌握单词的结构规律了解与单词有关的历史文化灵活巧计,不要太拘泥于…

唯一约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 唯一约束 唯一约束的特点是在某一个列上的内容不允许出现重复。 例如,现在要收集用户的信息,假设包含编号(mid)、姓名&…

Word2vec 学习笔记

word2vec 学习笔记 0. 引言1. Word2vec 简介1-1. CBOW1-2. SG 2. 实战 0. 引言 最近研究向量检索,看到有同事使用 MeCab、Doc2Vec,所以把 Word2vec 这块知识学习一下。 1. Word2vec 简介 Word2vec 即 word to vector,顾名思义,…