本教程是的一部分: 伺服电机
这里列出了所有与伺服电机相关的视频。其他视频的链接在本文下方。
PCA9685 16通道12位伺服控制器V1的Arduino代码和视频
在本教程中,我们将探索如何使用NXP半导体的PCA9685 16通道12位伺服控制器。该模块允许您精确控制多达16个伺服电机或通过脉宽调制(PWM)调暗一组LED灯。到本教程结束时,您将拥有一个能够单独或同时控制多个伺服电机的工作设置。

为进一步澄清教程内容,我鼓励您观看附带的视频(视频时间:00:00),以获得设置和编码过程的视觉演示。
硬件解释
PCA9685模块是一个紧凑的板,可以通过I2C通信控制多个舵机。它具有16个通道,允许您连接最多16个舵机,每个舵机都有自己的控制信号。该模块在5V电源下工作,并设计用于处理PWM信号,这对准确控制舵机的位置至关重要。
该电路板包括专用引脚用于电源(VCC)、接地(GND)和通信(SDA和SCL)。SDA引脚用于数据传输,而SCL引脚是时钟信号,两者分别连接到Arduino的模拟引脚A4和A5。这种配置确保了Arduino与PCA9685模块之间的可靠通信。
数据表详细信息
| 制造商 | NXP半导体 |
|---|---|
| 零件编号 | PCA9685 |
| 逻辑/IO电压 | 3.3 V 到 5.5 V |
| 供电电压 | 2.3伏到5.5伏 |
| 每通道输出电流 | 25 毫安最大 |
| 每通道峰值电流 | 最大100毫安 |
| PWM频率指导 | 24赫兹到1.6千赫兹 |
| 输入逻辑阈值 | 0.3伏(低)/ 0.7伏(高) |
| 电压降 / RDS(on)/ 饱和度 | 0.5 V最大 |
| 热限制 | -40 °C 到 125 °C |
| 包裹 | HTSSOP-28 |
| 注释 / 变体 | 16通道PWM控制器 |
- 确保有足够电流的5V电源(推荐1A)。
- 不要直接从Arduino供电给舵机,以免造成损坏。
- 使用正确的 I2C 引脚:SDA 接 A4,SCL 接 A5。
- 根据您的特定伺服器调整脉冲宽度值。
- 检查接线以确保极性正确:GND、VCC和信号。
- 考虑在高电流应用中进行散热。
接线说明

将PCA9685连接到您的Arduino,首先连接电源和接地。将PCA9685上的VCC引脚连接到Arduino上的5V输出。然后将PCA9685上的GND引脚连接到Arduino上的GND。接下来,将PCA9685上的SDA引脚连接到Arduino上的A4引脚,将SCL引脚连接到A5引脚。
对于伺服电机,将信号线连接到 PCA9685 的相应通道(例如,第一个伺服的 CH0),将电源线连接到独立的电源(因为伺服电机可能需要比 Arduino 能提供的更大的电流),并将地线连接到与 PCA9685 共用的接地。确保信号线、电源线和地线正确对齐,以避免损坏您的组件。
代码示例与演练
在代码的设置部分,我们初始化PCA9685模块,使用pwm.begin()并设置PWM频率为pwm.setPWMFreq(60);这设置了伺服电机的通信频率。
void setup() {
Serial.begin(9600);
Serial.println("16 channel Servo test!");
pwm.begin();
pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
}在循环中,我们通过设置与期望角度相对应的PWM值来控制伺服电机。该函数angleToPulse(int ang)将角度映射到合适的脉宽,这是实现准确舵机定位所必需的。
void loop() {
for( int angle =0; angle<181; angle +=20){
delay(500);
pwm.setPWM(0, 0, angleToPulse(angle) );
}
}最后,函数angleToPulse(int ang)将角度转换为脉冲宽度,使用定义的最小和最大脉冲长度。这使您能够根据想要达到的角度轻松控制伺服的位置信息。
int angleToPulse(int ang){
int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
Serial.print("Angle: ");Serial.print(ang);
Serial.print(" pulse: ");Serial.println(pulse);
return pulse;
}演示 / 预期内容
一旦所有连接正确且代码上传完毕,您应该会看到伺服电机按每20度的增量在指定角度间移动。如果伺服电机没有按预期工作,请检查接线是否正确,并确保电源供应充足(视频时长12:30)。
视频时间戳
- 00:00PCA9685简介
- 02:30- 线路说明
- 05:00- 代码演示
- 10:15伺服控制的演示
- 12:30- 排查常见问题
本教程是……的一部分: 伺服电机
- Controlling a Servo with Push Buttons Using Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- 使用红外遥控器和Arduino控制伺服电机
- 使用电位器控制Arduino伺服电机
- 通过手势控制Arduino的伺服位置
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Build an Arduino Servo Toggle Switch with a Push Button
This code has not been parsed yet. Please return to the admin panel to parse it.
This code has not been parsed yet. Please return to the admin panel to parse it.
|||您可能需要的东西
-
亚马逊从亚马逊购买PCA9685amzn.to
-
易趣在eBay上购买PCA9685ebay.us
-
全球速卖通从AliExpress购买PCA9685s.click.aliexpress.com
-
Banggood从Bangood购买PCA9685banggood.com
资源与参考
尚无可用资源。
文件📁
Arduino 库(zip 格式)
-
Adafruit-PWM-舵机驱动库-主文件
Adafruit-PWM-Servo-Driver-Library-master.zip0.02 MB