FastBond4挑战部分-基于ESP32-S3的舵机控制板及机械臂设计
该项目使用了ESP32-S3模组,实现了舵机控制板的设计,它的主要功能为:控制板具有6路PWM接口及3个总线舵机接口,可同时控制多个舵机。舵机控制板与机械臂及触摸屏配合使用,可通过操作控制板手柄或触摸屏485通讯接口控制各关节动作,实现手动或自动控制功能。
标签
Arduino
ESP32-S3
机械臂
FastBond4
舵机控制
chinaking
更新2026-03-31
19
KiCad文件
全屏

一、项目概述

本项目为参加FastBond第四季活动而设计,创意方向为“感知”,项目内容为机械臂、工业自动化。

本项目基于ESP32-S3模组,设计了一款舵机控制板,命名为ESP32-S3-MotorCtrlBoard

该控制板具有6PWM接口及3个总线舵机接口,可同时控制多个舵机。

为测试控制板功能,本人动手制作了一款4自由度机械臂,机械臂含有3个旋转关节和1个夹爪,命名为“小黑机械臂”。可通过操作控制板手柄或触摸屏485通讯接口控制各关节动作,实现手动或自动控制功能。

二、机械臂设计

为了尽量控制成本,本人没有购买成品机械臂,而是通过散件和自制的方式,自己攒了一个机械臂。这样机械臂(含舵机)成本可以控制在150元以内。

一方面,自己动手丰衣足食,可以学到很多知识。

另一方面,网上的机械臂性价比不高。

自制机械臂有4个舵机,四个自由度,分别控制腰部、大臂、小臂和夹爪。下面是机械臂物料明细。总成本约150元。

序号

名称

型号

数量

单位

单价

总价

备注

1

双轴总线舵机

ZP15D

2

35

70

15kg270°兼容PWM

2

PWM舵机

MG996R 180°

2

15

30

13kg180°

3

金属机械爪

 

1

10

10

 

4

U型支架

 

1

5

5

 

5

U型支架

 

1

5

5

 

6

L型支架

 

1

5

5

 

7

舵轮(主动轮)

 

4

2

8

 

8

舵轮(从动轮)

 

2

2

4

 

9

杜邦线

30cm 40P

1

5

5

公对母

10

PP塑料板

 

2

1.5

3

 

本人开始制作第一版时,大臂和小臂都较长,因选用的电机功率相对较小,无法承受自身载荷,更换大功率舵机又需要增加成本,所以无奈将两个臂都做了“截肢”。

最初版机械臂


三、控制板硬件设计

3.1控制板主要物料

序号

名称

型号

厂商

备注

1

RS-485芯片

MAX3485CSA+

ADI/Maxim

赞助商

2

静电和浪涌保护芯片TVS

1KSMB6.8CA

Littelfuse

赞助商

3

接线端子

Term Block HDR 2POS 5.08mm

TE

赞助商

4

控制器(无线模块)

ESP32-S3-WROOM-1

 

 

5

DC-DC电源芯片

XL1509-5.0

 

 

6

线性稳压器LDO

AMS1117-3.3

 

 

7

双轴手柄

FJM10K-N

 

 

8

USB转换芯片

CH343G

 

 

9

八路总线收发器

74HCT245D

 

 

10

双向电压电平转换器

TXS0102DCTR

 

 

11

单路缓冲器

SN74LVC1G125DBV

 

 

12

反相器

74HC1G04GW

 

 

3.2原理框图


注:舵机单独供电,舵机电源和控制板电源需要共地。


3.3硬件电路介绍

电源电路

电源使用XL1509-5.0降压,支持宽电压供电。再经过AMS1117-3.3降压到3.3V。

舵机电源使用外部电源适配器单独供电,舵机电源的电压5V,最大输出电流3A。

image.png

MCU电路

MCU使用乐鑫的ESP32-S3-WROOM-1模组。使用了GPIO、ADC、PWM、UART、I2C、USB等资源。

image.png

输入输出电路

控制板设计了两个按键、两个LED、两个双轴手柄(4路ADC)。

image.png

USB转串口电路

使用USB转串口芯片CH343G,设计了程序下载电路。

image.png

RS485电路

控制板支持485和电脑或触摸屏通讯,下面是RS485电路。485芯片使用的ADI(MAXIN)的MAX3485,使用S8050实现自动换向功能,无需MCU控制换向。静电浪涌保护(TVS)元件使用的Littelfuse的SMB6.8CA.

image.png

PWM电平转换电路

MG996R舵机支持3.3V和5V的PWM,而总线舵机只兼容5V的PWM,所以使用74HCT245D进行电平转换,将3.3V的PWM信号转成5V,以驱动总线舵机。

image.png

总线舵机驱动电路

总线舵机也支持单线串口驱动,当系统中使用的舵机较多时,推荐使用总线舵机,可以对每个舵机设置ID号,也能减少MCU引脚资源占用。

image.png

PCB设计图

PCB使用的是双层板,用Kicad完成设计。控制板尺寸为80*80mm

image.png

image.png

控制板实物图

image.png

四、软件设计

4.1 软件平台

编程环境:Arduino 2.3.7

image.png

开发板库:

image.png

4.2 主要功能

设计了五种工作模式,通过按下按键1,可以在各个模式之间顺序切换。

模式一至模式三为手动模式,模式四为示教模式,模式五为自动模式。

模式一:两个手柄共4个轴分别控制4个关节。

模式二:两个手柄只控制回转和夹爪。

模式三:两个手柄只控制大臂和小臂。

模式四:类似于示教器。可以通过触摸屏控制机械臂四个关节动作。

模式五:全自动功能,可根据编程位置自动动作。

4.3 主要代码

初始化程序

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600, SERIAL_8N1, 18, 17);//485
  slave.start();
  delay(1000);  // 等待 初始化完成
  // 设置LED引脚为输出模式
  pinMode(LED1_PIN, OUTPUT);
  pinMode(LED2_PIN, OUTPUT);


  // 设置按键引脚为输入模式(使用内部上拉电阻)
  pinMode(KEY1_PIN, INPUT_PULLUP);
  pinMode(KEY2_PIN, INPUT_PULLUP);
 
  // 初始化LED状态
  digitalWrite(LED1_PIN, HIGH);//灭
  digitalWrite(LED2_PIN, HIGH);
 
  // 初始状态:LED1亮
  updateLEDs();
 
  // 附加中断(按键按下时触发)
  attachInterrupt(digitalPinToInterrupt(KEY1_PIN), buttonISR, FALLING);
 
 
  Serial.println("\n[初始化] ESP32-S3 舵机控制");


  //初始化PWM
  ledcAttach(SERVO_PIN0, PWM_FREQ, PWM_RESOLUTION);
  //ledcAttach(SERVO_PIN1, PWM_FREQ, PWM_RESOLUTION);
  ledcAttach(SERVO_PIN2, PWM_FREQ, PWM_RESOLUTION);
  ledcAttach(SERVO_PIN3, PWM_FREQ, PWM_RESOLUTION);
  //ledcAttach(SERVO_PIN4, PWM_FREQ, PWM_RESOLUTION);
  ledcAttach(SERVO_PIN5, PWM_FREQ, PWM_RESOLUTION);


  // 初始姿态设置
  setServoAngle(90, SERVO_PIN0, 0, 180); // 1轴,腰关节,MG996R  默认90
  //setServoAngle(90, SERVO_PIN1, 0, 180); //
  setServoAngle(120, SERVO_PIN2, 0, 270); // 2轴,大臂,总线舵机ZP15D  默认120
  setServoAngle(165, SERVO_PIN3, 0, 270); // 3轴,小臂,总线舵机ZP15D  默认165
  //setServoAngle(90, SERVO_PIN4, 0, 180);
  setServoAngle(75, SERVO_PIN5, 0, 180); // 4轴,夹爪,MG996R 默认75
}


主程序

主程序具有5种模式,可以按下按键1,在各种模式之间切换。

void loop() {
//读取手柄信号
  iADC_Handle1X = analogRead(ADC1_PIN); //0-4095
  iADC_Handle1Y = analogRead(ADC2_PIN);
  iADC_Handle2X = analogRead(ADC3_PIN); //0-4095
  iADC_Handle2Y = analogRead(ADC4_PIN);


  //手柄值映射到控制角度
  iHandleSetServoAngle_alxe1 = map(iADC_Handle1X, 1024, 3072, 180, 0);
  iHandleSetServoAngle_alxe2 = map(iADC_Handle1Y, 1024, 3072, 75, 165);
  iHandleSetServoAngle_alxe3 = map(iADC_Handle2Y, 1024, 3072, 210, 120);
  iHandleSetServoAngle_alxe4 = map(iADC_Handle2X, 1024, 3072, 110, 40);


   // 处理按键状态变化
  if (buttonPressed) {
    handleButtonPress();
  }
 
//发送状态到485屏幕
  modebusData[0] = state;
  slave.poll(modebusData, 5 );


//根据状态机,控制指示灯效果及工作模式

//四个轴均可动作
  if (state == 1) {
    setServoAngle(iHandleSetServoAngle_alxe1, SERVO_PIN0, 0, 180); // 1轴  默认90
    delay(100);
    //setServoAngle(iHandleSetServoAngle, SERVO_PIN1, 0, 180); //
    setServoAngle(iHandleSetServoAngle_alxe2, SERVO_PIN2, 0, 270); // 2轴 默认120
    delay(100);
    setServoAngle(iHandleSetServoAngle_alxe3, SERVO_PIN3, 0, 270); // 3轴 默认165
    delay(100);
    //setServoAngle(iHandleSetServoAngle, SERVO_PIN4, 0, 180);
    setServoAngle(iHandleSetServoAngle_alxe4, SERVO_PIN5, 0, 180); // 4轴 默认75
    delay(100);
  }

  else if  (state == 2) { //只控制1轴和4轴
    setServoAngle(iHandleSetServoAngle_alxe1, SERVO_PIN0, 0, 180); // 1轴  默认90
    delay(100);
    setServoAngle(iHandleSetServoAngle_alxe4, SERVO_PIN5, 0, 180); // 4轴 默认75
    delay(100);
  }
  else if  (state == 3) { //只控制2轴和3轴
    setServoAngle(iHandleSetServoAngle_alxe2, SERVO_PIN2, 0, 270); // 2轴 默认120
    delay(100);
    setServoAngle(iHandleSetServoAngle_alxe3, SERVO_PIN3, 0, 270); // 3轴 默认165
    delay(100);
  }
  else if  (state == 4) { //示教器模式
    handleBlinking(); // 两个LED交替闪烁
    handleModbusCmd(); //处理modbus虚拟手柄位置指令
  }
 
  else if  (state == 5) {
    // 状态5:两个LED同时闪烁
    handleSimultaneousBlink();
   
    // 自动演示:8个位置循环运动
    handleAutoDemo();
  }
 
  delay(50);
}


五、演示效果

下面是触摸屏界面,详细演示效果请看视频。

image.png

六、心得体会

本项目设计并制作了一款4轴机械臂,初步实现了本地控制和远程控制、自动控制等功能。

    机器人是一个交叉学科,涉及机械、电子、软件、控制等多方面知识。此项目只是一个起点,初步完成了一个机械臂雏形。

    因本人技术水平、时间精力、预算等有限,此项目还有很多需要完善和进一步拓展的空间。

    机械:目前只有4个自由度,不够灵活。机械结构靠散件拼搭,精度不够。后续考虑全新设计,3D打印。

    电路:后续增加摄像头接口,加入视觉系统,以太网接口,算力升级。

    软件:与计算机通讯,与ROS2结合、建模与解算、数字孪生仿真、图像识别

     感谢电子森林、硬禾学堂、得捷电子,为大家的创意插上翅膀!

     感谢我的同事甘师傅对我在机械结构方面的帮助!

     感谢家人的陪伴与支持!











软硬件
电路图
附件下载
ESP32_Motor_Board_PWM_Ctrl_RobotS_BaseEspLib3.0.7_V2.1.zip
软件代码(Arduino)
舵机控制及遥控板1.1 Kicad.zip
Kicad工程
PCB效果图1.png
PCB效果图2.png
原理框图.png
舵机控制板电路原理图.pdf
团队介绍
老胡,自动化工程师。
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号