PCA9685舵机控制板使用

devtools/2025/2/7 15:33:04/

在这里插入图片描述

1. 概述

PCA9685 是一款由 NXP 半导体公司生产的 16 通道 PWM 驱动器,广泛应用于多个舵机、LED 灯带控制等场景。它通过 I2C 总线与主控芯片(如 STM32)通信,可以高效地控制多个舵机的运动和多通道 PWM 输出。该模块适用于多舵机控制、机器人、电动玩具、遥控模型等应用。
使用舵机驱动板,可以解决有些MCU PWM口不足的问题,同时降低MCU的CPU利用率,提升CPU性能,毕竟电机的驱动工作交给了PCA9685芯片。

2. 主要特点

【1】I2C 接口:通过 I2C 总线与主控芯片(如 STM32)进行通信,支持多达 62 个设备通过 I2C 总线连接。
【2】16 通道 PWM 输出:每个通道可以独立控制,适用于 16 个舵机或其他 PWM 控制设备。
【3】可调 PWM 输出频率:频率范围从 24Hz 到 1526Hz,用户可以根据需要调整。
【4】集成电流限制器:内置电流限制功能,避免过流损坏设备。
【5】低功耗设计:在低功耗模式下工作,适合嵌入式系统。

3. 硬件接口说明

3.1 引脚定义

引脚描述连接说明
VCC电源输入(3.3V 或 5V)连接到主控芯片的电源
V+电源输入(舵机电源 5V、6V 或 7.4V)连接到舵机电源(一般不接,使用图片上的绿色端子供电)
SDAI2C 数据线连接到主控的 SDA 引脚
SCLI2C 时钟线连接到主控的 SCL 引脚
GND地线连接到主控地线
OE输出使能(控制是否输出 PWM 信号)默认接地,启用 PWM 输出

3.2 舵机连接

PCA9685 支持 16 个独立的 PWM 通道,每个通道连接一个舵机或其他 PWM 控制设备。每个通道有三个引脚:

V+:连接到舵机电源。
PWM 输出:用于输出 PWM 信号,控制舵机位置。
GND:连接到舵机地线。

3.3 电源要求

VCC:主控电源,一般为 3.3V 或 5V,取决于 I2C 总线的工作电压。
V+:舵机电源,一般为 5V、6V 或 7.4V,根据所使用的舵机型号进行选择。
注意:实际为了接线方便,V+口一般空出,使用图片上的绿色段子进行舵机的电源供电。

4. I2C 通信协议

PCA9685 通过 I2C 接口与主控芯片通信。每个 PCA9685 模块都有一个 7 位 I2C 地址,默认值为 0x40,可以通过地址选择引脚修改。

4.1 I2C 操作

PCA9685 支持标准的 I2C 写/读操作。主控芯片通过发送命令来配置 PCA9685,设置 PWM 信号的频率和占空比。

  • 地址选择:PCA9685 默认 I2C 地址为 0x40,可以通过接地址引脚选择其他地址,最大支持 62 个设备。
  • 寄存器操作:通过 I2C 总线访问 PCA9685 的寄存器,设置 PWM 输出参数。

4.2 常用寄存器

寄存器地址寄存器名称描述
0x00MODE1控制寄存器,配置 PCA9685 的基本工作模式
0x01MODE2输出控制寄存器,用于设置输出的驱动方式
0xFEPRESCALE设置 PWM 输出频率
0x06LED0_ON_L通道 0 PWM 输出的开启时间低字节
0x07LED0_ON_H通道 0 PWM 输出的开启时间高字节
0x08LED0_OFF_L通道 0 PWM 输出的关闭时间低字节
0x09LED0_OFF_H通道 0 PWM 输出的关闭时间高字节

5. 软件控制

5.1 初始化 PCA9685
PCA9685 的初始化步骤包括配置 I2C 通信、设置频率、启用 PWM 输出等。
I2C的配置和使用我在前面的博文中说过很多遍了,这里我默认I2C驱动是完好的,直接描述PCA9685的初始化,初始化完成后,MCU通过I2C通信控制舵机驱动板子,完成多路电机控制,解决了部分MCU PWM引脚不足的问题,比如STM32F103C8T这款常见的MCU只有一路标准电机控制PWM口。

#include "stm32f1xx_hal.h"I2C_HandleTypeDef hi2c1;#define PCA9685_ADDR 0x40  // I2C 地址// I2C 写操作
void I2C_Write(uint8_t reg, uint8_t data) {HAL_I2C_Mem_Write(&hi2c1, PCA9685_ADDR, reg, I2C_MEMADD_SIZE_8BIT, &data, 1, 1000);
}// 初始化 PCA9685
void PCA9685_Init(void) {I2C_Write(0x00, 0x01);  // 设置模式寄存器,启用设备I2C_Write(0x01, 0x04);  // 设置输出驱动I2C_Write(0xFE, 0x79);  // 设置预分频器,调整频率(50Hz)
}

PWM__83">5.2 设置 PWM 输出

可以通过修改寄存器来设置 PWM 输出的占空比,从而控制舵机的角度。

// 设置指定通道的 PWM 占空比
void PCA9685_SetPWM(uint8_t channel, uint8_t pulse) {uint8_t reg_on = 0x06 + channel * 4;    // 通道的开启时间寄存器uint8_t reg_off = 0x08 + channel * 4;   // 通道的关闭时间寄存器// 设置占空比的低字节和高字节I2C_Write(reg_on, 0x00);  // 开始时间(低字节)I2C_Write(reg_off, pulse);  // 结束时间(高字节和低字节)
}

http://www.ppmy.cn/devtools/156856.html

相关文章

【Elasticsearch】索引性能优化

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

python学opencv|读取图像(五十三)原理探索:使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习进程中,已经探索了使用cv.matchTemplate()函数实现最佳图像匹配的技巧,并且成功对两个目标进行了匹配。 相关文章链接为:python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像…

人工智能丨PyTorch 强化学习与自然语言处理

在当前快速发展的科技时代,深度学习和人工智能无疑是最受追捧的领域之一。而在这股浪潮中,PyTorch作为一种灵活而强大的深度学习框架,已经占据了重要的地位。无论是在强化学习还是自然语言处理中,PyTorch都提供了不容小觑的功能和…

技术选型对比:Redis 与 MySQL、Dubbo 与 Spring Cloud

在 Java 开发的技术选型过程中,深入了解不同技术的特点和适用场景是至关重要的。本文将对 Redis 与 MySQL 在保证数据一致性方面进行详细对比,并探讨 Dubbo 与 Spring Cloud 这两个微服务框架的差异,帮助开发者在实际项目中做出更合理的技术选…

【Linux高级IO】五种IO模型

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 ❀ Linux高级IO 重新理解IOI/O模型阻塞式IO非阻塞式IO信号驱动IOIO多路转接异步IO 同步通信 vs…

React - jsx 语法

在 React 中,JSX(JavaScript XML)是一种语法扩展,它允许开发者在 JavaScript 代码中使用类似 HTML 的语法。JSX 提升了代码的可读性和可维护性,使得编写和构建用户界面更加直观。它被广泛应用于 React 组件的定义。 一…

风控系统指标版本管理,前端实现

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang Github:wnhyang - Overview 前言 本文算是前文《基于LiteFlow的风控系统指标版本控制》的完善。 前文已经说明了在基于规则引擎系统中版本管理的重要性,并…

【产品小白】什么是微服务

在数字化浪潮汹涌澎湃的当下,软件系统的规模持续扩张,复杂度呈指数级攀升。如何高效地开发软件,确保其后续的维护轻松便捷,同时具备强大的扩展能力,已然成为广大开发者待攻克的核心难题。微服务作为一种应运而生的前沿…