舵机使用总结

文章目录

  • 1 舵机简介
  • 2 注意事项
  • 3 编写驱动程序
    • 3.1 使用STM32作为控制器
      • 3.1.1 计算高电平对应程序中的取值范围
      • 3.1.2 编写控制程序

1 舵机简介

在这里插入图片描述
舵机使用PWM控制,周期为20ms,通过改变高电平占空比来驱动,高电平通常为1~2ms( 或 0.5 ~2.5ms)
在这里插入图片描述

2 注意事项

  1. 给舵机供电时,注意电流要足够,像使用电脑USB供电有可能带不动舵机
  2. 程序中高电平取值范围可以缩小一点,如最大值是200,最小值是40,程序中可以定义 #define DUTY_CYCLE_MIN 38 ;#define DUTY_CYCLE_MAX 198 ,这样操作,舵机转到最大最小限位处,就不会响了。

3 编写驱动程序

3.1 使用STM32作为控制器

STM32单片机产生PWM,参考 《STM32CubeMX之定时器TIM,PWM》

3.1.1 计算高电平对应程序中的取值范围

舵机控制周期是20ms,高电平范围为 0.5~2.5ms
低位占空比:0.5 / 20 = 0.025;
高位占空比:2.5 / 20 = 0.125;

快速计算prescaler值,舵机周期是20ms固定值,即50Hz,Counter Period = 200,MCU时钟为72MHz
所以 72000000/50/200 = 7200

  1. 定时器初始化参数Counter Period = 200;
    在这里插入图片描述
    在程序中
    低位占空比取值:200x0.025 = 5
    高位占空比取值:200x0.125 = 25

  2. 定时器初始化参数Counter Period = 400;
    在这里插入图片描述
    在程序中
    低位占空比取值:400x0.025 = 10
    高位占空比取值:400x0.125 = 50

  3. ……
    按照规律可以细分更多

3.1.2 编写控制程序

  1. 该程序逻辑实现,两个按键分别控制舵机顺时针和逆时针旋转,每按一下舵机旋转一个刻度(该刻度的精细可由定时器初始化参数Counter Period改变)

    // 舵机的高电平范围为0.5ms ~ 2.5ms
    #define DUTY_CYCLE_MIN 5  // 注意该值范围跟定时器初始化参数Counter Period 有关系
    #define DUTY_CYCLE_MAX 25static uint8_t key1_flag = FALSE;
    static uint8_t key2_flag = FALSE;
    static uint8_t duty_cycle = DUTY_CYCLE_MAX;void servo_dispose(void)
    {if(0 == key1_get_status()) // 获取按键值{HAL_Delay(10);if(0 == key1_get_status()){if(key1_flag == FALSE){key1_flag = TRUE;if((++duty_cycle) > DUTY_CYCLE_MAX){duty_cycle  = DUTY_CYCLE_MAX;}__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_cycle);}}}else{key1_flag = FALSE;}if(0 == key2_get_status()){HAL_Delay(10);if(0 == key2_get_status()){if(key2_flag == FALSE){key2_flag = TRUE;if((--duty_cycle) < DUTY_CYCLE_MIN){duty_cycle  = DUTY_CYCLE_MIN;}__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_cycle);}}}else{key2_flag = FALSE;}
    }
    
    int main(void)
    {……HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);  // 开启PWM__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,25); // 定义舵机有效的高电平占空比,这里配置最大值while (1){servo_dispose();}
    }
    
  2. 该程序逻辑实现,两个按键分别控制舵机顺时针和逆时针旋转,按住按键舵机持续转动直到停止

    // 舵机的高电平范围为0.5ms ~ 2.5ms
    // 1. 定时器初始化参数Counter Period 为200时,对应高电平取值范围如下
    // #define DUTY_CYCLE_MIN 10
    // #define DUTY_CYCLE_MAX 50// 2. 定时器初始化参数Counter Period 为1600时,对应高电平取值范围如下
    #define DUTY_CYCLE_MIN 38 // 最小值为40 ,可以稍微取值小一点,这样舵机到达最小限位处不会响
    #define DUTY_CYCLE_MAX 198  // 最大值为200 ,可以稍微取值小一点,这样舵机到达最大限位处不会响static uint8_t duty_cycle = DUTY_CYCLE_MAX;void servo_dispose(void)
    {if(0 == key1_get_status()){HAL_Delay(10);if(0 == key1_get_status()){// HAL_Delay(10); // 控制速度,速度太慢会出现一顿一顿的if((++duty_cycle) > DUTY_CYCLE_MAX){duty_cycle  = DUTY_CYCLE_MAX;}__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_cycle);}}if(0 == key2_get_status()){HAL_Delay(10);if(0 == key2_get_status()){// HAL_Delay(30); // 控制速度,速度太慢会出现一顿一顿的if((--duty_cycle) < DUTY_CYCLE_MIN){duty_cycle  = DUTY_CYCLE_MIN;}__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,duty_cycle);}}
    }
    

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

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

相关文章

Find My卡片正成为消费电子香饽饽,伦茨科技ST17H6x可以帮到您

今年CES许多公司发布支持苹果Find My的卡片产品&#xff0c;这种产品轻薄可充电&#xff0c;放在钱包、背包或者手提包可以防丢查找&#xff0c;在智能化加持下&#xff0c;防丢卡片使得人们日益关心自行车的去向。最新的防丢卡片与苹果Find My结合&#xff0c;智能防丢&#x…

vue生命周期图示

详见&#xff1a;官网介绍

聊聊Java虚拟机(一)—— 类加载子系统

1. 前言 ​ 虚拟机就是一款用来执行虚拟计算机指令的计算机软件。它相当于一台虚拟计算机。大体上&#xff0c;虚拟机分为系统虚拟机和程序虚拟机。系统虚拟机就相当于一台物理电脑&#xff0c;里面可以安装操作系统&#xff1b;程序虚拟机是为了执行单个计算机程序而设计出来…

海外媒体发稿:出口贸易媒体发稿推广8种方式让您事半功倍-华媒舍

出口贸易已成为越来越多企业的发展方向。要让更多潜在客户了解并选择你的产品&#xff0c;仅靠传统的销售手段已远远不够。作为一名出口贸易从业人员&#xff0c;如何利用媒体发稿推广&#xff0c;事半功倍地扩大市场影响&#xff0c;成为摆在我们面前的一大任务。本文将为您介…

Vulnhub-TECH_SUPP0RT: 1渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、使用smb服务获取信息三、密码破解四、获取webshell五、反弹shell六、web配置文件获取信息七、提权 一、前言 由于在做靶机的时候&#xff0c;涉及到的渗透思路是非常的广泛&#xff0c;所以在写…

【c++】C++输入输出

C输入&输出 新生婴儿会以自己独特的方式向这个崭新的世界打招呼&#xff0c;C刚出来后&#xff0c;也算是一个新事物&#xff0c;那C是否也应该向这个美好的世界来声问候呢&#xff1f;我们来看下C是如何来实现问候的 #include<iostream> // std是C标准库的命名空间名…

全网最高质量文章:重新学习Java中的HashMap!!

前言 本文参考了美团技术团队的科普文章Java 8系列之重新认识HashMap - 知乎 (zhihu.com) 这篇文章的质量极其高&#xff0c;高到很有可能是全网介绍HashMap这个知识点最优秀的文章&#xff0c;没有之一&#xff01;&#xff01;&#xff01;因此&#xff0c;我决定在我自己的…

idea消除代码区黄色警告

文章目录 前言一、修改配置总结 前言 idea的检查项较多&#xff0c;导致警告比较多看上去很不雅观。 一、修改配置 在idea中打开Settings 取消Warning和Weak Warning的勾选 总结 回到顶部

多线程-线程状态和线程安全(加锁-synchronized 关键字)

目录 1.线程状态 示例&#xff1a; 1.1线程状态和状态转移的意义 2.线程安全 2.1观察线程不安全 2.2线程不安全的原因 3.synchronized 关键字 - 监视器锁 monitor lock 3.1synchronized 的特性 1. 互斥 2.可重⼊ 应用示例&#xff1a; 3.2synchronized 使⽤⽰例 1.…

conda国内加速

1、配置国内源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 2、显示源地址 conda config --set show_channel_urls yes

【Arduino】基于 I2C 模块通过 I2C 接口驱动 LCD1602 字符液晶显示模块显示文本:只需两个引脚即可控制 LCD1602 液晶屏

引言 LCD1602是一种16列2行的字符液晶显示模块&#xff0c;常用于Arduino等嵌入式系统的用户接口。为了简化连接和编程&#xff0c;我们将使用I2C接口&#xff0c;这只需要Arduino的两个模拟输入引脚。 步骤 安装 LiquidCrystal_I2C 库 为了在Arduino中使用I2C模块驱动LCD显…

Linux的Shell程序(全面超详细的介绍)

文章目录 前言1.Shell概述1.1概述 2.Shell解析器3.Shell脚本入门4.Shell中的变量4.1 系统变量4.2 自定义变量4.3 特殊变量&#xff1a;$n4.4 特殊变量&#xff1a;$#4.5 特殊变量&#xff1a;\$*、$4.6 特殊变量&#xff1a;$&#xff1f; 5.运算符6.条件判断7.流程控制7.1 if …

Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法&#xff0c;在语法描述中出现&#xff1a; []&#xff0c;表示可选&#xff0c;如上[LOCATI…

【操作系统和计网从入门到深入】(五)软硬链接和动静态库

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记&#xff0c;所以如果是博主比较熟悉的知识点&#xff0c;博主可能就直接跳过了&#xff0c;但是所有重要的知识点&#xff0c;在这个专栏里面都会提到&#xff01;而且我也一定会保证这个专栏知识点的完整性&…

通信入门系列——连续卷积定理、循环卷积、离散卷积定理

本节目录 一、连续卷积定理 1、时域卷积定理 2、频域卷积定理 二、循环卷积 三、离散卷积定理本节内容 一、连续卷积定理 卷积定理在信号分析中占有重要的地位&#xff0c;包括时域卷积定理和频域卷积定理。在信号分析领域&#xff0c;通常采用基于卷积定理的时频域分析&#…

Zuul1.x 高并发下阻塞分析以及解决方案

背景 由于最近博主在压测接口的时候发现我接口出现卡死状态&#xff0c;最开始以为是我自己接口出现问题&#xff0c;单独压测我自己的服务&#xff08;不经过网关&#xff09;200/qps/10 次循环 是没问题&#xff0c;但是加上网关&#xff08;zuul 1.x&#xff09; 去发现 经…

编曲学习:Cubase12导入Cubasis工程的方法!

Steinberg 发布 Cubasis 3 项目导入器&#xff0c;可将 Cubasis 的项目导入到 Cubase 使用https://m.midifan.com/news_body.php?id35635 我偶然看到这个文章&#xff0c;不过发现Cubase12默认好像没有这个选项&#xff0c;心想着要是移动端能和PC端同步&#xff0c;感觉会挺…

【网站项目】基于jsp的199旅游景点管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

快速下载百度网盘的文件——使用motrix

问题描述 下载速度慢 上传速度快 解决方案&#xff1a; Motrix 在该开源程序里面 选windows选择zip 启动之后 &#xff0c;把百度网盘的链接转化成磁力链接。然后输入转化后的连接。转换的网页 每次设置下载认任务是选择高级选项里面的请求头 修改为LogStatistic 然后就能超…

Odrive 学习系列四:如何使用脚本自动初始化odrive配置

一、背景: 在学习markbase的教程后,发现odrive的初始化配置命令确实有点多。尽管odrive有自动补全: 且可以通过 ctrl + → 来快速补全: 但是对初学者而言,仍旧有比较大的工作量。 而针对于此,我们可以通过powershell脚本的方式来解决这个问题。 二、设计初始化…