ESP32使用LU9685_20u控制驱动舵机

目录

前言

一、LU9685_20U?

二、使用步骤

1.硬件连接

2.写入程序

总结



前言

  最近又开始玩起舵机MG90S/SG90舵机。如果是控制一个舵机可以用单片机其中一个引脚输出PWM信号就可以了。但是多个舵机又如何解决,不仅增加了负载,还用去不少MCU资源。驱动板此时就起作用了PCA9685(这个应该便宜!)控制起来也很方便!。发现了比PCA9685还不便宜的驱动板LU9685,这个使用起来非常简单。具体使用方法往下看!

一、LU9685_20U?

   

驱动板原理图:

模块两种控制方式:1.I2C控制     ;   2.UART控制。本文主要使用I2C控制: 

舵机供电V+:5v-12v(根据舵机供电调整电压)

模块通信供电DVCC:2.8v-5.5v(模块与舵机是独立供电)

LU9685输出PWM信号的频率是50H在,高电平0.5ms-2.5ms可调,高电平时间对应舵机的0-180度

通道0-15的舵机控制输出。

默认I2C地址:0x80(如果要更换地址请参考数据手册)。截图如下:

仅提供参考,还要实际调整!

在购买模块时,卖家会给你数据手册,文件里还有STM32的控制例程。

控制指令说明:

                                                        (1).I2C

(2).UART

二、使用步骤

1.硬件连接

     

 

      ESP32:    ----------------    LU9685模块:

      D21   ------------------------  SDA

      D22  -------------------------  SCL

      RXD  -----------------------    TX2

      TXD  ------------------------    RX2

      GND  -----------------------  GND  (模块地跟舵机是共地)

      3.3V  ------------------------   DVCC  

2.写入程序

代码如下(示例):I2C控制    ,程序由ArduinoIDE构建  ,如下

/*
* @file main.cpp
 * @author jonnie Walker
 * @brief   ESP32_LU9685-20U-Test
 * @version 0.1
 * @date 2023-11-29
 * 
 * @copyright Copyright (c) 2023
 * -------------------------------------------------------------------/
LU9685-20U-Test


引入宏定义DEVICE_ADDRESS,以便更方便地修改设备地址。
创建了一个新的函数sendCommand,用于发送指令,避免了代码重复。
简化了每个指令的调用,将Wire.beginTransmission、Wire.write和Wire.endTransmission集成在一起

定义了四个函数

*/


#include <Wire.h>

#define DEVICE_ADDRESS 0x80  // 替换为设备的地址

void setup() {
  Wire.begin();        // 初始化IIC总线
  Serial.begin(115200);  // 打开串口通信(用于调试输出)  
}

void loop() {
  resetDevice();       // 发送复位指令
  
  controlChannel(1, 90);  // 控制通道1的角度为90度
  delay(1000);         // 等待1秒
 // controlChannel(14, 180); 
//  delay(1000);


  controlAllChannels(30); // 同时控制所有通道的角度为30度
  delay(1000);         // 等待1秒
}

void sendCommand(byte command[], byte length) {
  Wire.beginTransmission(DEVICE_ADDRESS);
  Wire.write(command, length);
  Wire.endTransmission();
  delay(10);
}

void resetDevice() {
  byte command[] = {0xFB, 0xFB};  // 复位指令
  sendCommand(command, sizeof(command));
}

void controlChannel(byte channel, byte angle) {
  byte command[] = {channel, angle};  // 控制指令
  sendCommand(command, sizeof(command));
}

void controlAllChannels(byte angle) {
  byte command[] = {0xFD, angle};  // 同时控制所有通道的指令
  sendCommand(command, sizeof(command));
}

LU9685控制舵机


总结

内容仅供参考!

如果文中没有你想得到的参数,那么去看他给的数据手册!

基本使用此模块就这几步,使用也方便。LU9685还具有两种控制方式(IIC,UART),舵机的速度控制就................! 。PCA9685与LU9685各有优缺点!根据自己的需求选择吧。共同特点可以同时控制多个舵机,通过IIC控制可以挂载多个驱动板来控制很多舵机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值