2.SG90舵机模块

news2024/12/22 18:50:47

当我们输出一段脉冲信号的时候就可以调节舵机的角度

我们可以从原理图可以看到舵机的脚在PA6

从芯片手册我们又可以看到PA6对应TIM3_CH1,并且不用开启部分重映像就能使用

新建Servo.c存放PWM初始化

配置PWM

void Servo_TIM3_Init(u16 arr,u16 psc)
{
    //开启TIM3的时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);    //PWM脚在GPIOA上,并开启AFIO复用
    
    //配置端口
    //PA6
    GPIO_InitTypeDef GPIO_Structure;
    GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽输出
    GPIO_Structure.GPIO_Pin = GPIO_Pin_6;    //TIM1_CH1 | TIM1_CH4
    GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_Structure);
    
    //初始化TIM3
    TIM_TimeBaseInitTypeDef TIM3_Structure;
    TIM3_Structure.TIM_Period = arr;    //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    TIM3_Structure.TIM_Prescaler = psc;    //设置用来作为TIMx时钟频率除数的预分频值
    TIM3_Structure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM3_Structure.TIM_CounterMode = TIM_CounterMode_Up;    //TIM向上计数
    TIM_TimeBaseInit(TIM3,&TIM3_Structure);
    
    //初始化TIM3_CH1 PWM模式
    TIM_OCInitTypeDef TIM_OC_Structure;
    TIM_OC_Structure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
    TIM_OC_Structure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    TIM_OC_Structure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
    TIM_OC1Init(TIM3,&TIM_OC_Structure);
    TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); 
    
    TIM_Cmd(TIM3,ENABLE);
    
}

封装角度函数

这样直接输入想要的角度就行了,不用再每次看手册来设置

void Servo_TIM_SetCompare1(uint16_t Num)
{
        switch(Num)
        {
            case 0:    TIM_SetCompare1(TIM3,25);break;
            case 45:TIM_SetCompare1(TIM3,50);break;
            case 90:TIM_SetCompare1(TIM3,75);break;
            case 135:TIM_SetCompare1(TIM3,100);break;
            case 180:TIM_SetCompare1(TIM3,125);break;
            default:TIM_SetCompare1(TIM3,25);break;
        }
}

main.c进行调用测试

//初始化PWM
Servo_TIM3_Init(999,1439);
//直接调节TIM3通道1的占空比就可以摇头,加上我们前面封装的函数直接输入角度就行
Servo_TIM_SetCompare1(TIM3,0);
delay_ms(900);
Servo_TIM_SetCompare1(TIM3,45); 
delay_ms(900);
Servo_TIM_SetCompare1(TIM3,90); 
delay_ms(900);

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

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

相关文章

简单粗暴解决 wampapache 突然无法启动错误1053

问题是因为没有安装:vc_redist_x64 导致的 全网最简单粗暴解决下 DirectX_v4.1修复

pyqt QToolBar 选中高亮

目录 效果图 示例代码 效果图 示例代码 from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QToolBar, QToolButtonclass HighlightingToolButton(QToolButton):def __init__(self, parentNone):super().__init__(parent)self.setCheckable(True)def nextChe…

在centos8.5上迁移深度学习环境的时候碰到的一下问题(需要运维人员解决的)

我负责的是将开发服务器上的深度学习环境进行打包并将该环境迁移到生产服务器上,这些操作可以在其他博客中搜到 本文主要介绍我把环境包上传至生产服务器中的anaconda/envs/路径下,解压之后,运行测试代码时遇到的问题 IT部门是如何处理的&am…

servlet的三个重要的类(httpServlet 、httpServletRequst、 httpServletResponse)

一、httpServlet 写一个servlet代码一般都是要继承httpServlet 这个类,然后重写里面的方法 但是它有一个特点,根据之前写的代码,我们发现好像没有写main方法也能正常执行。 原因是:这个代码不是直接运行的,而是放到…

hive使用sqoop与oracle传输数据

下载地址 http://archive.apache.org/dist/sqoop 两个版本sqoop1(1.4.x)和sqoop2(1.99.x),两种不同的架构。 本文使用sqoop1。 sqoop是apache旗下一款“hadoop与关系数据库之间传送数据”的工具。 导入数据&#xf…

比特币减半:挑战与机遇

比特币减半是加密货币领域中一件备受关注的大事,它不仅影响着比特币本身的发展,也深刻影响着整个加密货币市场的走势。在这个历史性时刻,我们有必要深入分析比特币减半带来的挑战与机遇,以及未来的加密货币发展趋势。 挑战&#x…

如何配置STM32的UART/USART接口?

配置STM32的UART/USART接口是实现串行通信的基础。以下是详细的配置步骤和示例代码。 1. 选择时钟源 首先,需要确保USART接口的时钟已经使能。通常,这在初始化代码中完成,或者通过STM32CubeMX工具进行配置。 // 假设USART2位于APB1总线上 …

告别Elementor Pro,无需下载,全新中文版的国产替代方案来袭

如果你正在考虑创建自己的网站,那么在第一次谷歌搜索时,你可能已经看到了WordPress、Elementor和网站构建器这些专业名称。WordPress是最受欢迎的网站平台之一,这不难理解:它高度可定制,易于学习,而且是免费…

市场复盘总结 20240415

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率 0% 最常用的…

服务器负载均衡SLB/加密原理

多台服务器提供相同的服务 SLB(server load balancing) 多台服务器对应一个虚拟地址,该地址是防火墙虚拟出来的。 服务器负载均衡功能仅支持IPV4协议 多通道协议仅支持FTP协议

k8s高可用集群部署介绍 -- 理论

部署官网参考文档 负载均衡参考 官网两种部署模式拓扑图和介绍 介绍两种高可用模式 堆叠 拓扑图如下(图片来自k8s官网): 特点:将etcd数据库作为控制平台的一员,由于etcd的共识算法,所以集群最少为3个&…

【面试经典 150 | 数学】阶乘后的零

文章目录 写在前面Tag题目来源题目解读解题思路方法一:数学优化计算 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结…

Github copilot我用正版登录授权的,来体验一下吧

Github copilot 市面上的那种可以说是破解的,不是代码补全不稳定,就是chat不稳定,反正就是不怎样! 下面是官网正版开通的,欢迎体验15天 体验地址:https://www.bilibili.com/read/cv33696436 这种copilo…

zabbix解析以及安装

目录 zabbix 是什么? zabbix 是什么? ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快…

移动Web学习07-适配单位vw/vh哔哩哔哩移动端vw单位适配案例

1.1、VW相对单位 前面我们已经学习了rem单位 &#xff0c;他是一个相对单位、相对于HTML表格字号大小 VW/VH也是一个相对单位&#xff0c;他是相对于视口的尺寸计算结果 VW&#xff1a;viewport width VH: viewport height <meta name"viewport" content"…

软件设计:UML 模型图总结

1. 相关链接 参考教程&#xff1a; https://sparxsystems.com/resources/tutorials/ https://sparxsystems.com/enterprise_architect_user_guide/15.2/model_domains/whatisuml.html Unified Modeling Language (UML) description, UML diagram examples, tutorials and r…

STM32 MPU配置参数

TXE LEVEL一般只用MPU_TEX_LEVEL0 1 - 1 - 1 -0性能最强&#xff08;TEX - C - B- S&#xff09;. #define MPU_TEX_LEVEL0 ((uint8_t)0x00) #define MPU_TEX_LEVEL1 ((uint8_t)0x01) #define MPU_TEX_LEVEL2 ((uint8_t)0x02) 基于上表进行常用配置 &#xff…

Ue不消耗輸入

1、介紹 我們都知道ue裏面使用輸入時&#xff0c;都是在PlayerController裏面進行獲取&#xff0c; 使用官方的操作映射&#xff0c;軸映射&#xff0c;以及目前最新的增强型輸入 但是我們發現了一個問題 那就是輸入會被消耗 就是儅我鼠標按在一個按鈕上時 你另一個地方接受…

Vitis HLS 学习笔记--ap_int.h / ap_fixed.h(2)-深度探究

目录 1. 前文回顾 1.1 简单背后的复杂 1.2 复杂性的来源 2. 关键代码 2.1 功能概述 2.2 关系梳理 2.3 理解构造函数二 2.4 理解HLS_CONSTEXPR 2.5 理解const volatile 3. 探究ap_int<8> c&#xff1b;经历了什么 4. 在调试中查看 1. 前文回顾 在《Vitis HLS…

数据安全之路:Databend 用户与角色管理应用

Databend 目前支持基于角色的访问控制 (RBAC) 和 自主访问控制 (DAC) 模型&#xff0c;用于访问控制功能。 通过本指南&#xff0c;我们会了解权限和角色在 Databend 中的基本概念&#xff0c;以及如何管理角色、继承角色与建立层级、设置默认角色以及所有权的重要性。这些功能…