arduino+16路舵机驱动板连接测试

用Arduino类库驱动舵机并不是一件难事,如果需要驱动很多电机,就需要要占用更多的引脚,也会影响到Arduino的处理能力。专门的舵机驱动板很好的解决了这个问题。

此舵机驱动板使用PCA9685芯片,是16通道12bit PWM舵机驱动,用2个引脚通过I2C就可以驱动16个舵机。不仅如此,你还可以通过级联的方式最多级联62个驱动板,总共可以驱动992个舵机!

大多数的舵机设计电压都是在5~6V,尤其在多个舵机同时运行时,跟需要有大功率的电源供电。如果直接使用Arduino 5V引脚直接为舵机供电,会出现一些难以预测的问题,所以我们建议你能有个合适的外部电源为驱动板供电。

驱动板与Arduino连接

此PWM驱动板采用I2C方式,所以只需要4根线就可以连接到Arduino设备:

为驱动板分配地址

级联的每个驱动板都需要有一个唯一的访问地址。每个驱动板的初始I2C地址是0×40,可以通过右上角的跳线修改I2C地址。用焊锡将一个跳线连上就表示一个二进制数字“1”。

按以下方式连接

Arduino uno     PCA9685
+5v -> VCC
GND -> GND
Analog 4 -> SDAAnalog 5 -> SCL
外接电源

为驱动板分配地址

级联的每个驱动板都需要有一个唯一的访问地址。每个驱动板的初始I2C地址是0×40,可以通过右上角的跳线修改I2C地址。用焊锡将一个跳线连上就表示一个二进制数字“1”。

使用自带的例程(只接2个舵机):

/***************************************************
This is an example for our Adafruit 16-channel PWM & Servo driver
Servo test - this will drive 16 servos, one after the other

Pick one up today in the adafruit shop!
------> http://www.adafruit.com/products/815

These displays use I2C to communicate, 2 pins are required to
interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// you can also call it with a different address you want
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);

// Depending on your servo make, the pulse width min and max may vary, you
// want these to be as small/large as possible without hitting the hard stop
// for max range. You‘ll have to tweak them as necessary to match the servos you
// have!
#define SERVOMIN 150 // this is the ‘minimum‘ pulse length count (out of 4096)
#define SERVOMAX 600 // this is the ‘maximum‘ pulse length count (out of 4096)

// our servo # counter
//uint8_t servonum = 0;

void setup()
{
Serial.begin(9600);
Serial.println("16 channel Servo test!!!!");

pwm.begin();

pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
}

// you can use this function if you‘d like to set the pulse length in seconds
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!
void setServoPulse(uint8_t n, double pulse)
{
double pulselength;

pulselength = 1000000; // 1,000,000 us per second
pulselength /= 60; // 60 Hz
Serial.print(pulselength); Serial.println(" us per period");
pulselength /= 4096; // 12 bits of resolution
Serial.print(pulselength); Serial.println(" us per bit");
pulse *= 1000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}

void loop()
{
// Drive each servo one at a time
//Serial.println(servonum);
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++)
{
pwm.setPWM(0, 0, pulselen);
pwm.setPWM(1, 0, pulselen);
}
delay(500);
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--)
{
pwm.setPWM(0, 0, pulselen);
pwm.setPWM(1, 0, pulselen);
}
delay(500);

}

原文地址:https://www.cnblogs.com/wdzeng/p/9384330.html

时间: 2024-11-01 15:28:49

arduino+16路舵机驱动板连接测试的相关文章

Arduino控制16路PWM舵机驱动板(PCA9685)

最近买了块16路PWM舵机驱动板,测试后做个总结. 舵机原理网上资料很多就不详细介绍了,一般以9g舵机为例,一个20ms的周期内通过0.5ms到2.5ms的脉冲宽度控制舵机角度. 板子为16通道12bit PWM舵机驱动,用2个引脚通过I2C就可以驱动16个舵机. 修改例子为可以通过串口设置舵机角度 1 #include <Wire.h> 2 #include <Adafruit_PWMServoDriver.h> 3 4 //默认地址 0x40 5 Adafruit_PWMSer

Arduino CNC Shiled 和 DRV8825驱动板的注意事项

首先说明硬件:1) Arduino CNC Shiled V2.6 2)DRV8825驱动板 3)光驱步进电机  4)Arduino  uno R3 下图是本次主角是Arduino CNC Shiled 和 DRV8825驱动板. 来张三明治图 Arduino CNC Shiled的信息 注意点: 1)比较容易让人忽略的是步进电机的接口,也就是图上的的电机插口(A1A2B1B2),A1A2一组,B1B2一组.具体如何与步进电机对应继续往下看 2)上左图标出了EN和GND对应的位置,DRV8825

Android深度探索(卷1)HAL与驱动开发 第五章 搭建S3C6410 开发板的测试环境

第五章 搭建S3C6410 开发板的测试环境 心得体会 开始进行安装串口调试工具:minicom  OK6410开发板带了一个串口.可以通过串口线与PC连接.Linux驱动在输出调试信息的同时会通过串口线教调试信息发送到PC上,这样Linux驱动程序员就可以直接在PC上查看调试信息了.(对一些笔记本需要使用USB转RS232串口线) 1.检测当前系统是否支持USB转串口 #lsmod | grep usbserial 2.安装minicom #apt-get install minicom 3.

Arduino 数码管LED驱动 读位法 16进制

区别与上两个驱动的方法,用bitRead()读取位数,代码简介一点. //设置阴极接口 int d1 = 1; int d2 = 2; int d3 = 3; int d4 = 4; int d5 = 5; int d6 = 6; int d7 = 7; //设置阳极接口 int a = 8; int b = 9; int c = 10; int d = 11; int e = 12; int f = 13; int g = A0; int h = A1; const unsigned char

Linux声卡驱动移植和测试

一.分析驱动程序,根据开发板修改代码 代码太长,就不贴了,几个注意点: 1. 查看开发板原理图和S3C2410的datasheet,UDA1341的L3MODE.L3DATA.L3CLOCK分别与S3C2410的GPB2.GPB3.GPB4相连,IISLRCK=GPE0, IISSCLK=GPE1, CDCLK=GPE2,IISSDI=GPE3, IISSDO=GPE4,部分代码如下: 2. 两个重要结构体:audio_buf_t和audio_stream_t,其中audio_stream_t

使用Spring Cloud合约进行消费者驱动的合同测试

使用Spring Cloud合约进行消费者驱动的合同测试 网址:https://specto.io/blog/2016/11/16/spring-cloud-contract/ 汤米·斯德尔 2016年11月16日 随着系统拓扑的增长,测试微服务成为一项艰巨的任务.当微服务器链接在一起以实现业务功能时,通过编写集成测试来验证他们正在一起工作是很有挑战性的.如果您沿着这条路径走下去,您将需要拥有所有的应用程序,基础资源(如数据库,S3存储区)和第三方API在已知状态下连接并运行,以确保"服务A&q

第五章 搭建 S3C6.410 开发板的 测试环境

一.前言 开发板从技术上说与我们经常用的手机类似, 也包含显示屏. 键盘. Wi-Fi. 蓝牙等模块(可 能有的是选配〉.但与手机不同的是在开发板上安装嵌入式系统要比手机容易得多.而且一般开发 扳都有很多扩展的端口,可以很容易开发定制的硬件, 并与开发板链接.因此,开发板相对于孚机 来说,更适合对程序进行测试,尤其适合对底层的 Linux 程序(如 Linux 驱动〉进行测试. 目前市面上的开发板型号和种类很多,但目前最流行的是基于三星S3C6410 ARM11架构的开发板.国内很多厂商在S3C

搭s3c6410开发板的测试环境读后感

通过学习Android深度探索(卷1)HAL与驱动开发的第五章搭建S3C6410开发板的测试环境,我掌握了搭建S3C6410开发板的测试环境的方法 1安装串口调试工具:minicom 以Ubuntu Linux为例,需要按照如下步骤安装.配置和调试minicom: 第一步:检测当前系统是否支持USB转串口 #lsmod | grep usbserial 如果有usbserial说明系统支持USB转串口 第二步:安装minicom #apt-get install minicom 第三步:配置mi

STM32学习之路-LCD驱动(1)&lt;基础知识&gt;

[1]以下关于 JVM 的叙述,哪些项正确? A.JVM 运行于操作系统之上,它依赖于操作系统 B.JVM 运行于操作系统之上,它与操作系统无关 C.JVM 支持 Java 程序运行,它能够直接运行 Java 字节码文件 D.JVM 支持 Java 程序运行,它能够直接运行 Java 源代码文件 扩展名为.java的是源代码文件(文本文件):开发时编写代码的文件 扩展名为.class的是字节码文件(二进制):系统运行时执行的文件 [2]下列选项中正确的表达式是: A.byte b = 128;