STM32使用PWM控制舵机

STM32使用PWM控制舵机

1、舵机的控制原理

舵机是一种位置伺服驱动器,是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时,输出轴就可以转到特定的位置。只要控制信号持续不变,伺服机构就会保持相对的角度位置不变。如果控制信号发生变化,输出轴的位置也会相应发生变化。舵机的控制大部分都是通过PWM信号控制的。这里以stm32f103为例介绍。

2、舵机运动图

占空比 = t / T 相关参数如下:
12.5% —————— 舵机会转到 -90°
10.0% —————— 舵机会转到 -45°
7.50% —————— 舵机会转到 0°
5.00% —————— 舵机会转到 45°
2.50% —————— 舵机会转到 90°
通过程序设置定时器的TIM_Period = 1999,TIM_Prescaler = 719。
计数器每加1的时间为=720/72000000s = 1/100000s = 10us 
重装载值为1999,则定时器的周期为10us * 2000 = 20ms
PB0 -- TIM3_CH3的PWM功能初始化:
void TIM3_CH3_PWM_Init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitTypeStructure;//打开端口时钟、复用功能时钟以及定时器外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_TIM3,ENABLE);    //使用部分映射或者不使用映射//设置该引脚为复用输出功能GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化TIM3TIM_TimeBaseStruct.TIM_Period = arr;//重装载值 TIM_TimeBaseStruct.TIM_Prescaler = psc;//预分频值 TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//初始化PWMTIM_OCInitTypeStruct.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitTypeStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitTypeStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC3Init(TIM3,&TIM_OCInitTypeStructure); //选择定时器输出通道 TIM3_CH3//使能预装载寄存器TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能定时器TIM_Cmd(TIM3,ENABLE);
}    
主函数中TIM3_CH3的PWM功能初始化:
TIM3_CH3_PWM_Init(1999,719);
//PWM频率=72000000/(719+1)/(1999+1)= 50hz 周期为20ms 
​
控制舵机:   
//-90度
TIM_SetCompare3(TIM3,1750);     //占空比(2000-1750)/ 2000 = 12.5%
​
//45度
//TIM_SetCompare3(TIM3,1800);   //占空比(2000-1800)/ 2000 = 10.0%
​
//0度
//TIM_SetCompare3(TIM3,1850);   //占空比(2000-1850)/ 2000 = 7.50%
​
//-45度
//TIM_SetCompare3(TIM3,1900);   //占空比(2000-1900)/ 2000 = 5.00%
​
//-90度
//TIM_SetCompare3(TIM3,1950);   //占空比(2000-1950)/ 2000 = 2.50%      

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

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

相关文章

虹科Pico汽车示波器 | 免拆诊断案例 | 2006 款林肯领航员车发动机怠速抖动

故障现象 一辆2006款林肯领航员车,搭载5.4 L发动机,累计行驶里程约为26万km。该车因发动机怠速抖动故障进厂维修,维修人员更换了火花塞、点火线圈及凸轮轴位置传感器,清洗了积炭和喷油器,故障依旧,于是向笔…

02_c/c++开源库ZeroMQ

1.安装 C库 libzmq sudo apt install libzmq3-dev 实例: https://zeromq.org/get-started/?languagec&librarylibzmq# 编译依赖: pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc -isystem /usr/include/mit-krb5 -I/usr/in…

Mybatis-Plus学习:快速入门、核心功能、扩展功能、插件功能

文章目录 MybatisPlus快速入门快速开始常见注解常见配置 核心功能条件构造器(Wrapper)自定义SQLService接口基本用法基础业务接口复杂业务接口Lamda查询Lamda更新批量新增 扩展功能代码生成代码生成器快速开发插件 静态工具逻辑删除枚举处理器JSON处理器…

一例MFC文件夹病毒的分析

概述 这是一个MFC写的文件夹病毒,通过感染USB设备传播,感染后,会向c2(fecure.info:443)请求指令来执行。 样本的基本信息 Verified: Unsigned Link date: 19:52 2007/7/5 MachineType: 32-bit MD5: 4B463901E5858ADA9FED28FC5…

在idea中连接mysql

IDE(集成开发环境)是一种软件应用程序,它为开发者提供编程语言的开发环境,通常集成了编码、编译、调试和运行程序的多种功能。一个好的IDE可以大幅提高开发效率,尤其是在进行大型项目开发时。IDE通常包括以下几个核心组…

AI系列:大语言模型的RAG(检索增强生成)技术(上)

前言 大型语言模型(LLM)虽然在生成文本方面表现出色,但仍然存在一些局限性:数据是静态的,而且缺乏垂直细分领域的知识。为了克服这些限制,有时候会进行进一步的模型训练和微调。在实际应用中,我…

leetcode 221 最大正方形面积

示例 3: 输入:matrix [["0"]] 输出:0 # 最大正方形面积 def max_square(matrix):m len(matrix)n len(matrix[0])if m 0 or n 0::return Nonemax_side 1dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):fo…

Linux进程——进程的概念(PCB的理解)

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。 Linux进程学习基…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号,且自动保留两位有效数字 输入:123 输出:123.00 输入:12345 输出:12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

Elcomsoft iOS Forensics Toolkit: iPhone/iPad/iPod 设备取证工具包

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作,对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制作镜像,提取设备机密&#xff08…

Linux网络-文件传输协议之FTP服务(附带命令及截图)

目录 一.FTP简介 二.FTP的数据模式 1.主动模式 2.被动模式 3.两种模式比较 三.安装配置vsftpd 1.安装vsftpd 1.1.安装前关闭防火墙 1.2.安装vsftpd 1.3.查看 1.4.备份 2.配置 3.重启后生效 四.相关实验 1.以win为例 1.1.设置并测试测试连通性 1.2.在终端里创建…

(mac)Prometheus监控之Node_exporter(CPU、内存、磁盘、网络等)

完整步骤 1.启动 Prometheus 普罗米修斯 prometheus --config.file/usr/local/etc/prometheus.yml 浏览器访问 http://localhost:9090/targets 2.启动Node_exporter node_exporter 访问:http://localhost:9100 3.启动grafana brew services start grafana 访问…

Pulsar【部署 02】Pulsar可视化工具Manager安装使用

Pulsar Manager 是一个基于 web 的 GUI 管理和监视工具,可帮助管理员和用户管理和监视租户、命名空间、主题、订阅、代理、集群等,并支持对多个环境进行动态配置。 可视化工具Manager安装使用 1.Docker1.1 拉取镜像并启动1.2 设置用户名密码1.3 登录并添…

基于SpringBoot+Vue高校实习管理系统的设计与实现

项目介绍: 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xf…

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c++推理

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理 文章目录 阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理简介环境部署下载源码安装环境下载模型 测试一下看看效果模型转onnx测试一下生成的onnx模型看看效果C 推理 简介 DDColor是…

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似,Vector也实现了一个可以动态修改的数组,两者最本质的区别在于——Vec…

Swish和H-Swish激活函数:提升模型训练效率

文章目录 Swish激活函数H-Swish激活函数实现总结参考 在深度学习领域,激活函数是神经网络中的关键组成部分,它决定了网络的输出和性能。近年来,研究人员提出了许多新的激活函数,其中Swish激活函数因其独特的性能优势而备受关注。这…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

基于SpringBoot的合家云社区物业管理平台 - 项目介绍

合家云社区物业管理平台 2.合家云需求&设计 2.1 项目概述 2.1.1 项目介绍 合家云社区物业管理平台是一个全新的 ”智慧物业解决方案“&#xff0c;是一款互联网的专业社区物业管理系统。平台通过社区资产管理、小区管理、访客管理、在线报修、意见投诉等多种功能模块&a…

[iOS]组件化开发

一、组件化开发基础 1.组件定义 在软件开发中&#xff0c;一个组件是指一个独立的、可替换的软件单元&#xff0c;它封装了一组相关的功能。组件通过定义的接口与外界交互&#xff0c;并且这些接口隔离了组件内部的实现细节。在Swift语言中&#xff0c;组件可以是一个模块、一…