PCA9685舵机控制板使用

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) 连接到舵机电源(一般不接,使用图片上的绿色端子供电)
SDA I2C 数据线 连接到主控的 SDA 引脚
SCL I2C 时钟线 连接到主控的 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 常用寄存器

寄存器地址 寄存器名称 描述
0x00 MODE1 控制寄存器,配置 PCA9685 的基本工作模式
0x01 MODE2 输出控制寄存器,用于设置输出的驱动方式
0xFE PRESCALE 设置 PWM 输出频率
0x06 LED0_ON_L 通道 0 PWM 输出的开启时间低字节
0x07 LED0_ON_H 通道 0 PWM 输出的开启时间高字节
0x08 LED0_OFF_L 通道 0 PWM 输出的关闭时间低字节
0x09 LED0_OFF_H 通道 0 PWM 输出的关闭时间高字节

5. 软件控制

5.1 初始化 PCA9685

PCA9685 的初始化步骤包括配置 I2C 通信、设置频率、启用 PWM 输出等。

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

c 复制代码
#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)
}

5.2 设置 PWM 输出

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

c 复制代码
// 设置指定通道的 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);  // 结束时间(高字节和低字节)
}
相关推荐
我不是帅戈3 小时前
STM32+安信可Ai-WB2-12F连接阿里云物联网平台
stm32·物联网·阿里云·云计算·安信可
教练、我想打篮球3 小时前
04 基于 STM32 的时钟展示程序
stm32·单片机·嵌入式硬件
大鱼YY3 小时前
STM32系统定时器以及微秒延时函数分析
stm32·滴答定时器
芯岭技术4 小时前
普冉MS32C001单片机,国产32位单片机,芯片特性和功能介绍
单片机·嵌入式硬件
吃货界的硬件攻城狮6 小时前
【STM32 学习笔记】ADC数模转换器
笔记·stm32·单片机·学习
小昭dedug9 小时前
功能安全的关键——MCU锁步核技术全解析(含真实应用方案)
单片机·嵌入式硬件
负里5510 小时前
STM32-模电
嵌入式硬件
BW.SU11 小时前
单片机 + 图像处理芯片 + TFT彩屏 指示灯控件
单片机·嵌入式硬件·人机交互·控件·触摸屏设计·指示灯·液晶屏
newtonltr11 小时前
CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南
stm32·canopen
逼子格11 小时前
二极管钳位电路——Multisim电路仿真
嵌入式硬件·硬件工程·硬件工程师·滤波器·硬件工程师真题·钳位电路·二极管钳位电路