OpenMV:21控制多个舵机(需要模块PCA9685)

本文介绍了如何使用PCA9685舵机拓展板来控制多个舵机,重点讲解了电源选择、拓展板连接OpenMV的方式,以及控制单个和多个舵机的代码实现。强调不能使用3.7V锂离子电池,推荐使用4.8V~6V电源,并提供了连接和编程的详细步骤。
摘要由CSDN通过智能技术生成


今天我们来学习下 OpenMV的舵机拓展板来控制多个舵机同时使用

如果我们想控制三个以上的舵机,就需要用到舵机拓展板PCA9685

PCA9685使用的是I2C协议,我们可以直接使用PCA9685舵机拓展板来控制八个舵机

舵机的供电采用的是4.8V-6V的电源,我们可以用四节~五节干电池来进行供电(一节干电池就是1.2V的电压) ——不能使用3.7V的锂离子电池供电!

对于电源的供电,我们直接将电源连接到OpenMV的VCC和GND两个引脚即可

连接

将电机拓展板PCA9685插到OpenMV上,电源(4.8V~6V)连接到右侧的VCC和GND上
在这里插入图片描述

一个有八个引脚,可以控制八个舵机,每排引脚从上往下是:PWM(信号线)、VCC(电源线)、GND(地线)


舵机的编号从左到右编号为0-7
在这里插入图片描述


代码

控制单个舵机的旋转

核心代码:servo.position(i, x) # 控制第i号舵机旋转x°

pc8596.py


import utime
import ustruct

class PCA9685:
    def __init__(self, i2c, address=0x40):
        self.i2c = i2c
        self.address = address
        self.reset()

    def _write(self, address, value):
        self.i2c.writeto_mem(self.address, address, bytearray([value]))

    def _read(self, address):
        return self.i2c.readfrom_mem(self.address, address, 1)[0]

    def reset(self):
        self._write(0x00, 0x00) # Mode1

    def freq(self, freq=None):
        if freq is None:
            return int(25000000.0 / 4096 / (self._read(0xfe) - 0.5))
        prescale = int(25000000.0 / 4096.0 / freq + 0.5)
        old_mode = self._read(0x00) # Mode 1
        self._write(0x00, (old_mode & 0x7F) | 0x10) # Mode 1, sleep
        self._write(0xfe, prescale) # Prescale
        se
ESP32是一款基于Espressif Systems的开源硬件平台,它结合了Wi-Fi和蓝牙功能,非常适合物联网(IoT)项目。PCA9685是一个16通道PWM(脉宽调制)信号发生器,常用于精确控制电机、伺服马达或其他设备,包括舵机。 在使用ESP32控制16路舵机控制PCA9685的过程中,你需要按照以下步骤操作: 1. **硬件连接**: - 将ESP32的GPIO针脚连接到PCA9685的数据线(DA0-DA15),通常通过I2C总线通信。 - PCA9685的VCC连接到ESP32的3.3V电源,GND也连接在一起。 2. **软件配置**: - 在ESP32上,需要编写代码设置I2C通信,比如使用`driver`库中的`i2c_driver`函数初始化I2C。 - 导入PCA9685库,例如`driver/pwm`模块,配置对应于舵机的通道。 3. **设置频率**: - PCA9685工作在400kHz或200kHz模式,可以通过写寄存器调整I2C传输速度。 4. **控制舵机**: - 发送 PWM (Pulse Width Modulation) 控制信号,每个通道对应一个特定的PWM频率和占空比,来控制舵机的角度。 ```cpp #include <driver/i2c.h> #include <driver/pwm.h> void setup() { i2c_config_t conf = { .scl_io = GPIO_NUM_22, // SCL 引脚 .sda_io = GPIO_NUM_21, // SDA 引脚 .freq = 100 * 1000, // I2C 频率 }; i2c_driver_install(&conf); pwm_config_t pwm_conf = { .duty_cycle_sp = 0, // 初始占空比 .freq = 50, // PWM频率,一般舵机需要50Hz左右 }; pwm_driver_install(PWM_ID, &pwm_conf, NULL, NULL, true); // 初始化PCA9685 for (int ch = 0; ch < 16; ch++) { pwm_set_channel_duty_num(PWM_ID, ch, duty_for_ch[ch]); // 设置每个通道的占空比 } } void loop() { // 更新舵机角度... } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值