舵机原理介绍 简洁讲解面向实战 非阻塞式驱动代码, arduino
目录
1.舵机简介
2.舵机转动角度的PWM条件(以180度的SG90舵机为例)
2.1 控制关系
2.2arduino产生PWM
3.0 附代码 循环0度到180度开关舵机(非阻塞版本)
4.0 Servo.h 舵机代码
1.舵机简介
舵机也叫伺服电机,是控制输入PWM信号来精确控制转动角度.所以想要驱动舵机就是让arduino输出PWM信号即可.
2.舵机转动角度的PWM条件(以180度的SG90舵机为例)

2.1 控制关系

翻译成人话就是说 ,我们要想驱动它, PWM的周期T需要时20ms 修改它的占空比 对应角度
对于PWM的占空比和周期不熟悉的请看我之前的文章:(这个是必须要会的)
Arduino 占空比 脉冲 PWM-CSDN博客
| 占空比(周期是20ms) | 角度 | Timer1.pwm(pin,num) 占空比配置函数 num的值 |
| 0.5/20*100%=2.5% | 0度 | 26 |
| 5% | 45度 | 51.2 ≈51 |
| 7.5% | 90度 | 76.8≈76 |
| 10% | 135度 | 102.4≈102 |
| 12.5% | 180度 | 128 |
2.2arduino产生PWM
我使用的是定时器1的相关库TimerOne.h来配置PWM的,简单易操作,且上限高.
arduino定时器1 TimerOne 一篇搞懂_#include <timerone.h>-CSDN博客
它的PWM的分辨率是10位的也就是1024
定时器1的两个PWM引脚是9和10 这里我们用9引脚. 第二个是变量除以1024 就是高电平的占比 也就是占空比.
占空比函数 Timer1.pwm(pin,num);
Timer1.pwm(9,26);//26/1024≈2.5%
定时器初始化和设置周期函数 Timer1.initialize();
Timer1.initialize(20000);//周期20ms 变量是微秒级别的,20000就是20毫秒
#include <TimerOne.h>volatile long ms_tick=0,ms_tick_flag=0;
void setup(void)
{Timer1.initialize(20000);//周期20msTimer1.pwm(9,26);//26/1024≈5%Serial.begin(115200);
}void loop(void)
{}
3.0 附代码 循环0度到180度开关舵机(非阻塞版本)
这个代码是循环的0-180度,我中间加了延时,只是为了让舵机运行的慢一点而已,其实是并没有阻塞程序.这里面的delay 完全可以用其他延时来替代
这里推荐看一看我写的延时大全:arduino延时最全解析。(完结)_arduino 延时微秒函数-CSDN博客
使用非阻塞的延时代码.
#include <TimerOne.h>volatile long ms_tick=0,ms_tick_flag=0;
void setup(void)
{Timer1.initialize(20000);//精确度20msTimer1.pwm(9,26);Serial.begin(115200);
}void loop(void)
{static int i=26,flag=0;//这两个if语句主要是为了实现亮灭亮交替if(i<=26)flag=0;if(i>=130)flag=1;if(flag==0)i+=1;elsei-=1;Timer1.pwm(9,i);delay(10);}
4.0 Servo.h 舵机代码
使用Serivo.h的库文件理论上可以达到控制舵机的效果,但是本人是不推荐的,我们使用arduino大多是为了学习单片机思维,我使用TimerOne.h来驱动舵机,即使我们换了一款单片机也同样能做到.这就代表着我们学会了这个模块,彻底的吃透了它.
#include <Servo.h>
#include<Arduino.h>
Servo myservo; // 定义Servo对象来控制int pos = 0; // 角度存储变量
void setup() {// put your setup code here, to run once:myservo.attach(9); // 控制线连接数字6myservo.write(0);
}void loop() {// put your main code here, to run repeatedly:shun_180(myservo);delay(1000);ni_180(myservo);delay(1000);
}
void shun_180(Servo name)
{for (pos = 0; pos <= 180; pos ++) { // 0°到180°name.write(pos); // 舵机角度写入delay(5); // 等待转动到指定角度 }
}
void ni_180(Servo name)
{for (pos = 180; pos >= 0; pos --) { // 从180°到0°name.write(pos); // 舵机角度写入delay(5); // 等待转动到指定角度}
}
相关文章:
舵机原理介绍 简洁讲解面向实战 非阻塞式驱动代码, arduino
目录 1.舵机简介 2.舵机转动角度的PWM条件(以180度的SG90舵机为例) 2.1 控制关系 2.2arduino产生PWM 3.0 附代码 循环0度到180度开关舵机(非阻塞版本) 4.0 Servo.h 舵机代码 1.舵机简介 舵机也叫伺服电机,是控制输入PWM信号来精确控制转动角度.所以想要驱动舵机就是让ard…...
Oracle Database 23ai 中的DBMS_HCHECK
在 Oracle 23ai 中,DBMS_HCHECK 包允许我们检查数据库中已知的数据字典问题。 几年前,Oracle 发布了 hcheck.sql 脚本(文档 ID 136697.1)来检查数据库中已知的数据字典问题。 DBMS_HCHECK 包意味着我们不再需要下载 hcheck.sql…...
如何利用AWS监听存储桶并上传到tg bot
业务描述: 需要监听aws的存储中的最新消息,发送新的消息推送到指定tg的频道。 主要流程: 1.上传消息到s3存储桶(不做具体描述) 2.通过aws的lambda监听s3存储桶的最新消息(txt文件) 3.将txt文件…...
STM32 SPI读取SD卡
七个响应类型: R1 Response (Normal Response): R1响应是最基本的响应,包含一个字节的状态位,用于指示命令是否成功执行。常用。最高位为0。最低位为1表示是空闲状态。其他位是各种错误提示。 R1b Response (Normal with Busy): 类似于R1&a…...
TANGO与LabVIEW控制系统集成
TANGO 是一个开源的设备控制和数据采集框架,主要用于管理实验室设备、自动化系统和工业设备。它为不同类型的硬件提供统一的控制接口,并支持设备之间的通信,广泛应用于粒子加速器、同步辐射光源、实验室自动化和工业控制等领域。 1. TANGO的核…...
eth_type_trans 函数
eth_type_trans 是 Linux 内核网络子系统中的一个函数,它主要用于确定接收到的以太网数据包(Ethernet frame)的协议类型,并设置相应的 sk_buff 结构体的协议字段。以下是关于 eth_type_trans 的详细解释: 功能 eth_type_trans 函数的主要功能是根据以太网数据包的目的 M…...
派克汉尼汾推出新的快换接头产品系列,扩展热管理解决方案
近期,运动与控制技术领域的先行者——派克汉尼汾宣布推出四个具有开创性的热管理解决方案——NSAC、NSEC和NSIC系列盲插式快换接头以及NSSC螺纹连接快换接头。这些创新产品旨在满足电子冷却、电池制造、信息技术、能源管理、工程机械和运输等行业复杂的热管理需求。…...
uniapp 前端解决精度丢失的问题 (后端返回分布式id)
原因: 后端使用分布式id, id为19位数,导致精度丢失 ,前端解决方法 这个是通过浏览器请求回来的数据,这个时候id 数据已经丢失了,在数据库查询不到,在调获详情接口的时候会有问题 实际的: 解决…...
C语言:指针4(常量指针和指针常量及动态内存分配)
常量指针与指针常量 常量:分为字面量和只读常量,字面量就是我们平时直接操作的量: printf("%d\n",12);/printf("%s\n","hello");只读常量使用关键字 const 修饰,凡是被这个关键字修饰 的变量&…...
Win11提示fveapi.dll丢失是什么原因?fveapi.dll丢失怎么办?
一、fveapi.dll丢失的成因与影响 成因: 系统更新不完整:Win11系统在更新过程中,如果某个环节出现问题,可能会导致fveapi.dll等系统文件未能正确更新或安装。软件冲突:某些第三方软件可能与系统文件发生冲突ÿ…...
台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)
以下是开发台球助教系统客户端(APP,小程序,H5)几端的信息收藏功能的详细需求和功能说明,内容比较详细,可以说是一个教科书式的详细说明了,这套需求说明不仅仅用在我们的台球助教系统程序上&…...
如何设计 Vue 3 组件库:高效的组件化开发方法
如何设计 Vue 3 组件库:高效的组件化开发方法 📖 前言 随着前端技术的不断发展,Vue.js 已成为现代化 Web 应用开发的主流框架之一。Vue 3 引入了诸多改进,尤其是组合式 API,使得 Vue 在开发大型项目时,能够…...
第八节、Bresenham直线插补运动【51单片机-L298N-步进电机教程】
摘要:前面章节主要介绍单个电机控制,本节内容介绍两个电机完成直线插补运动 一、 Bresenham直线算法介绍 Bresenham直线算法由Jack Elton Bresenham于1962年在IBM开发,最初用于计算机显示直线,它确定应该选择的n维光栅的点&#…...
一个从oracle使用spool导出数据到kadb的脚本
1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…...
【STM32】GPIO口以及EXTI外部中断
个人主页~ 有关结构体的知识在这~ 有关枚举的知识在这~ GPIO口以及EXTI外部中断 GPIO一、简介二、基本结构三、输入输出模式1、输入模式(1)上拉输入(2)下拉输入(3)浮空输入(4)模拟输…...
Confluent Cloud Kafka 可观测性最佳实践
Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务,提供高可用性和可扩展性,旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群,而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…...
【LeetCode每日一题】——415.字符串相加
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…...
linux---使用定时任务同步时间
首先,确保你的系统上安装了ntpdate工具,它用于从NTP服务器获取并设置系统时间。如果你的系统上没有安装,你可以通过包管理器进行安装 安装ntpdate yum install -y ntpdate设置定时任务 crontab -e在文件中添加下面内容 #每5分钟同步一次时间 …...
Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
可以搭建属于公司内部或者个人的Git服务器,方便程序代码及文档版本管理。 官网:http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径,…...
KNN分类算法 HNUST【数据分析技术】(2025)
1.理论知识 KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想: 对于任意n维输入向量,分别对应于特征…...
企业必须为 Agent 配一个“人工兜底”策略
企业必须为 Agent 配一个“人工兜底”策略 摘要/引言 开门见山:凌晨三点的Agent报警邮件与CEO的抉择 202X年7月15日凌晨3:17,字节跳动旗下飞书客服Agent“小助手Pro”的自动迭代模块误触发了“智能调价权限升级”——原本它只能协助用户调整基础服务套餐的折扣率不超过5%,…...
5个提升效率技巧:Mac Mouse Fix让普通鼠标实现专业级操作体验
5个提升效率技巧:Mac Mouse Fix让普通鼠标实现专业级操作体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 当你在macOS系统中使用…...
保姆级教程:用Node.js搭建WebSocket中继,让ESP32-CAM视频在另一块ESP32屏幕上实时播放
从零构建ESP32-CAM视频中继系统:WebSocket与Node.js的深度实践 想象一下这样的场景:工厂里的巡检机器人通过摄像头捕捉设备状态,实时传输到工程师的监控屏幕;或是智能家居中的安防摄像头,将画面无缝推送到多个终端。这…...
如何高效管理Windows Defender?Defender Control开源工具全解析
如何高效管理Windows Defender?Defender Control开源工具全解析 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-contr…...
C++高性能计算:优化TranslateGemma底层推理引擎
C高性能计算:优化TranslateGemma底层推理引擎 1. 为什么需要C重写推理引擎 当我们第一次使用TranslateGemma进行多语言翻译时,就被它的翻译质量惊艳到了。但作为一个需要处理大量翻译请求的开发者,很快就发现Python版本的性能瓶颈——内存占…...
远离 8 种有毒人际关系,守住自身能量与运势
身处社会中,若长期接触 “有毒的人”,个人能量会被持续吞噬,运势也会受负面影响,这 8 类有毒的人际关系需果断远离。不赚钱的人会成为发展的阻碍,甚至心生异心拖垮他人,赚钱后需减少与其交集。不能滋养自己…...
UI-TARS-desktop部署避坑指南:快速解决模型启动问题
UI-TARS-desktop部署避坑指南:快速解决模型启动问题 1. UI-TARS-desktop概述 1.1 核心功能与架构 UI-TARS-desktop是一款基于Qwen3-4B-Instruct-2507模型的多模态AI应用框架,采用vLLM推理引擎提供高效服务。该系统将大语言模型能力与桌面自动化操作相…...
医生Agent实战教程(非常详细),别再瞎喂数据看这篇就够了!
如果把近两年的大模型发展比作“加速跑”,那么这篇论文的开场就像直接指出:跑道快到头了。作者认为,当前大语言模型的扩展规律正遭遇一个越来越现实的瓶颈: 高质量人类语料接近枯竭,模型继续“吃数据”变得困难,这被他…...
OpenClaw自动化测试新思路:千问3.5-27B生成与执行UI测试用例
OpenClaw自动化测试新思路:千问3.5-27B生成与执行UI测试用例 1. 为什么我们需要重新思考UI测试 作为一位经历过手工测试、录制回放、脚本维护三个阶段的老测试工程师,我始终被一个问题困扰:测试用例的维护成本永远与业务复杂度成正比。直到…...
STM32启动模式详解与实战指南
1. STM32启动过程概述作为一名嵌入式开发工程师,理解STM32的启动过程是基本功。很多初学者在使用STM32时,往往只关注main函数中的代码,却忽略了芯片上电后到执行main函数之前发生了什么。实际上,从按下复位键到程序开始运行&#…...
