16路12位PWM信号发生器 PCA 9685
节省主机资源,值得拥有。此舵机驱动板使用PCA9685芯片,是16通道12bit PWM舵机驱动,用2个引脚通过I2C就可以驱动16个舵机。
强大如斯!
先对单个舵机尝试一下,了解一下PWM
20ms周期 = 频率为50Hz
单个舵机例程1:
非常简单的舵机例子,实现效果是使得电机转动:
#include <Servo.h>
#define PIN_SERVO 10
Servo myservo;
void setup()
{
myservo.attach(PIN_SERVO);
}
void loop()
{
myservo.write(0);
delay(1000);
myservo.write(80);
delay(1000);
myservo.write(160);
delay(1000);
myservo.write(80);
delay(1000);
myservo.write(0);
delay(1000);
}
单个舵机例程2:
#include <Servo.h>
#define PIN_SERVO 9
int i=0;
Servo myservo;
void setup()
{
myservo.attach(PIN_SERVO);
}
void loop()
{
for(i=0;i<160;i++)
{
myservo.write(i);
delay(30);
}
for(i=160;i>0;i--)
{
myservo.write(i);
delay(30);
}
delay(1000);
}
单个舵机使用板上的I/O口就可以,可是舵机多了呢?
来学习PCA 9685
主要参数以及引脚定义:
- 电压:舵机供电5-7v,接受高一点的电压。
大多数的舵机设计电压都是在5~6V,尤其在多个舵机同时运行时,跟需要有大功率的电源供电。如果直接使用Arduino
5V引脚直接为舵机供电,会出现一些难以预测的问题,所以我们建议你能有个合适的外部电源为驱动板供电。
-
逻辑电路电压:3-5V
-
通信接口:使用i2c通信,就是SCL、SDA引脚
7位的I2C地址为:0x40 + A5:A0,A5到A0如果不做任何处理的话是0,想要把哪一位置1就把那个引脚焊到一起。另外用i2cdetect检测出还有一个0x70地址一直存在,这是一个通用地址,可以给所有从机下达指令。
-
OE反使能脚:这个引脚低电平使能,不接的话模块内部默认已经接地使能了,所以正常使用可以不接。
-
工作频率:40-1000HZ
接线图:
注意!!!下面例子需要用到外部库文件,如果你IDE没有<Adafruit_PWMServoDriver.h>,那么下载这个并放在安装路径的文档—arduino-libraries路径下面
16路舵机驱动板资料(内含模块级联说明):https://pan.baidu.com/s/1gfhFGDP
例子程序1
(有时间就简化一下,好像还不是最好的例子)
16路舵机同时转动。原理是定义脉宽最大和最小,通过改变0-15号舵机的脉宽大小实现角度转动
/***************************************************
This is an example for our Adafruit 16-channel PWM & Servo driver
Servo test - this will drive 16 servos, one after the other
这是我们的Adafruit 16通道PWM和伺服驱动器的一个例子,驱动16个伺服电机
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
这些显示器使用I2C进行通信,需要2个引脚。
接口。对于ARDUINO UNOS,这是SCL->模拟5,SDA - >模拟4
****************************************************/
#