登录/注册

stm32f103 pca9685

更多

STM32F103 与 PCA9685 的配合使用常见于舵机(Servo)或 LED 控制场景。以下是关键点总结:


1. 硬件连接


2. 软件配置(基于 HAL 库示例)

初始化 I2C

I2C_HandleTypeDef hi2c1;

void I2C_Init(void) {
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 400000;  // 400kHz
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c1.Init.OwnAddress1 = 0;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  HAL_I2C_Init(&hi2c1);
}

PCA9685 初始化

#define PCA9685_ADDR 0x40  // 默认地址

void PCA9685_Init(void) {
  // 进入睡眠模式以配置寄存器
  uint8_t sleep_cmd[2] = {0x00, 0x10};  // MODE1 寄存器,设置 SLEEP 位
  HAL_I2C_Master_Transmit(&hi2c1, PCA9685_ADDR, sleep_cmd, 2, 100);

  // 设置 PWM 频率(例如 50Hz 用于舵机)
  uint8_t prescale = (25000000 / (4096 * 50)) - 1;  // 计算公式
  uint8_t freq_cmd[2] = {0xFE, prescale};            // PRE_SCALE 寄存器
  HAL_I2C_Master_Transmit(&hi2c1, PCA9685_ADDR, freq_cmd, 2, 100);

  // 退出睡眠模式
  uint8_t wake_cmd[2] = {0x00, 0x80};  // 清除 SLEEP 位,启用自动递增
  HAL_I2C_Master_Transmit(&hi2c1, PCA9685_ADDR, wake_cmd, 2, 100);
  HAL_Delay(5);  // 等待振荡器稳定
}

设置 PWM 占空比

void PCA9685_SetPWM(uint8_t channel, uint16_t on, uint16_t off) {
  uint8_t reg = 0x06 + 4 * channel;  // LED0 起始寄存器
  uint8_t data[4] = {
    on & 0xFF,          // ON_L
    (on >> 8) & 0x0F,  // ON_H
    off & 0xFF,         // OFF_L
    (off >> 8) & 0x0F  // OFF_H
  };
  HAL_I2C_Mem_Write(&hi2c1, PCA9685_ADDR, reg, I2C_MEMADD_SIZE_8BIT, data, 4, 100);
}

3. 示例:控制舵机

// 舵机角度转 PWM 值(0~180度对应 150~600)
void SetServoAngle(uint8_t channel, float angle) {
  uint16_t pulse = (uint16_t)(150 + (angle / 180.0) * 450);  // 0.5ms-2.5ms 对应 50Hz
  PCA9685_SetPWM(channel, 0, pulse);
}

// 主函数调用
SetServoAngle(0, 90);  // 通道0设为90度

常见问题


通过以上步骤,可实现 STM32F103 对 PCA9685 的 PWM 控制。具体参数需根据硬件实际需求调整。

PCA9685芯片的模拟的IIC需要加上拉电阻吗?

pca9685用的是IIC通讯,如果用的是模拟的IIC,需要加上拉电阻吗?

2023-10-18 06:59:24

STM32使用PCA9685控制舵机的过程分享

首先声明我写的代码主要参考了这位仁兄的,非常感谢他把自己的源代码奉献出来。他的代码是基于标准库函数的,代码过程简单明了,非常适合移植。STM32 使用 PCA9685 控制舵机,控制机械臂,控制

2022-02-21 06:19:16

PCA9685扩展I/O的应用是什么?

PCA9685怎么使用?PCA9685扩展I/O的应用是什么?

2022-01-17 07:38:20

STM32F103-PCA9685控制16路舵机资料分享

使用STM32F103控制PCA9685芯片,驱动16路舵机,可正反转,可精准控制,可调速度

资料下载 过往5 2022-05-27 16:28:37

PCA9685与STC12C5A60S2单片机突然不能工作了!

1.症状:PCA9685工作的好好的突然不能工作了?芯片型号:单片机STC12C5A60S参数:sbit PCA9685_sda = P0^4; //数据输入/输出端

资料下载 佚名 2021-12-23 19:14:25

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

基于STM32f103使用的DAC正弦波

基于STM32f103使用的DAC正弦波

资料下载 shyshyshy 2021-08-02 10:05:00

怎么使用PCA9685扩展PWM端口呢

一直在用NXP的单片机做各种开发, 最近遇到了这么个问题,就是单片机的PWM端口不够用,公司硬件工程师推荐使用NXP的PCA9685芯片扩展,一个芯片可以扩展出16路PWM,我们用了两个,成功扩展

2021-11-23 08:14:50

怎样使用PCA9685模块去控制舵机呢

PCA9685的寄存器可分为哪几种类型?怎样使用PCA9685模块去控制舵机呢?

2021-10-25 08:46:44

如何使用编程PCA9685

的教程,在动手中学习理论。单片机型号:stm32f103c8t6使用stm32来控制一个舵机并不是难事,但是如果控制多个舵机,那硬件资源就显得捉襟见肘了。因此,必须使用神器,

2021-09-02 08:08:12

PCA9685使用说明

舵机驱动板,网上很多资源,但是基于STM32F103的能用代码实在太少。具体使用说明我觉得这两个链接写的够详细了,附上链接1.PCA9685使用说明12.PC

2021-08-11 06:03:25

pca9685芯片手册 stm32 hal iic

pca9685芯片手册 stm32 hal iic#ifndefpca9685#definepca9685#include"main.

2021-08-10 07:24:32

STM32F103控制PCA9685模块驱动多个舵机 精选资料分享

之前在做假手的控制时,驱动用的是舵机。因为要实现假手的多自由度动作,所以需要用到8个舵机。而我用的主控板只有两路pwm输出,不能满足要求,所以在查阅了相关资料后,找到了PCA9685模块。因为网上

2021-07-21 06:36:26

PCA9685的使用及RT-Thread PCA9685驱动组件详解

JetBot 小车使用的电机驱动模块上用了 PCA9685 扩展 I/O ,一边与主控通过 I2C 总线通信,另一边连接 TB6612 马达驱动芯片。

2020-09-26 09:49:52

7天热门专题 换一换
相关标签