ESP8266使用舵机以及16路PWM舵机PCA 9685的使用方式

PWM全称

50Hz也就是一秒内变换50次

根据上面的公式

一个高电平一个低电平叫一个脉冲。

例如每个脉冲占20毫秒,那么他的频率是多少?

就是用1去除以他的周期,也就是我们上面说的20,那么就是除0.02,1秒等于1000毫秒,20毫秒换算成秒。换算过来就是0.02, 1/0.02 = 50,那么他的频率也就是50.

例如这张图,他就是有4个周期

占空比,占空比是指在一定时间高电平保持的时间与总周期的比值

例如下面两段周期分别都是10毫秒的时间

那么高电平占了7ms,那么他在总过程当中就是占了70%

输入电流等于输出电量*占空比

输入为5v,占空比为20%,那么输出就是1

借鉴网址:搞懂什么是PWM控制_哔哩哔哩_bilibili

实例1:PWM与LED的故事

例如我们想要led灯常亮,那么只需要一直给高电平就行了

熄灭就给低电平

假如我们不停的切换高低电平,那么他就会闪烁熄灭

但是如果我们让切换的速度变的极快,那么就不会看见闪烁在熄灭,类似我们看玄幻小说的残影,只要速度够快,原地就会留下一个残影

我们将亮的时间延长,断灭的时间减少,再加上切换的速度,那么你只会看见光芒减弱

实例2:PWM与舵机的故事

舵机根据输入的PWM信号进行转动,舵机内部的芯片会将电位器的电压信号转换成PWM信号,与输入的PWM指令进行对比.最后得到控制电机转动的信号,比如旋转方向和速度

上面的图看来,不同的占比毫秒就能改变他的度数,例如2ms就能让舵机转到135度

程序实例:转动舵机到125度

#define ServoPin 2 // 舵机引脚2号
int highTime  = 2000;//高电平占时换算成微秒。例如2毫秒就是2000微秒
int period = 20000;//固定周期20ms
void setup() {// put your setup code here, to run once:pinMode(ServoPin,OUTPUT);
}void loop() {digitalWrite(ServoPin,HIGH);delayMicroseconds(highTime);//高电平持续时间digitalWrite(ServoPin,LOW);delayMicroseconds(period-highTime);//低电平持续时间// put your main code here, to run repeatedly:}

舵机正极接5V 负极接GND,信号线接2

实例程序:让舵机依次旋转

#define ServoPin 2 // 舵机引脚2号
int highTime  = 500;//高电平占时换算成微秒。例如2毫秒就是2000微秒
int a = 1000;
int c = 2000;
int d = 2500;
int period = 20000;//固定周期20ms
void setup() {// put your setup code here, to run once:pinMode(ServoPin,OUTPUT);
}void loop() {digitalWrite(ServoPin,HIGH);delayMicroseconds(highTime);//高电平持续时间digitalWrite(ServoPin,LOW);delayMicroseconds(period-highTime);//低电平持续时间delay(1000);digitalWrite(ServoPin,HIGH);delayMicroseconds(a);//高电平持续时间digitalWrite(ServoPin,LOW);delayMicroseconds(period-a);//低电平持续时间delay(1000);digitalWrite(ServoPin,HIGH);delayMicroseconds(c);//高电平持续时间digitalWrite(ServoPin,LOW);delayMicroseconds(period-c);//低电平持续时间delay(1000);digitalWrite(ServoPin,HIGH);delayMicroseconds(d);//高电平持续时间digitalWrite(ServoPin,LOW);delayMicroseconds(period-d);//低电平持续时间delay(100000);// put your main code here, to run repeatedly:}

实例程序:让他旋转的速度慢慢相加

#define ServoPin 2 // 舵机引脚2号
int highTime  = 500;//高电平占时换算成微秒。例如2毫秒就是2000微秒int period = 20000;//固定周期20ms
void setup() {// put your setup code here, to run once:pinMode(ServoPin,OUTPUT);
}void loop() {digitalWrite(ServoPin,HIGH);delayMicroseconds(highTime);//高电平持续时间digitalWrite(ServoPin,LOW);delayMicroseconds(period-highTime);//低电平持续时间highTime += 1;// put your main code here, to run repeatedly:}

舵机自带的控制函数

舵机使用函数控制

实例1,:让舵机来回旋转

#include <Servo.h> 
int pos  = 0;Servo myservo;
void setup() {// put your setup code here, to run once:myservo.attach(3);//
}void loop() {for (pos = 0; pos <= 180; pos += 1){myservo.write(pos);//驱动舵机旋转delay(15);//等待舵机转到相应位置}for(pos = 180; pos >= 0; pos -= 1){//让舵机从180转到0myservo.write(pos);delay(15);}
}

16路舵机控制板

接线方式

注意看线的颜色,GND = GND  SCL = D1 SOA = D2 VCC = 3V或5V V+ = VIN

这个是esp8266的接线方式,arduino需要大家去探索一下

#include <Wire.h> //I2C库文件wire
#include <Adafruit_PWMServoDriver.h> //驱动板库文件// 默认地址 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
int a = 102;
#define SERVO_0  a  //寄存器的值 102 =0.5ms = 0°
#define SERVO_45  187 
#define SERVO_90  280 
#define SERVO_135  373 
#define SERVO_180  510 void setup() {Serial.begin(9600);pwm.begin();pwm.setPWMFreq(50);  // 50HZ更新频率,相当于20ms的周期delay(10);
}void loop() {pwm.setPWM(0, 0, SERVO_0);//舵机编号、脉冲起始时间、脉冲结束时间delay(10);SERVO_0 += 1;Serial.println(SERVO_0);}

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

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

相关文章

PostgreSQL11 | 触发器

本文章代码已在pgsql11.22版本上运行且通过&#xff0c;展示页由pgAdmin8.4版本提供 上一篇总结了原著的第十章有关pgsql的视图的用法&#xff0c;本篇将总结pgsql的触发器的用法。 触发器 使用触发器可以自动化完成一些在插入数据或修改数据时&#xff0c;某些需要同期同步的…

bat批处理文件 —— 用于自动化环境配置和项目执行

文章目录 一、什么是 bat &#xff1f;1.1、支持 bat 的编辑软件1.2、常用命令 三、项目实战3.1、入门案例3.2、&#xff08;自动化&#xff09;环境配置与python库安装3.3、将 bat 当成一个简易的 .exe 可执行文件 四、标识符详解4.1、rem&#xff1a;添加注释4.2、echo off&a…

8.15 C++作业

输入一组字符&#xff0c;实现各字符的归类统计 #include <iostream> #include <string.h>using namespace std;namespace xiaoli {string str;int len; } using namespace xiaoli;int main() {getline(cin,str);//识别空格len str.size();int a0,b0,c0,d0,e0;fo…

【多线程-从零开始-肆】线程安全、加锁和死锁

进程状态 进程状态&#xff1a; 就绪&#xff1a;正在 CPU 上执行&#xff0c;或者随时可以去 CPU 上执行阻塞&#xff1a;暂时不能参与 CPU 的执行 Java 的线程&#xff0c;对应状态做了更详细的区分&#xff0c;不仅仅是就绪和阻塞了 六种状态&#xff1a; NEW 当前 Thread…

【PXE+kickstart】linux网络服务之自动装机

PXE&#xff1a; 简介&#xff1a;PXE(Preboot execute environment 是一种能够让计算机通过网络启动的引导方式&#xff0c;只要网卡支持PXE协议即可使用Kickstart 是一种无人值守的安装方式&#xff0c;工作原理就是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文…

基于强化学习算法玩CartPole游戏

什么事CartPole游戏 CartPole&#xff08;也称为倒立摆问题&#xff09;是一个经典的控制理论和强化学习的基础问题&#xff0c;通常用于测试和验证控制算法的性能。具体来说&#xff0c;它是一个简单的物理模拟问题&#xff0c;其目标是通过在一个平衡杆&#xff08;倒立摆&a…

PCIe学习笔记(15)

设备就绪状态 (Device Readiness Status&#xff0c;DRS)消息 &#xff08;Device Readiness Status (DRS) 是PCIe规范中引入的一种机制&#xff0c;旨在改进设备初始化和就绪状态的检测与报告。 在以往的PCIe版本中&#xff0c;系统通常依赖于固定的超时机制来判断设备是否已…

【ML】transform 之 encode 及其实现细节

transform 之 encode 及其实现细节 1. transform (seq2seq) 是什么2. transform (seq2seq) 具体如何实现3. transform (seq2seq) 可以解决哪些类型的问题4. 补充问题4.1 残差连接&#xff08;Residual Connection&#xff09;是什么如何实现4.1.2 残差连接的具体实现&#xff1…

2024年武汉东湖高新区职称第二批次开始了

众所周知&#xff0c;武汉市东湖高新区职称一年两批次&#xff0c;今年下半年第二批水平能力测试报名也已经开始了&#xff0c;请注意报名时间&#xff0c;别错过&#xff01;&#xff01; 2024年武汉东湖高新区第二批次水测报名时间&#xff1a;&#xff08;一&#xff09;网上…

第十一章 数据仓库和商务智能 10分

11.1.0语境关系图 11.1 Q 建立数据仓库&#xff0c;有哪些步骤&#xff1f;如何建设&#xff1f;【6 个步骤非常重要&#xff01;必须知道】 1. 理解需求&#xff08;P&#xff09;&#xff08;目的明确&#xff0c;ETL&#xff09; (1) 考虑业务目标和业务战略。 (2) 确定业…

FFMPEG 序列帧图片合成视频

需求&#xff1a; 将多张.png图片合成为视频 注意: 1需要Windows电脑 2将图片重命名 下载EXE 官网 https://ffmpeg.org/download.html#build-windows 解压后长这样 将图片和exe放在同一目录下 文件中找个空白地&#xff0c;Shift右键 进入PowerShell 输入命令: ./ffm…

Python 画 等高线图

Python 画 等高线图 flyfish 通过三维图形与投影等高线相结合的方式&#xff0c;能够直观地看到三维函数的形状以及在平面上等值线的分布。 等高线是一种用来表示三维表面在二维平面上的方法。它们是通过在固定高度&#xff08;或深度&#xff09;处切割三维表面来创建的平面…

Java零基础之多线程篇:不得不学的并发工具类!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

数学建模--智能算法之鱼群算法

目录 核心原理 应用与实现 实现步骤 性能分析与改进 鱼群算法在解决哪些具体优化问题方面表现最佳&#xff1f; 如何根据不同的应用场景调整鱼群算法的参数设置以提高其性能&#xff1f; 鱼群算法与其他群体智能优化算法&#xff08;如遗传算法、粒子群优化&#xff09;…

C++ | Leetcode C++题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution { public:string removeDuplicateLetters(string s) {vector<int> vis(26), num(26);for (char ch : s) {num[ch - a];}string stk;for (char ch : s) {if (!vis[ch - a]) {while (!stk.empty() && stk.back(…

html+css前端作业和平精英2个页面(无js)

htmlcss前端作业和平精英2个页面&#xff08;无js&#xff09;有视频播放器等功能效果 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改…

lvs的dr模式综合实践

目录 ​编辑虚拟机准备工作 ​编辑​编辑​编辑 配置过程 配置client主机 配置router主机 配置lvs主机&#xff08;vip使用环回来创建&#xff09; 配置server1主机&#xff08;vip使用环回来创建&#xff09; 配置server2主机&#xff08;vip使用环回来创建&#xff0…

《数据结构》(C语言版)第1章 绪论(下)

第1章 绪论 1.3 抽象数据类型的表示与实现1.4 算法与算法分析 1.3 抽象数据类型的表示与实现 数据类型 数据类型是一组性质相同的值的集合, 以及定义于这个集合上的一组运算的总称。 抽象数据类型(ADTs: Abstract Data Types) 更高层次的数据抽象。由用户定义&#xff0c;用…

3DM游戏运行库合集离线安装包2024最新版

3DM游戏运行库合集离线安装包是一款由国内最大的游戏玩家论坛社区3DM推出的集成式游戏运行库合集软件&#xff0c;旨在解决玩家在玩游戏时遇到的运行库缺失或错误问题。该软件包含多种常用的系统运行库组件&#xff0c;支持32位和64位操作系统&#xff0c;能够自动识别系统版本…

快速上手AWS cloudfront产品

AWS CloudFront&#xff0c;亚马逊推出的卓越全球内容分发网络服务&#xff0c;专为加速网站内容的极速传输而设计&#xff0c;旨在大幅度削减加载延迟&#xff0c;同时确保内容传递过程中的高度安全性和无懈可击的可靠性。借助CloudFront的强大功能&#xff0c;用户能够轻松实…